From 587d347178848c6045520327aa97abc8fd5b46bc Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Fri, 15 Jan 2016 17:01:30 +0800 Subject: [PATCH 001/423] added wechat --- Gemfile | 1 + app/controllers/wechats_controller.rb | 119 + config/routes.rb | 3 + config/wechat.yml | 33 + db/schema.rb | 6008 ++++++++----------------- 5 files changed, 2153 insertions(+), 4011 deletions(-) create mode 100644 app/controllers/wechats_controller.rb create mode 100644 config/wechat.yml diff --git a/Gemfile b/Gemfile index c739e1085..0e4e456ca 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,7 @@ unless RUBY_PLATFORM =~ /w32/ gem 'iconv' end +gem 'wechat' gem 'grack', path:'lib/grack' gem 'gitlab', path: 'lib/gitlab-cli' gem 'rest-client' diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb new file mode 100644 index 000000000..fd3050e05 --- /dev/null +++ b/app/controllers/wechats_controller.rb @@ -0,0 +1,119 @@ +class WechatsController < ActionController::Base + wechat_responder + + # default text responder when no other match + on :text do |request, content| + request.reply.text "echo: #{content}" # Just echo + end + + # When receive 'help', will trigger this responder + on :text, with: 'help' do |request| + request.reply.text 'help content' + end + + # When receive 'news', will match and will got count as as parameter + on :text, with: /^(\d+) news$/ do |request, count| + # Wechat article can only contain max 10 items, large than 10 will dropped. + news = (1..count.to_i).each_with_object([]) { |n, memo| memo << { title: 'News title', content: "No. #{n} news content" } } + request.reply.news(news) do |article, n, index| # article is return object + article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'http://www.baidu.com/img/bdlogo.gif', url: 'http://www.baidu.com/' + end + end + + on :event, with: 'subscribe' do |request| + request.reply.text "#{request[:FromUserName]} subscribe now" + end + + # When unsubscribe user scan qrcode qrscene_xxxxxx to subscribe in public account + # notice user will subscribe public account at same time, so wechat won't trigger subscribe event any more + on :scan, with: 'qrscene_xxxxxx' do |request, ticket| + request.reply.text "Unsubscribe user #{request[:FromUserName]} Ticket #{ticket}" + end + + # When subscribe user scan scene_id in public account + on :scan, with: 'scene_id' do |request, ticket| + request.reply.text "Subscribe user #{request[:FromUserName]} Ticket #{ticket}" + end + + # When no any on :scan responder can match subscribe user scaned scene_id + on :event, with: 'scan' do |request| + if request[:EventKey].present? + request.reply.text "event scan got EventKey #{request[:EventKey]} Ticket #{request[:Ticket]}" + end + end + + # When enterprise user press menu BINDING_QR_CODE and success to scan bar code + on :scan, with: 'BINDING_QR_CODE' do |request, scan_result, scan_type| + request.reply.text "User #{request[:FromUserName]} ScanResult #{scan_result} ScanType #{scan_type}" + end + + # Except QR code, wechat can also scan CODE_39 bar code in enterprise account + on :scan, with: 'BINDING_BARCODE' do |message, scan_result| + if scan_result.start_with? 'CODE_39,' + message.reply.text "User: #{message[:FromUserName]} scan barcode, result is #{scan_result.split(',')[1]}" + end + end + + # When user click the menu button + on :click, with: 'BOOK_LUNCH' do |request, key| + request.reply.text "User: #{request[:FromUserName]} click #{key}" + end + + # When user view URL in the menu button + on :view, with: 'http://wechat.somewhere.com/view_url' do |request, view| + request.reply.text "#{request[:FromUserName]} view #{view}" + end + + # When user sent the imsage + on :image do |request| + request.reply.image(request[:MediaId]) # Echo the sent image to user + end + + # When user sent the voice + on :voice do |request| + request.reply.voice(request[:MediaId]) # Echo the sent voice to user + end + + # When user sent the video + on :video do |request| + nickname = wechat.user(request[:FromUserName])['nickname'] # Call wechat api to get sender nickname + request.reply.video(request[:MediaId], title: 'Echo', description: "Got #{nickname} sent video") # Echo the sent video to user + end + + # When user sent location + on :location do |request| + request.reply.text("Latitude: #{message[:Latitude]} Longitude: #{message[:Longitude]} Precision: #{message[:Precision]}") + end + + on :event, with: 'unsubscribe' do |request| + request.reply.success # user can not receive this message + end + + # When user enter the app / agent app + on :event, with: 'enter_agent' do |request| + request.reply.text "#{request[:FromUserName]} enter agent app now" + end + + # When batch job create/update user (incremental) finished. + on :batch_job, with: 'sync_user' do |request, batch_job| + request.reply.text "sync_user job #{batch_job[:JobId]} finished, return code #{batch_job[:ErrCode]}, return message #{batch_job[:ErrMsg]}" + end + + # When batch job replace user (full sync) finished. + on :batch_job, with: 'replace_user' do |request, batch_job| + request.reply.text "replace_user job #{batch_job[:JobId]} finished, return code #{batch_job[:ErrCode]}, return message #{batch_job[:ErrMsg]}" + end + + # When batch job invent user finished. + on :batch_job, with: 'invite_user' do |request, batch_job| + request.reply.text "invite_user job #{batch_job[:JobId]} finished, return code #{batch_job[:ErrCode]}, return message #{batch_job[:ErrMsg]}" + end + + # When batch job replace department (full sync) finished. + on :batch_job, with: 'replace_party' do |request, batch_job| + request.reply.text "replace_party job #{batch_job[:JobId]} finished, return code #{batch_job[:ErrCode]}, return message #{batch_job[:ErrMsg]}" + end + + # Any not match above will fail to below + on :fallback, respond: 'fallback message' +end diff --git a/config/routes.rb b/config/routes.rb index 6afd5e011..02220864d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,6 +26,7 @@ # Example: :via => :get ====> :via => :get RedmineApp::Application.routes.draw do + mount Mobile::API => '/api' # Enable Grack support @@ -1119,6 +1120,8 @@ RedmineApp::Application.routes.draw do resources :at + resource :wechat, only:[:show, :create] + Dir.glob File.expand_path("plugins/*", Rails.root) do |plugin_dir| file = File.join(plugin_dir, "config/routes.rb") if File.exists?(file) diff --git a/config/wechat.yml b/config/wechat.yml new file mode 100644 index 000000000..af795654f --- /dev/null +++ b/config/wechat.yml @@ -0,0 +1,33 @@ +default: &default + corpid: "corpid" + corpsecret: "corpsecret" + agentid: 1 +# Or if using public account, only need above two line +# appid: "my_appid" +# secret: "my_secret" + token: "my_token" + access_token: "1234567" + encrypt_mode: true # if true must fill encoding_aes_key + encoding_aes_key: "TJP8IMYwdcW1EkBIKIcQ193bCe7uB0RVqZDC2eAmkjz" + jsapi_ticket: "C:/Users/[user_name]/wechat_jsapi_ticket" + +production: + corpid: <%= ENV['WECHAT_CORPID'] %> + corpsecret: <%= ENV['WECHAT_CORPSECRET'] %> + agentid: <%= ENV['WECHAT_AGENTID'] %> +# Or if using public account, only need above two line +# appid: +# secret: + token: <%= ENV['WECHAT_TOKEN'] %> + timeout: 30, + skip_verify_ssl: true + access_token: <%= ENV['WECHAT_ACCESS_TOKEN'] %> + encrypt_mode: false # if true must fill encoding_aes_key + encoding_aes_key: <%= ENV['WECHAT_ENCODING_AES_KEY'] %> + jsapi_ticket: + +development: + <<: *default + +test: + <<: *default \ No newline at end of file diff --git a/db/schema.rb b/db/schema.rb index 6e599f520..2e0e4d238 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1,2018 +1,3 @@ -<<<<<<< HEAD -# encoding: UTF-8 -# This file is auto-generated from the current state of the database. Instead -# of editing this file, please use the migrations feature of Active Record to -# incrementally modify your database, and then regenerate this schema definition. -# -# Note that this schema.rb definition is the authoritative source for your -# database schema. If you need to create the application database on another -# system, you should be using db:schema:load, not running all the migrations -# from scratch. The latter is a flawed and unsustainable approach (the more migrations -# you'll amass, the slower it'll run and the greater likelihood for issues). -# -# It's strongly recommended to check this file into your version control system. - -ActiveRecord::Schema.define(:version => 20160113090435) do - - create_table "activities", :force => true do |t| - t.integer "act_id", :null => false - t.string "act_type", :null => false - t.integer "user_id", :null => false - t.integer "activity_container_id" - t.string "activity_container_type", :default => "" - t.datetime "created_at" - end - - add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type" - add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type" - add_index "activities", ["user_id"], :name => "index_activities_on_user_id" - - create_table "activity_notifies", :force => true do |t| - t.integer "activity_container_id" - t.string "activity_container_type" - t.integer "activity_id" - t.string "activity_type" - t.integer "notify_to" - t.datetime "created_on" - t.integer "is_read" - end - - add_index "activity_notifies", ["activity_container_id", "activity_container_type"], :name => "index_an_activity_container_id" - add_index "activity_notifies", ["created_on"], :name => "index_an_created_on" - add_index "activity_notifies", ["notify_to"], :name => "index_an_notify_to" - - create_table "api_keys", :force => true do |t| - t.string "access_token" - t.datetime "expires_at" - t.integer "user_id" - t.boolean "active", :default => true - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token" - add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id" - - create_table "applied_projects", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false - end - - create_table "apply_project_masters", :force => true do |t| - t.integer "user_id" - t.string "apply_type" - t.integer "apply_id" - t.integer "status" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "at_messages", :force => true do |t| - t.integer "user_id" - t.integer "at_message_id" - t.string "at_message_type" - t.boolean "viewed", :default => false - t.string "container_type" - t.integer "container_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sender_id" - end - - add_index "at_messages", ["user_id"], :name => "index_at_messages_on_user_id" - - create_table "attachment_histories", :force => true do |t| - t.integer "container_id" - t.string "container_type" - t.string "filename", :default => "" - t.string "disk_filename", :default => "" - t.integer "filesize", :default => 0 - t.string "content_type", :default => "" - t.string "digest", :limit => 40, :default => "" - t.integer "downloads", :default => 0 - t.integer "author_id" - t.datetime "created_on" - t.string "description" - t.string "disk_directory" - t.integer "attachtype" - t.integer "is_public" - t.integer "copy_from" - t.integer "quotes" - t.integer "version" - t.integer "attachment_id" - end - - create_table "attachments", :force => true do |t| - t.integer "container_id" - t.string "container_type", :limit => 30 - t.string "filename", :default => "", :null => false - t.string "disk_filename", :default => "", :null => false - t.integer "filesize", :default => 0, :null => false - t.string "content_type", :default => "" - t.string "digest", :limit => 40, :default => "", :null => false - t.integer "downloads", :default => 0, :null => false - t.integer "author_id", :default => 0, :null => false - t.datetime "created_on" - t.string "description" - t.string "disk_directory" - t.integer "attachtype", :default => 1 - t.integer "is_public", :default => 1 - t.integer "copy_from" - t.integer "quotes" - end - - add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id" - add_index "attachments", ["container_id", "container_type"], :name => "index_attachments_on_container_id_and_container_type" - add_index "attachments", ["created_on"], :name => "index_attachments_on_created_on" - - create_table "attachmentstypes", :force => true do |t| - t.integer "typeId", :null => false - t.string "typeName", :limit => 50 - end - - create_table "auth_sources", :force => true do |t| - t.string "type", :limit => 30, :default => "", :null => false - t.string "name", :limit => 60, :default => "", :null => false - t.string "host", :limit => 60 - t.integer "port" - t.string "account" - t.string "account_password", :default => "" - t.string "base_dn" - t.string "attr_login", :limit => 30 - t.string "attr_firstname", :limit => 30 - t.string "attr_lastname", :limit => 30 - t.string "attr_mail", :limit => 30 - t.boolean "onthefly_register", :default => false, :null => false - t.boolean "tls", :default => false, :null => false - t.string "filter" - t.integer "timeout" - end - - add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type" - - create_table "biding_projects", :force => true do |t| - t.integer "project_id" - t.integer "bid_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "bids", :force => true do |t| - t.string "name" - t.string "budget", :null => false - t.integer "author_id" - t.date "deadline" - t.text "description" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.integer "commit" - t.integer "reward_type" - t.integer "homework_type" - t.integer "parent_id" - t.string "password" - t.integer "is_evaluation" - t.integer "proportion", :default => 60 - t.integer "comment_status", :default => 0 - t.integer "evaluation_num", :default => 3 - t.integer "open_anonymous_evaluation", :default => 1 - end - - create_table "blog_comments", :force => true do |t| - t.integer "blog_id", :null => false - t.integer "parent_id" - t.string "title", :default => "", :null => false - t.text "content" - t.integer "author_id" - t.integer "comments_count", :default => 0, :null => false - t.integer "last_comment_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.boolean "locked", :default => false - t.integer "sticky", :default => 0 - t.integer "reply_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "blogs", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "description" - t.integer "position", :default => 1 - t.integer "article_count", :default => 0, :null => false - t.integer "comments_count", :default => 0, :null => false - t.integer "last_comments_id" - t.integer "parent_id" - t.integer "author_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "homepage_id" - end - - create_table "boards", :force => true do |t| - t.integer "project_id", :null => false - t.string "name", :default => "", :null => false - t.string "description" - t.integer "position", :default => 1 - t.integer "topics_count", :default => 0, :null => false - t.integer "messages_count", :default => 0, :null => false - t.integer "last_message_id" - t.integer "parent_id" - t.integer "course_id" - t.integer "org_subfield_id" - end - - add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id" - add_index "boards", ["project_id"], :name => "boards_project_id" - - create_table "bug_to_osps", :force => true do |t| - t.integer "osp_id" - t.integer "relative_memo_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "changes", :force => true do |t| - t.integer "changeset_id", :null => false - t.string "action", :limit => 1, :default => "", :null => false - t.text "path", :null => false - t.text "from_path" - t.string "from_revision" - t.string "revision" - t.string "branch" - end - - add_index "changes", ["changeset_id"], :name => "changesets_changeset_id" - - create_table "changeset_parents", :id => false, :force => true do |t| - t.integer "changeset_id", :null => false - t.integer "parent_id", :null => false - end - - add_index "changeset_parents", ["changeset_id"], :name => "changeset_parents_changeset_ids" - add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids" - - create_table "changesets", :force => true do |t| - t.integer "repository_id", :null => false - t.string "revision", :null => false - t.string "committer" - t.datetime "committed_on", :null => false - t.text "comments" - t.date "commit_date" - t.string "scmid" - t.integer "user_id" - end - - add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on" - add_index "changesets", ["repository_id", "revision"], :name => "changesets_repos_rev", :unique => true - add_index "changesets", ["repository_id", "scmid"], :name => "changesets_repos_scmid" - add_index "changesets", ["repository_id"], :name => "index_changesets_on_repository_id" - add_index "changesets", ["user_id"], :name => "index_changesets_on_user_id" - - create_table "changesets_issues", :id => false, :force => true do |t| - t.integer "changeset_id", :null => false - t.integer "issue_id", :null => false - end - - add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true - - create_table "code_review_assignments", :force => true do |t| - t.integer "issue_id" - t.integer "change_id" - t.integer "attachment_id" - t.string "file_path" - t.string "rev" - t.string "rev_to" - t.string "action_type" - t.integer "changeset_id" - end - - create_table "code_review_project_settings", :force => true do |t| - t.integer "project_id" - t.integer "tracker_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "updated_by" - t.boolean "hide_code_review_tab", :default => false - t.integer "auto_relation", :default => 1 - t.integer "assignment_tracker_id" - t.text "auto_assign" - t.integer "lock_version", :default => 0, :null => false - t.boolean "tracker_in_review_dialog", :default => false - end - - create_table "code_review_user_settings", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.integer "mail_notification", :default => 0, :null => false - t.datetime "created_at" - t.datetime "updated_at" - end - - create_table "code_reviews", :force => true do |t| - t.integer "project_id" - t.integer "change_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "line" - t.integer "updated_by_id" - t.integer "lock_version", :default => 0, :null => false - t.integer "status_changed_from" - t.integer "status_changed_to" - t.integer "issue_id" - t.string "action_type" - t.string "file_path" - t.string "rev" - t.string "rev_to" - t.integer "attachment_id" - t.integer "file_count", :default => 0, :null => false - t.boolean "diff_all" - end - - create_table "comments", :force => true do |t| - t.string "commented_type", :limit => 30, :default => "", :null => false - t.integer "commented_id", :default => 0, :null => false - t.integer "author_id", :default => 0, :null => false - t.text "comments" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - add_index "comments", ["author_id"], :name => "index_comments_on_author_id" - add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type" - - create_table "contest_notifications", :force => true do |t| - t.text "title" - t.text "content" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "contesting_projects", :force => true do |t| - t.integer "project_id" - t.string "contest_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "contesting_softapplications", :force => true do |t| - t.integer "softapplication_id" - t.integer "contest_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "contestnotifications", :force => true do |t| - t.integer "contest_id" - t.string "title" - t.string "summary" - t.text "description" - t.integer "author_id" - t.integer "notificationcomments_count" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "contests", :force => true do |t| - t.string "name" - t.string "budget", :default => "" - t.integer "author_id" - t.date "deadline" - t.string "description" - t.integer "commit" - t.string "password" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - create_table "course_activities", :force => true do |t| - t.integer "user_id" - t.integer "course_id" - t.integer "course_act_id" - t.string "course_act_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_attachments", :force => true do |t| - t.string "filename" - t.string "disk_filename" - t.integer "filesize" - t.string "content_type" - t.string "digest" - t.integer "downloads" - t.string "author_id" - t.string "integer" - t.string "description" - t.string "disk_directory" - t.integer "attachtype" - t.integer "is_public" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "container_id", :default => 0 - end - - create_table "course_contributor_scores", :force => true do |t| - t.integer "course_id" - t.integer "user_id" - t.integer "message_num" - t.integer "message_reply_num" - t.integer "news_reply_num" - t.integer "resource_num" - t.integer "journal_num" - t.integer "journal_reply_num" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "total_score" - end - - create_table "course_groups", :force => true do |t| - t.string "name" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_infos", :force => true do |t| - t.integer "course_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_messages", :force => true do |t| - t.integer "user_id" - t.integer "course_id" - t.integer "course_message_id" - t.string "course_message_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "content" - t.integer "status" - end - - create_table "course_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "course_id" - t.float "grade", :default => 0.0 - t.integer "course_ac_para", :default => 0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "courses", :force => true do |t| - t.integer "tea_id" - t.string "name" - t.integer "state" - t.string "code" - t.integer "time" - t.string "extra" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "location" - t.string "term" - t.string "string" - t.string "password" - t.string "setup_time" - t.string "endup_time" - t.string "class_period" - t.integer "school_id" - t.text "description" - t.integer "status", :default => 1 - t.integer "attachmenttype", :default => 2 - t.integer "lft" - t.integer "rgt" - t.integer "is_public", :limit => 1, :default => 1 - t.integer "inherit_members", :limit => 1, :default => 1 - t.integer "open_student", :default => 0 - t.integer "outline", :default => 0 - t.integer "publish_resource", :default => 0 - t.integer "is_delete", :default => 0 - t.integer "end_time" - t.string "end_term" - end - - create_table "custom_fields", :force => true do |t| - t.string "type", :limit => 30, :default => "", :null => false - t.string "name", :limit => 30, :default => "", :null => false - t.string "field_format", :limit => 30, :default => "", :null => false - t.text "possible_values" - t.string "regexp", :default => "" - t.integer "min_length", :default => 0, :null => false - t.integer "max_length", :default => 0, :null => false - t.boolean "is_required", :default => false, :null => false - t.boolean "is_for_all", :default => false, :null => false - t.boolean "is_filter", :default => false, :null => false - t.integer "position", :default => 1 - t.boolean "searchable", :default => false - t.text "default_value" - t.boolean "editable", :default => true - t.boolean "visible", :default => true, :null => false - t.boolean "multiple", :default => false - end - - add_index "custom_fields", ["id", "type"], :name => "index_custom_fields_on_id_and_type" - - create_table "custom_fields_projects", :id => false, :force => true do |t| - t.integer "custom_field_id", :default => 0, :null => false - t.integer "project_id", :default => 0, :null => false - end - - add_index "custom_fields_projects", ["custom_field_id", "project_id"], :name => "index_custom_fields_projects_on_custom_field_id_and_project_id", :unique => true - - create_table "custom_fields_trackers", :id => false, :force => true do |t| - t.integer "custom_field_id", :default => 0, :null => false - t.integer "tracker_id", :default => 0, :null => false - end - - add_index "custom_fields_trackers", ["custom_field_id", "tracker_id"], :name => "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", :unique => true - - create_table "custom_values", :force => true do |t| - t.string "customized_type", :limit => 30, :default => "", :null => false - t.integer "customized_id", :default => 0, :null => false - t.integer "custom_field_id", :default => 0, :null => false - t.text "value" - end - - add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id" - add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized" - - create_table "delayed_jobs", :force => true do |t| - t.integer "priority", :default => 0, :null => false - t.integer "attempts", :default => 0, :null => false - t.text "handler", :null => false - t.text "last_error" - t.datetime "run_at" - t.datetime "locked_at" - t.datetime "failed_at" - t.string "locked_by" - t.string "queue" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" - - create_table "discuss_demos", :force => true do |t| - t.string "title" - t.text "body" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "documents", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.integer "category_id", :default => 0, :null => false - t.string "title", :limit => 60, :default => "", :null => false - t.text "description" - t.datetime "created_on" - t.integer "user_id", :default => 0 - t.integer "is_public", :default => 1 - end - - add_index "documents", ["category_id"], :name => "index_documents_on_category_id" - add_index "documents", ["created_on"], :name => "index_documents_on_created_on" - add_index "documents", ["project_id"], :name => "documents_project_id" - - create_table "dts", :primary_key => "Num", :force => true do |t| - t.string "Defect", :limit => 50 - t.string "Category", :limit => 50 - t.string "File" - t.string "Method" - t.string "Module", :limit => 20 - t.string "Variable", :limit => 50 - t.integer "StartLine" - t.integer "IPLine" - t.string "IPLineCode", :limit => 200 - t.string "Judge", :limit => 15 - t.integer "Review", :limit => 1 - t.string "Description" - t.text "PreConditions", :limit => 2147483647 - t.text "TraceInfo", :limit => 2147483647 - t.text "Code", :limit => 2147483647 - t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "id", :null => false - end - - create_table "editor_of_documents", :force => true do |t| - t.integer "editor_id" - t.integer "org_document_comment_id" - t.datetime "created_at" - end - - create_table "enabled_modules", :force => true do |t| - t.integer "project_id" - t.string "name", :null => false - t.integer "course_id" - end - - add_index "enabled_modules", ["project_id"], :name => "enabled_modules_project_id" - - create_table "enumerations", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.integer "position", :default => 1 - t.boolean "is_default", :default => false, :null => false - t.string "type" - t.boolean "active", :default => true, :null => false - t.integer "project_id" - t.integer "parent_id" - t.string "position_name", :limit => 30 - end - - add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type" - add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id" - - create_table "exercise_answers", :force => true do |t| - t.integer "user_id" - t.integer "exercise_question_id" - t.integer "exercise_choice_id" - t.text "answer_text" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "exercise_choices", :force => true do |t| - t.integer "exercise_question_id" - t.text "choice_text" - t.integer "choice_position" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "exercise_questions", :force => true do |t| - t.text "question_title" - t.integer "question_type" - t.integer "question_number" - t.integer "exercise_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "question_score" - end - - create_table "exercise_standard_answers", :force => true do |t| - t.integer "exercise_question_id" - t.integer "exercise_choice_id" - t.text "answer_text" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "exercise_users", :force => true do |t| - t.integer "user_id" - t.integer "exercise_id" - t.integer "score" - t.datetime "start_at" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.datetime "end_at" - t.integer "status" - end - - create_table "exercises", :force => true do |t| - t.text "exercise_name" - t.text "exercise_description" - t.integer "course_id" - t.integer "exercise_status" - t.integer "user_id" - t.integer "time" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.datetime "publish_time" - t.datetime "end_time" - t.integer "show_result" - end - - create_table "first_pages", :force => true do |t| - t.string "web_title" - t.string "title" - t.text "description" - t.string "page_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sort_type" - t.integer "image_width", :default => 107 - t.integer "image_height", :default => 63 - t.integer "show_course", :default => 1 - t.integer "show_contest", :default => 1 - end - - create_table "forge_activities", :force => true do |t| - t.integer "user_id" - t.integer "project_id" - t.integer "forge_act_id" - t.string "forge_act_type" - t.integer "org_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "forge_activities", ["forge_act_id"], :name => "index_forge_activities_on_forge_act_id" - - create_table "forge_messages", :force => true do |t| - t.integer "user_id" - t.integer "project_id" - t.integer "forge_message_id" - t.string "forge_message_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "secret_key" - t.integer "status" - end - - create_table "forums", :force => true do |t| - t.string "name", :null => false - t.text "description" - t.integer "topic_count", :default => 0 - t.integer "memo_count", :default => 0 - t.integer "last_memo_id", :default => 0 - t.integer "creator_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sticky" - t.integer "locked" - end - - create_table "groups_users", :id => false, :force => true do |t| - t.integer "group_id", :null => false - t.integer "user_id", :null => false - end - - add_index "groups_users", ["group_id", "user_id"], :name => "groups_users_ids", :unique => true - - create_table "homework_attaches", :force => true do |t| - t.integer "bid_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - t.string "name" - t.text "description" - t.integer "state" - t.integer "project_id", :default => 0 - t.float "score", :default => 0.0 - t.integer "is_teacher_score", :default => 0 - end - - add_index "homework_attaches", ["bid_id"], :name => "index_homework_attaches_on_bid_id" - - create_table "homework_commons", :force => true do |t| - t.string "name" - t.integer "user_id" - t.text "description" - t.date "publish_time" - t.date "end_time" - t.integer "homework_type", :default => 1 - t.string "late_penalty" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "teacher_priority", :default => 1 - t.integer "anonymous_comment", :default => 0 - end - - add_index "homework_commons", ["course_id", "id"], :name => "index_homework_commons_on_course_id_and_id" - - create_table "homework_detail_groups", :force => true do |t| - t.integer "homework_common_id" - t.integer "min_num" - t.integer "max_num" - t.integer "base_on_project" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "homework_detail_groups", ["homework_common_id"], :name => "index_homework_detail_groups_on_homework_common_id" - - create_table "homework_detail_manuals", :force => true do |t| - t.float "ta_proportion" - t.integer "comment_status" - t.date "evaluation_start" - t.date "evaluation_end" - t.integer "evaluation_num" - t.integer "absence_penalty", :default => 1 - t.integer "homework_common_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "homework_detail_programings", :force => true do |t| - t.string "language" - t.text "standard_code", :limit => 2147483647 - t.integer "homework_common_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.float "ta_proportion", :default => 0.1 - t.integer "question_id" - end - - create_table "homework_evaluations", :force => true do |t| - t.string "user_id" - t.string "homework_attach_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "homework_for_courses", :force => true do |t| - t.integer "course_id" - t.integer "bid_id" - end - - add_index "homework_for_courses", ["bid_id"], :name => "index_homework_for_courses_on_bid_id" - add_index "homework_for_courses", ["course_id"], :name => "index_homework_for_courses_on_course_id" - - create_table "homework_tests", :force => true do |t| - t.text "input" - t.text "output" - t.integer "homework_common_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "result" - t.text "error_msg" - end - - create_table "homework_users", :force => true do |t| - t.string "homework_attach_id" - t.string "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "invite_lists", :force => true do |t| - t.integer "project_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "mail" - end - - create_table "issue_categories", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "name", :limit => 30, :default => "", :null => false - t.integer "assigned_to_id" - end - - add_index "issue_categories", ["assigned_to_id"], :name => "index_issue_categories_on_assigned_to_id" - add_index "issue_categories", ["project_id"], :name => "issue_categories_project_id" - - create_table "issue_relations", :force => true do |t| - t.integer "issue_from_id", :null => false - t.integer "issue_to_id", :null => false - t.string "relation_type", :default => "", :null => false - t.integer "delay" - end - - add_index "issue_relations", ["issue_from_id", "issue_to_id"], :name => "index_issue_relations_on_issue_from_id_and_issue_to_id", :unique => true - add_index "issue_relations", ["issue_from_id"], :name => "index_issue_relations_on_issue_from_id" - add_index "issue_relations", ["issue_to_id"], :name => "index_issue_relations_on_issue_to_id" - - create_table "issue_statuses", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.boolean "is_closed", :default => false, :null => false - t.boolean "is_default", :default => false, :null => false - t.integer "position", :default => 1 - t.integer "default_done_ratio" - end - - add_index "issue_statuses", ["is_closed"], :name => "index_issue_statuses_on_is_closed" - add_index "issue_statuses", ["is_default"], :name => "index_issue_statuses_on_is_default" - add_index "issue_statuses", ["position"], :name => "index_issue_statuses_on_position" - - create_table "issues", :force => true do |t| - t.integer "tracker_id", :null => false - t.integer "project_id", :null => false - t.string "subject", :default => "", :null => false - t.text "description" - t.date "due_date" - t.integer "category_id" - t.integer "status_id", :null => false - t.integer "assigned_to_id" - t.integer "priority_id", :null => false - t.integer "fixed_version_id" - t.integer "author_id", :null => false - t.integer "lock_version", :default => 0, :null => false - t.datetime "created_on" - t.datetime "updated_on" - t.date "start_date" - t.integer "done_ratio", :default => 0, :null => false - t.float "estimated_hours" - t.integer "parent_id" - t.integer "root_id" - t.integer "lft" - t.integer "rgt" - t.boolean "is_private", :default => false, :null => false - t.datetime "closed_on" - t.integer "project_issues_index" - end - - add_index "issues", ["assigned_to_id"], :name => "index_issues_on_assigned_to_id" - add_index "issues", ["author_id"], :name => "index_issues_on_author_id" - add_index "issues", ["category_id"], :name => "index_issues_on_category_id" - add_index "issues", ["created_on"], :name => "index_issues_on_created_on" - add_index "issues", ["fixed_version_id"], :name => "index_issues_on_fixed_version_id" - add_index "issues", ["priority_id"], :name => "index_issues_on_priority_id" - add_index "issues", ["project_id"], :name => "issues_project_id" - add_index "issues", ["root_id", "lft", "rgt"], :name => "index_issues_on_root_id_and_lft_and_rgt" - add_index "issues", ["status_id"], :name => "index_issues_on_status_id" - add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id" - - create_table "join_in_competitions", :force => true do |t| - t.integer "user_id" - t.integer "competition_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "join_in_contests", :force => true do |t| - t.integer "user_id" - t.integer "bid_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "journal_details", :force => true do |t| - t.integer "journal_id", :default => 0, :null => false - t.string "property", :limit => 30, :default => "", :null => false - t.string "prop_key", :limit => 30, :default => "", :null => false - t.text "old_value" - t.text "value" - end - - add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id" - - create_table "journal_replies", :id => false, :force => true do |t| - t.integer "journal_id" - t.integer "user_id" - t.integer "reply_id" - end - - add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id" - add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id" - add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id" - - create_table "journals", :force => true do |t| - t.integer "journalized_id", :default => 0, :null => false - t.string "journalized_type", :limit => 30, :default => "", :null => false - t.integer "user_id", :default => 0, :null => false - t.text "notes" - t.datetime "created_on", :null => false - t.boolean "private_notes", :default => false, :null => false - end - - add_index "journals", ["created_on"], :name => "index_journals_on_created_on" - add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id" - add_index "journals", ["journalized_id"], :name => "index_journals_on_journalized_id" - add_index "journals", ["user_id"], :name => "index_journals_on_user_id" - - create_table "journals_for_messages", :force => true do |t| - t.integer "jour_id" - t.string "jour_type" - t.integer "user_id" - t.text "notes" - t.integer "status" - t.integer "reply_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.string "m_parent_id" - t.boolean "is_readed" - t.integer "m_reply_count" - t.integer "m_reply_id" - t.integer "is_comprehensive_evaluation" - t.integer "private", :default => 0 - end - - create_table "kindeditor_assets", :force => true do |t| - t.string "asset" - t.integer "file_size" - t.string "file_type" - t.integer "owner_id" - t.string "asset_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "owner_type", :default => 0 - end - - create_table "member_roles", :force => true do |t| - t.integer "member_id", :null => false - t.integer "role_id", :null => false - t.integer "inherited_from" - end - - add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id" - add_index "member_roles", ["role_id"], :name => "index_member_roles_on_role_id" - - create_table "members", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.integer "project_id", :default => 0 - t.datetime "created_on" - t.boolean "mail_notification", :default => false, :null => false - t.integer "course_id", :default => -1 - t.integer "course_group_id", :default => 0 - end - - add_index "members", ["project_id"], :name => "index_members_on_project_id" - add_index "members", ["user_id", "project_id", "course_id"], :name => "index_members_on_user_id_and_project_id", :unique => true - add_index "members", ["user_id"], :name => "index_members_on_user_id" - - create_table "memo_messages", :force => true do |t| - t.integer "user_id" - t.integer "forum_id" - t.integer "memo_id" - t.string "memo_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "memos", :force => true do |t| - t.integer "forum_id", :null => false - t.integer "parent_id" - t.string "subject", :null => false - t.text "content", :null => false - t.integer "author_id", :null => false - t.integer "replies_count", :default => 0 - t.integer "last_reply_id" - t.boolean "lock", :default => false - t.boolean "sticky", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "viewed_count", :default => 0 - end - - create_table "message_alls", :force => true do |t| - t.integer "user_id" - t.integer "message_id" - t.string "message_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "messages", :force => true do |t| - t.integer "board_id", :null => false - t.integer "parent_id" - t.string "subject", :default => "", :null => false - t.text "content" - t.integer "author_id" - t.integer "replies_count", :default => 0, :null => false - t.integer "last_reply_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.boolean "locked", :default => false - t.integer "sticky", :default => 0 - t.integer "reply_id" - t.integer "quotes" - end - - add_index "messages", ["author_id"], :name => "index_messages_on_author_id" - add_index "messages", ["board_id"], :name => "messages_board_id" - add_index "messages", ["created_on"], :name => "index_messages_on_created_on" - add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id" - add_index "messages", ["parent_id"], :name => "messages_parent_id" - - create_table "news", :force => true do |t| - t.integer "project_id" - t.string "title", :limit => 60, :default => "", :null => false - t.string "summary", :default => "" - t.text "description" - t.integer "author_id", :default => 0, :null => false - t.datetime "created_on" - t.integer "comments_count", :default => 0, :null => false - t.integer "course_id" - t.integer "sticky", :default => 0 - end - - add_index "news", ["author_id"], :name => "index_news_on_author_id" - add_index "news", ["created_on"], :name => "index_news_on_created_on" - add_index "news", ["project_id"], :name => "news_project_id" - - create_table "no_uses", :force => true do |t| - t.integer "user_id", :null => false - t.string "no_use_type" - t.integer "no_use_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "notificationcomments", :force => true do |t| - t.string "notificationcommented_type" - t.integer "notificationcommented_id" - t.integer "author_id" - t.text "notificationcomments" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "onclick_times", :force => true do |t| - t.integer "user_id" - t.datetime "onclick_time" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "open_id_authentication_associations", :force => true do |t| - t.integer "issued" - t.integer "lifetime" - t.string "handle" - t.string "assoc_type" - t.binary "server_url" - t.binary "secret" - end - - create_table "open_id_authentication_nonces", :force => true do |t| - t.integer "timestamp", :null => false - t.string "server_url" - t.string "salt", :null => false - end - - create_table "open_source_projects", :force => true do |t| - t.string "name" - t.text "description" - t.integer "commit_count", :default => 0 - t.integer "code_line", :default => 0 - t.integer "users_count", :default => 0 - t.date "last_commit_time" - t.string "url" - t.date "date_collected" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "option_numbers", :force => true do |t| - t.integer "user_id" - t.integer "memo" - t.integer "messages_for_issues" - t.integer "issues_status" - t.integer "replay_for_message" - t.integer "replay_for_memo" - t.integer "follow" - t.integer "tread" - t.integer "praise_by_one" - t.integer "praise_by_two" - t.integer "praise_by_three" - t.integer "tread_by_one" - t.integer "tread_by_two" - t.integer "tread_by_three" - t.integer "changeset" - t.integer "document" - t.integer "attachment" - t.integer "issue_done_ratio" - t.integer "post_issue" - t.integer "score_type" - t.integer "total_score" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "project_id" - end - - create_table "org_activities", :force => true do |t| - t.integer "user_id" - t.integer "org_act_id" - t.string "org_act_type" - t.integer "container_id" - t.string "container_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "org_courses", :force => true do |t| - t.integer "organization_id" - t.integer "course_id" - t.datetime "created_at" - end - - create_table "org_document_comments", :force => true do |t| - t.text "title" - t.text "content" - t.integer "organization_id" - t.integer "creator_id" - t.integer "parent_id" - t.integer "reply_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.boolean "locked", :default => false - t.integer "sticky", :default => 0 - t.integer "org_subfield_id" - end - - create_table "org_member_roles", :force => true do |t| - t.integer "org_member_id" - t.integer "role_id" - end - - create_table "org_members", :force => true do |t| - t.integer "user_id" - t.integer "organization_id" - t.string "role" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "org_messages", :force => true do |t| - t.integer "user_id" - t.integer "sender_id" - t.integer "organization_id" - t.string "message_type" - t.integer "message_id" - t.integer "viewed" - t.string "content" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "org_projects", :force => true do |t| - t.integer "organization_id" - t.integer "project_id" - t.datetime "created_at" - end - - create_table "org_subfield_messages", :force => true do |t| - t.integer "org_subfield_id" - t.integer "message_id" - t.string "message_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "org_subfields", :force => true do |t| - t.integer "organization_id" - t.integer "priority" - t.string "name" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "field_type" - t.integer "hide", :default => 0 - end - - create_table "organizations", :force => true do |t| - t.string "name" - t.text "description" - t.integer "creator_id" - t.integer "home_id" - t.string "domain" - t.boolean "is_public" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "phone_app_versions", :force => true do |t| - t.string "version" - t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_answers", :force => true do |t| - t.integer "poll_question_id" - t.text "answer_text" - t.integer "answer_position" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_questions", :force => true do |t| - t.string "question_title" - t.integer "question_type" - t.integer "is_necessary" - t.integer "poll_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "question_number" - end - - create_table "poll_users", :force => true do |t| - t.integer "user_id" - t.integer "poll_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_votes", :force => true do |t| - t.integer "user_id" - t.integer "poll_question_id" - t.integer "poll_answer_id" - t.text "vote_text" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "polls", :force => true do |t| - t.string "polls_name" - t.string "polls_type" - t.integer "polls_group_id" - t.integer "polls_status" - t.integer "user_id" - t.datetime "published_at" - t.datetime "closed_at" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.text "polls_description" - t.integer "show_result", :default => 1 - end - - create_table "praise_tread_caches", :force => true do |t| - t.integer "object_id", :null => false - t.string "object_type" - t.integer "praise_num" - t.integer "tread_num" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "praise_treads", :force => true do |t| - t.integer "user_id", :null => false - t.integer "praise_tread_object_id" - t.string "praise_tread_object_type" - t.integer "praise_or_tread" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "principal_activities", :force => true do |t| - t.integer "user_id" - t.integer "principal_id" - t.integer "principal_act_id" - t.string "principal_act_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "project_infos", :force => true do |t| - t.integer "project_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "project_scores", :force => true do |t| - t.string "project_id" - t.integer "score" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "issue_num", :default => 0 - t.integer "issue_journal_num", :default => 0 - t.integer "news_num", :default => 0 - t.integer "documents_num", :default => 0 - t.integer "changeset_num", :default => 0 - t.integer "board_message_num", :default => 0 - end - - create_table "project_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "project_id" - t.integer "project_type" - t.float "grade", :default => 0.0 - t.integer "course_ac_para", :default => 0 - end - - add_index "project_statuses", ["grade"], :name => "index_project_statuses_on_grade" - - create_table "projecting_softapplictions", :force => true do |t| - t.integer "user_id" - t.integer "softapplication_id" - t.integer "project_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "projects", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "description" - t.string "homepage", :default => "" - t.boolean "is_public", :default => true, :null => false - t.integer "parent_id" - t.datetime "created_on" - t.datetime "updated_on" - t.string "identifier" - t.integer "status", :default => 1, :null => false - t.integer "lft" - t.integer "rgt" - t.boolean "inherit_members", :default => false, :null => false - t.integer "project_type" - t.boolean "hidden_repo", :default => false, :null => false - t.integer "attachmenttype", :default => 1 - t.integer "user_id" - t.integer "dts_test", :default => 0 - t.string "enterprise_name" - t.integer "organization_id" - t.integer "project_new_type" - t.integer "gpid" - t.integer "forked_from_project_id" - t.integer "forked_count" - t.integer "commits_count", :default => 0 - t.integer "publish_resource", :default => 0 - t.integer "issues_count", :default => 0 - t.integer "attachments_count", :default => 0 - t.integer "boards_count", :default => 0 - t.integer "news_count", :default => 0 - t.integer "acts_count", :default => 0 - t.integer "journals_count", :default => 0 - t.integer "boards_reply_count", :default => 0 - end - - add_index "projects", ["lft"], :name => "index_projects_on_lft" - add_index "projects", ["rgt"], :name => "index_projects_on_rgt" - - create_table "projects_trackers", :id => false, :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.integer "tracker_id", :default => 0, :null => false - end - - add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true - add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id" - - create_table "queries", :force => true do |t| - t.integer "project_id" - t.string "name", :default => "", :null => false - t.text "filters" - t.integer "user_id", :default => 0, :null => false - t.boolean "is_public", :default => false, :null => false - t.text "column_names" - t.text "sort_criteria" - t.string "group_by" - t.string "type" - end - - add_index "queries", ["project_id"], :name => "index_queries_on_project_id" - add_index "queries", ["user_id"], :name => "index_queries_on_user_id" - - create_table "relative_memo_to_open_source_projects", :force => true do |t| - t.integer "osp_id" - t.integer "relative_memo_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "relative_memos", :force => true do |t| - t.integer "osp_id" - t.integer "parent_id" - t.string "subject", :null => false - t.text "content", :limit => 16777215, :null => false - t.integer "author_id" - t.integer "replies_count", :default => 0 - t.integer "last_reply_id" - t.boolean "lock", :default => false - t.boolean "sticky", :default => false - t.boolean "is_quote", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "viewed_count_crawl", :default => 0 - t.integer "viewed_count_local", :default => 0 - t.string "url" - t.string "username" - t.string "userhomeurl" - t.date "date_collected" - t.string "topic_resource" - end - - create_table "repositories", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "url", :default => "", :null => false - t.string "login", :limit => 60, :default => "" - t.string "password", :default => "" - t.string "root_url", :default => "" - t.string "type" - t.string "path_encoding", :limit => 64 - t.string "log_encoding", :limit => 64 - t.text "extra_info" - t.string "identifier" - t.boolean "is_default", :default => false - t.boolean "hidden", :default => false - end - - add_index "repositories", ["project_id"], :name => "index_repositories_on_project_id" - - create_table "rich_rich_files", :force => true do |t| - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "rich_file_file_name" - t.string "rich_file_content_type" - t.integer "rich_file_file_size" - t.datetime "rich_file_updated_at" - t.string "owner_type" - t.integer "owner_id" - t.text "uri_cache" - t.string "simplified_type", :default => "file" - end - - create_table "roles", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.integer "position", :default => 1 - t.boolean "assignable", :default => true - t.integer "builtin", :default => 0, :null => false - t.text "permissions" - t.string "issues_visibility", :limit => 30, :default => "default", :null => false - end - - create_table "schools", :force => true do |t| - t.string "name" - t.string "province" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "logo_link" - t.string "pinyin" - end - - create_table "seems_rateable_cached_ratings", :force => true do |t| - t.integer "cacheable_id", :limit => 8 - t.string "cacheable_type" - t.float "avg", :null => false - t.integer "cnt", :null => false - t.string "dimension" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "seems_rateable_rates", :force => true do |t| - t.integer "rater_id", :limit => 8 - t.integer "rateable_id" - t.string "rateable_type" - t.float "stars", :null => false - t.string "dimension" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "is_teacher_score", :default => 0 - end - - create_table "settings", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "value" - t.datetime "updated_on" - end - - add_index "settings", ["name"], :name => "index_settings_on_name" - - create_table "shares", :force => true do |t| - t.date "created_on" - t.string "url" - t.string "title" - t.integer "share_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "project_id" - t.integer "user_id" - t.string "description" - end - - create_table "shield_activities", :force => true do |t| - t.string "container_type" - t.integer "container_id" - t.string "shield_type" - t.integer "shield_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "softapplications", :force => true do |t| - t.string "name" - t.text "description" - t.integer "app_type_id" - t.string "app_type_name" - t.string "android_min_version_available" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "contest_id" - t.integer "softapplication_id" - t.integer "is_public" - t.string "application_developers" - t.string "deposit_project_url" - t.string "deposit_project" - t.integer "project_id" - end - - create_table "student_work_projects", :force => true do |t| - t.integer "homework_common_id" - t.integer "student_work_id" - t.integer "project_id" - t.integer "user_id" - t.integer "is_leader" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "student_work_projects", ["homework_common_id"], :name => "index_student_work_projects_on_homework_common_id" - add_index "student_work_projects", ["project_id"], :name => "index_student_work_projects_on_project_id" - add_index "student_work_projects", ["student_work_id"], :name => "index_student_work_projects_on_student_work_id" - add_index "student_work_projects", ["user_id"], :name => "index_student_work_projects_on_user_id" - - create_table "student_work_tests", :force => true do |t| - t.integer "student_work_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "status", :default => 9 - t.text "results" - t.text "src" - end - - create_table "student_works", :force => true do |t| - t.string "name" - t.text "description", :limit => 2147483647 - t.integer "homework_common_id" - t.integer "user_id" - t.float "final_score" - t.float "teacher_score" - t.float "student_score" - t.float "teaching_asistant_score" - t.integer "project_id", :default => 0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "late_penalty", :default => 0 - t.integer "absence_penalty", :default => 0 - t.float "system_score", :default => 0.0 - t.boolean "is_test", :default => false - end - - add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id" - - create_table "student_works_evaluation_distributions", :force => true do |t| - t.integer "student_work_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "student_works_scores", :force => true do |t| - t.integer "student_work_id" - t.integer "user_id" - t.integer "score" - t.text "comment" - t.integer "reviewer_role" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "students_for_courses", :force => true do |t| - t.integer "student_id" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "students_for_courses", ["course_id"], :name => "index_students_for_courses_on_course_id" - add_index "students_for_courses", ["student_id"], :name => "index_students_for_courses_on_student_id" - - create_table "system_messages", :force => true do |t| - t.integer "user_id" - t.string "content" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.text "description" - t.string "subject" - end - - create_table "taggings", :force => true do |t| - t.integer "tag_id" - t.integer "taggable_id" - t.string "taggable_type" - t.integer "tagger_id" - t.string "tagger_type" - t.string "context", :limit => 128 - t.datetime "created_at" - end - - add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id" - add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context" - add_index "taggings", ["taggable_type"], :name => "index_taggings_on_taggable_type" - - create_table "tags", :force => true do |t| - t.string "name" - end - - create_table "teachers", :force => true do |t| - t.string "tea_name" - t.string "location" - t.integer "couurse_time" - t.integer "course_code" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "extra" - end - - create_table "time_entries", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false - t.integer "issue_id" - t.float "hours", :null => false - t.string "comments" - t.integer "activity_id", :null => false - t.date "spent_on", :null => false - t.integer "tyear", :null => false - t.integer "tmonth", :null => false - t.integer "tweek", :null => false - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - add_index "time_entries", ["activity_id"], :name => "index_time_entries_on_activity_id" - add_index "time_entries", ["created_on"], :name => "index_time_entries_on_created_on" - add_index "time_entries", ["issue_id"], :name => "time_entries_issue_id" - add_index "time_entries", ["project_id"], :name => "time_entries_project_id" - add_index "time_entries", ["user_id"], :name => "index_time_entries_on_user_id" - - create_table "tokens", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.string "action", :limit => 30, :default => "", :null => false - t.string "value", :limit => 40, :default => "", :null => false - t.datetime "created_on", :null => false - end - - add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id" - add_index "tokens", ["value"], :name => "tokens_value", :unique => true - - create_table "trackers", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.boolean "is_in_chlog", :default => false, :null => false - t.integer "position", :default => 1 - t.boolean "is_in_roadmap", :default => true, :null => false - t.integer "fields_bits", :default => 0 - end - - create_table "user_activities", :force => true do |t| - t.string "act_type" - t.integer "act_id" - t.string "container_type" - t.integer "container_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "user_id" - end - - create_table "user_extensions", :force => true do |t| - t.integer "user_id", :null => false - t.date "birthday" - t.string "brief_introduction" - t.integer "gender" - t.string "location" - t.string "occupation" - t.integer "work_experience" - t.integer "zip_code" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "technical_title" - t.integer "identity" - t.string "student_id" - t.string "teacher_realname" - t.string "student_realname" - t.string "location_city" - t.integer "school_id" - t.string "description", :default => "" - end - - create_table "user_feedback_messages", :force => true do |t| - t.integer "user_id" - t.integer "journals_for_message_id" - t.string "journals_for_message_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_grades", :force => true do |t| - t.integer "user_id", :null => false - t.integer "project_id", :null => false - t.float "grade", :default => 0.0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "user_grades", ["grade"], :name => "index_user_grades_on_grade" - add_index "user_grades", ["project_id"], :name => "index_user_grades_on_project_id" - add_index "user_grades", ["user_id"], :name => "index_user_grades_on_user_id" - - create_table "user_levels", :force => true do |t| - t.integer "user_id" - t.integer "level" - end - - create_table "user_preferences", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.text "others" - t.boolean "hide_mail", :default => false - t.string "time_zone" - end - - add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id" - - create_table "user_score_details", :force => true do |t| - t.integer "current_user_id" - t.integer "target_user_id" - t.string "score_type" - t.string "score_action" - t.integer "user_id" - t.integer "old_score" - t.integer "new_score" - t.integer "current_user_level" - t.integer "target_user_level" - t.integer "score_changeable_obj_id" - t.string "score_changeable_obj_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_scores", :force => true do |t| - t.integer "user_id", :null => false - t.integer "collaboration" - t.integer "influence" - t.integer "skill" - t.integer "active" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.float "grade", :default => 0.0 - end - - add_index "user_statuses", ["changesets_count"], :name => "index_user_statuses_on_changesets_count" - add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade" - add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count" - - create_table "users", :force => true do |t| - t.string "login", :default => "", :null => false - t.string "hashed_password", :limit => 40, :default => "", :null => false - t.string "firstname", :limit => 30, :default => "", :null => false - t.string "lastname", :default => "", :null => false - t.string "mail", :limit => 60, :default => "", :null => false - t.boolean "admin", :default => false, :null => false - t.integer "status", :default => 1, :null => false - t.datetime "last_login_on" - t.string "language", :limit => 5, :default => "" - t.integer "auth_source_id" - t.datetime "created_on" - t.datetime "updated_on" - t.string "type" - t.string "identity_url" - t.string "mail_notification", :default => "", :null => false - t.string "salt", :limit => 64 - t.integer "gid" - end - - add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id" - add_index "users", ["id", "type"], :name => "index_users_on_id_and_type" - add_index "users", ["type"], :name => "index_users_on_type" - - create_table "versions", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "name", :default => "", :null => false - t.string "description", :default => "" - t.date "effective_date" - t.datetime "created_on" - t.datetime "updated_on" - t.string "wiki_page_title" - t.string "status", :default => "open" - t.string "sharing", :default => "none", :null => false - end - - add_index "versions", ["project_id"], :name => "versions_project_id" - add_index "versions", ["sharing"], :name => "index_versions_on_sharing" - - create_table "visitors", :force => true do |t| - t.integer "user_id" - t.integer "master_id" - t.datetime "updated_on" - t.datetime "created_on" - end - - add_index "visitors", ["master_id"], :name => "index_visitors_master_id" - add_index "visitors", ["updated_on"], :name => "index_visitors_updated_on" - add_index "visitors", ["user_id"], :name => "index_visitors_user_id" - - create_table "watchers", :force => true do |t| - t.string "watchable_type", :default => "", :null => false - t.integer "watchable_id", :default => 0, :null => false - t.integer "user_id" - end - - add_index "watchers", ["user_id", "watchable_type"], :name => "watchers_user_id_type" - add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id" - add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type" - - create_table "web_footer_companies", :force => true do |t| - t.string "name" - t.string "logo_size" - t.string "url" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "web_footer_oranizers", :force => true do |t| - t.string "name" - t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "wiki_content_versions", :force => true do |t| - t.integer "wiki_content_id", :null => false - t.integer "page_id", :null => false - t.integer "author_id" - t.binary "data", :limit => 2147483647 - t.string "compression", :limit => 6, :default => "" - t.string "comments", :default => "" - t.datetime "updated_on", :null => false - t.integer "version", :null => false - end - - add_index "wiki_content_versions", ["updated_on"], :name => "index_wiki_content_versions_on_updated_on" - add_index "wiki_content_versions", ["wiki_content_id"], :name => "wiki_content_versions_wcid" - - create_table "wiki_contents", :force => true do |t| - t.integer "page_id", :null => false - t.integer "author_id" - t.text "text", :limit => 2147483647 - t.string "comments", :default => "" - t.datetime "updated_on", :null => false - t.integer "version", :null => false - end - - add_index "wiki_contents", ["author_id"], :name => "index_wiki_contents_on_author_id" - add_index "wiki_contents", ["page_id"], :name => "wiki_contents_page_id" - - create_table "wiki_pages", :force => true do |t| - t.integer "wiki_id", :null => false - t.string "title", :null => false - t.datetime "created_on", :null => false - t.boolean "protected", :default => false, :null => false - t.integer "parent_id" - end - - add_index "wiki_pages", ["parent_id"], :name => "index_wiki_pages_on_parent_id" - add_index "wiki_pages", ["wiki_id", "title"], :name => "wiki_pages_wiki_id_title" - add_index "wiki_pages", ["wiki_id"], :name => "index_wiki_pages_on_wiki_id" - - create_table "wiki_redirects", :force => true do |t| - t.integer "wiki_id", :null => false - t.string "title" - t.string "redirects_to" - t.datetime "created_on", :null => false - end - - add_index "wiki_redirects", ["wiki_id", "title"], :name => "wiki_redirects_wiki_id_title" - add_index "wiki_redirects", ["wiki_id"], :name => "index_wiki_redirects_on_wiki_id" - - create_table "wikis", :force => true do |t| - t.integer "project_id", :null => false - t.string "start_page", :null => false - t.integer "status", :default => 1, :null => false - end - - add_index "wikis", ["project_id"], :name => "wikis_project_id" - - create_table "workflows", :force => true do |t| - t.integer "tracker_id", :default => 0, :null => false - t.integer "old_status_id", :default => 0, :null => false - t.integer "new_status_id", :default => 0, :null => false - t.integer "role_id", :default => 0, :null => false - t.boolean "assignee", :default => false, :null => false - t.boolean "author", :default => false, :null => false - t.string "type", :limit => 30 - t.string "field_name", :limit => 30 - t.string "rule", :limit => 30 - end - - add_index "workflows", ["new_status_id"], :name => "index_workflows_on_new_status_id" - add_index "workflows", ["old_status_id"], :name => "index_workflows_on_old_status_id" - add_index "workflows", ["role_id", "tracker_id", "old_status_id"], :name => "wkfs_role_tracker_old_status" - add_index "workflows", ["role_id"], :name => "index_workflows_on_role_id" - - create_table "works_categories", :force => true do |t| - t.string "category" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "zip_packs", :force => true do |t| - t.integer "user_id" - t.integer "homework_id" - t.string "file_digest" - t.string "file_path" - t.integer "pack_times", :default => 1 - t.integer "pack_size", :default => 0 - t.text "file_digests" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - -end -======= # encoding: UTF-8 # This file is auto-generated from the current state of the database. Instead # of editing this file, please use the migrations feature of Active Record to @@ -2026,1654 +11,1660 @@ end # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20160112085834) do - - create_table "activities", :force => true do |t| - t.integer "act_id", :null => false - t.string "act_type", :null => false - t.integer "user_id", :null => false - t.integer "activity_container_id" - t.string "activity_container_type", :default => "" - t.datetime "created_at" - end - - add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type" - add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type" - add_index "activities", ["user_id"], :name => "index_activities_on_user_id" - - create_table "activity_notifies", :force => true do |t| - t.integer "activity_container_id" - t.string "activity_container_type" - t.integer "activity_id" - t.string "activity_type" - t.integer "notify_to" - t.datetime "created_on" - t.integer "is_read" - end - - add_index "activity_notifies", ["activity_container_id", "activity_container_type"], :name => "index_an_activity_container_id" - add_index "activity_notifies", ["created_on"], :name => "index_an_created_on" - add_index "activity_notifies", ["notify_to"], :name => "index_an_notify_to" - - create_table "api_keys", :force => true do |t| - t.string "access_token" - t.datetime "expires_at" - t.integer "user_id" - t.boolean "active", :default => true - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token" - add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id" - - create_table "applied_projects", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false - end - - create_table "apply_project_masters", :force => true do |t| - t.integer "user_id" - t.string "apply_type" - t.integer "apply_id" - t.integer "status" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "at_messages", :force => true do |t| - t.integer "user_id" - t.integer "at_message_id" - t.string "at_message_type" - t.boolean "viewed", :default => false - t.string "container_type" - t.integer "container_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sender_id" - end - - add_index "at_messages", ["user_id"], :name => "index_at_messages_on_user_id" - - create_table "attachment_histories", :force => true do |t| - t.integer "container_id" - t.string "container_type" - t.string "filename", :default => "" - t.string "disk_filename", :default => "" - t.integer "filesize", :default => 0 - t.string "content_type", :default => "" - t.string "digest", :limit => 40, :default => "" - t.integer "downloads", :default => 0 - t.integer "author_id" - t.datetime "created_on" - t.string "description" - t.string "disk_directory" - t.integer "attachtype" - t.integer "is_public" - t.integer "copy_from" - t.integer "quotes" - t.integer "version" - t.integer "attachment_id" - end - - create_table "attachments", :force => true do |t| - t.integer "container_id" - t.string "container_type", :limit => 30 - t.string "filename", :default => "", :null => false - t.string "disk_filename", :default => "", :null => false - t.integer "filesize", :default => 0, :null => false - t.string "content_type", :default => "" - t.string "digest", :limit => 40, :default => "", :null => false - t.integer "downloads", :default => 0, :null => false - t.integer "author_id", :default => 0, :null => false - t.datetime "created_on" - t.string "description" - t.string "disk_directory" - t.integer "attachtype", :default => 1 - t.integer "is_public", :default => 1 - t.integer "copy_from" - t.integer "quotes" - end - - add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id" - add_index "attachments", ["container_id", "container_type"], :name => "index_attachments_on_container_id_and_container_type" - add_index "attachments", ["created_on"], :name => "index_attachments_on_created_on" - - create_table "attachmentstypes", :force => true do |t| - t.integer "typeId", :null => false - t.string "typeName", :limit => 50 - end - - create_table "auth_sources", :force => true do |t| - t.string "type", :limit => 30, :default => "", :null => false - t.string "name", :limit => 60, :default => "", :null => false - t.string "host", :limit => 60 - t.integer "port" - t.string "account" - t.string "account_password", :default => "" - t.string "base_dn" - t.string "attr_login", :limit => 30 - t.string "attr_firstname", :limit => 30 - t.string "attr_lastname", :limit => 30 - t.string "attr_mail", :limit => 30 - t.boolean "onthefly_register", :default => false, :null => false - t.boolean "tls", :default => false, :null => false - t.string "filter" - t.integer "timeout" - end - - add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type" - - create_table "biding_projects", :force => true do |t| - t.integer "project_id" - t.integer "bid_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "bids", :force => true do |t| - t.string "name" - t.string "budget", :null => false - t.integer "author_id" - t.date "deadline" - t.text "description" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.integer "commit" - t.integer "reward_type" - t.integer "homework_type" - t.integer "parent_id" - t.string "password" - t.integer "is_evaluation" - t.integer "proportion", :default => 60 - t.integer "comment_status", :default => 0 - t.integer "evaluation_num", :default => 3 - t.integer "open_anonymous_evaluation", :default => 1 - end - - create_table "blog_comments", :force => true do |t| - t.integer "blog_id", :null => false - t.integer "parent_id" - t.string "title", :default => "", :null => false - t.text "content" - t.integer "author_id" - t.integer "comments_count", :default => 0, :null => false - t.integer "last_comment_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.boolean "locked", :default => false - t.integer "sticky", :default => 0 - t.integer "reply_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "blogs", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "description" - t.integer "position", :default => 1 - t.integer "article_count", :default => 0, :null => false - t.integer "comments_count", :default => 0, :null => false - t.integer "last_comments_id" - t.integer "parent_id" - t.integer "author_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "homepage_id" - end - - create_table "boards", :force => true do |t| - t.integer "project_id", :null => false - t.string "name", :default => "", :null => false - t.string "description" - t.integer "position", :default => 1 - t.integer "topics_count", :default => 0, :null => false - t.integer "messages_count", :default => 0, :null => false - t.integer "last_message_id" - t.integer "parent_id" - t.integer "course_id" - t.integer "org_subfield_id" - end - - add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id" - add_index "boards", ["project_id"], :name => "boards_project_id" - - create_table "bug_to_osps", :force => true do |t| - t.integer "osp_id" - t.integer "relative_memo_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "changes", :force => true do |t| - t.integer "changeset_id", :null => false - t.string "action", :limit => 1, :default => "", :null => false - t.text "path", :null => false - t.text "from_path" - t.string "from_revision" - t.string "revision" - t.string "branch" - end - - add_index "changes", ["changeset_id"], :name => "changesets_changeset_id" - - create_table "changeset_parents", :id => false, :force => true do |t| - t.integer "changeset_id", :null => false - t.integer "parent_id", :null => false - end - - add_index "changeset_parents", ["changeset_id"], :name => "changeset_parents_changeset_ids" - add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids" - - create_table "changesets", :force => true do |t| - t.integer "repository_id", :null => false - t.string "revision", :null => false - t.string "committer" - t.datetime "committed_on", :null => false - t.text "comments" - t.date "commit_date" - t.string "scmid" - t.integer "user_id" - end - - add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on" - add_index "changesets", ["repository_id", "revision"], :name => "changesets_repos_rev", :unique => true - add_index "changesets", ["repository_id", "scmid"], :name => "changesets_repos_scmid" - add_index "changesets", ["repository_id"], :name => "index_changesets_on_repository_id" - add_index "changesets", ["user_id"], :name => "index_changesets_on_user_id" - - create_table "changesets_issues", :id => false, :force => true do |t| - t.integer "changeset_id", :null => false - t.integer "issue_id", :null => false - end - - add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true - - create_table "code_review_assignments", :force => true do |t| - t.integer "issue_id" - t.integer "change_id" - t.integer "attachment_id" - t.string "file_path" - t.string "rev" - t.string "rev_to" - t.string "action_type" - t.integer "changeset_id" - end - - create_table "code_review_project_settings", :force => true do |t| - t.integer "project_id" - t.integer "tracker_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "updated_by" - t.boolean "hide_code_review_tab", :default => false - t.integer "auto_relation", :default => 1 - t.integer "assignment_tracker_id" - t.text "auto_assign" - t.integer "lock_version", :default => 0, :null => false - t.boolean "tracker_in_review_dialog", :default => false - end - - create_table "code_review_user_settings", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.integer "mail_notification", :default => 0, :null => false - t.datetime "created_at" - t.datetime "updated_at" - end - - create_table "code_reviews", :force => true do |t| - t.integer "project_id" - t.integer "change_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "line" - t.integer "updated_by_id" - t.integer "lock_version", :default => 0, :null => false - t.integer "status_changed_from" - t.integer "status_changed_to" - t.integer "issue_id" - t.string "action_type" - t.string "file_path" - t.string "rev" - t.string "rev_to" - t.integer "attachment_id" - t.integer "file_count", :default => 0, :null => false - t.boolean "diff_all" - end - - create_table "comments", :force => true do |t| - t.string "commented_type", :limit => 30, :default => "", :null => false - t.integer "commented_id", :default => 0, :null => false - t.integer "author_id", :default => 0, :null => false - t.text "comments" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - add_index "comments", ["author_id"], :name => "index_comments_on_author_id" - add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type" - - create_table "contest_notifications", :force => true do |t| - t.text "title" - t.text "content" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "contesting_projects", :force => true do |t| - t.integer "project_id" - t.string "contest_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "contesting_softapplications", :force => true do |t| - t.integer "softapplication_id" - t.integer "contest_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "contestnotifications", :force => true do |t| - t.integer "contest_id" - t.string "title" - t.string "summary" - t.text "description" - t.integer "author_id" - t.integer "notificationcomments_count" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "contests", :force => true do |t| - t.string "name" - t.string "budget", :default => "" - t.integer "author_id" - t.date "deadline" - t.string "description" - t.integer "commit" - t.string "password" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - create_table "course_activities", :force => true do |t| - t.integer "user_id" - t.integer "course_id" - t.integer "course_act_id" - t.string "course_act_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_attachments", :force => true do |t| - t.string "filename" - t.string "disk_filename" - t.integer "filesize" - t.string "content_type" - t.string "digest" - t.integer "downloads" - t.string "author_id" - t.string "integer" - t.string "description" - t.string "disk_directory" - t.integer "attachtype" - t.integer "is_public" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "container_id", :default => 0 - end - - create_table "course_contributor_scores", :force => true do |t| - t.integer "course_id" - t.integer "user_id" - t.integer "message_num" - t.integer "message_reply_num" - t.integer "news_reply_num" - t.integer "resource_num" - t.integer "journal_num" - t.integer "journal_reply_num" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "total_score" - end - - create_table "course_groups", :force => true do |t| - t.string "name" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_infos", :force => true do |t| - t.integer "course_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_messages", :force => true do |t| - t.integer "user_id" - t.integer "course_id" - t.integer "course_message_id" - t.string "course_message_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "content" - t.integer "status" - end - - create_table "course_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "course_id" - t.float "grade", :default => 0.0 - t.integer "course_ac_para", :default => 0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "courses", :force => true do |t| - t.integer "tea_id" - t.string "name" - t.integer "state" - t.string "code" - t.integer "time" - t.string "extra" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "location" - t.string "term" - t.string "string" - t.string "password" - t.string "setup_time" - t.string "endup_time" - t.string "class_period" - t.integer "school_id" - t.text "description" - t.integer "status", :default => 1 - t.integer "attachmenttype", :default => 2 - t.integer "lft" - t.integer "rgt" - t.integer "is_public", :limit => 1, :default => 1 - t.integer "inherit_members", :limit => 1, :default => 1 - t.integer "open_student", :default => 0 - t.integer "outline", :default => 0 - t.integer "publish_resource", :default => 0 - t.integer "is_delete", :default => 0 - t.integer "end_time" - t.string "end_term" - end - - create_table "custom_fields", :force => true do |t| - t.string "type", :limit => 30, :default => "", :null => false - t.string "name", :limit => 30, :default => "", :null => false - t.string "field_format", :limit => 30, :default => "", :null => false - t.text "possible_values" - t.string "regexp", :default => "" - t.integer "min_length", :default => 0, :null => false - t.integer "max_length", :default => 0, :null => false - t.boolean "is_required", :default => false, :null => false - t.boolean "is_for_all", :default => false, :null => false - t.boolean "is_filter", :default => false, :null => false - t.integer "position", :default => 1 - t.boolean "searchable", :default => false - t.text "default_value" - t.boolean "editable", :default => true - t.boolean "visible", :default => true, :null => false - t.boolean "multiple", :default => false - end - - add_index "custom_fields", ["id", "type"], :name => "index_custom_fields_on_id_and_type" - - create_table "custom_fields_projects", :id => false, :force => true do |t| - t.integer "custom_field_id", :default => 0, :null => false - t.integer "project_id", :default => 0, :null => false - end - - add_index "custom_fields_projects", ["custom_field_id", "project_id"], :name => "index_custom_fields_projects_on_custom_field_id_and_project_id", :unique => true - - create_table "custom_fields_trackers", :id => false, :force => true do |t| - t.integer "custom_field_id", :default => 0, :null => false - t.integer "tracker_id", :default => 0, :null => false - end - - add_index "custom_fields_trackers", ["custom_field_id", "tracker_id"], :name => "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", :unique => true - - create_table "custom_values", :force => true do |t| - t.string "customized_type", :limit => 30, :default => "", :null => false - t.integer "customized_id", :default => 0, :null => false - t.integer "custom_field_id", :default => 0, :null => false - t.text "value" - end - - add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id" - add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized" - - create_table "delayed_jobs", :force => true do |t| - t.integer "priority", :default => 0, :null => false - t.integer "attempts", :default => 0, :null => false - t.text "handler", :null => false - t.text "last_error" - t.datetime "run_at" - t.datetime "locked_at" - t.datetime "failed_at" - t.string "locked_by" - t.string "queue" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" - - create_table "discuss_demos", :force => true do |t| - t.string "title" - t.text "body" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "documents", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.integer "category_id", :default => 0, :null => false - t.string "title", :limit => 60, :default => "", :null => false - t.text "description" - t.datetime "created_on" - t.integer "user_id", :default => 0 - t.integer "is_public", :default => 1 - end - - add_index "documents", ["category_id"], :name => "index_documents_on_category_id" - add_index "documents", ["created_on"], :name => "index_documents_on_created_on" - add_index "documents", ["project_id"], :name => "documents_project_id" - - create_table "dts", :primary_key => "Num", :force => true do |t| - t.string "Defect", :limit => 50 - t.string "Category", :limit => 50 - t.string "File" - t.string "Method" - t.string "Module", :limit => 20 - t.string "Variable", :limit => 50 - t.integer "StartLine" - t.integer "IPLine" - t.string "IPLineCode", :limit => 200 - t.string "Judge", :limit => 15 - t.integer "Review", :limit => 1 - t.string "Description" - t.text "PreConditions", :limit => 2147483647 - t.text "TraceInfo", :limit => 2147483647 - t.text "Code", :limit => 2147483647 - t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "id", :null => false - end - - create_table "editor_of_documents", :force => true do |t| - t.integer "editor_id" - t.integer "org_document_comment_id" - t.datetime "created_at" - end - - create_table "enabled_modules", :force => true do |t| - t.integer "project_id" - t.string "name", :null => false - t.integer "course_id" - end - - add_index "enabled_modules", ["project_id"], :name => "enabled_modules_project_id" - - create_table "enumerations", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.integer "position", :default => 1 - t.boolean "is_default", :default => false, :null => false - t.string "type" - t.boolean "active", :default => true, :null => false - t.integer "project_id" - t.integer "parent_id" - t.string "position_name", :limit => 30 - end - - add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type" - add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id" - - create_table "exercise_answers", :force => true do |t| - t.integer "user_id" - t.integer "exercise_question_id" - t.integer "exercise_choice_id" - t.text "answer_text" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "exercise_choices", :force => true do |t| - t.integer "exercise_question_id" - t.text "choice_text" - t.integer "choice_position" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "exercise_questions", :force => true do |t| - t.text "question_title" - t.integer "question_type" - t.integer "question_number" - t.integer "exercise_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "question_score" - end - - create_table "exercise_standard_answers", :force => true do |t| - t.integer "exercise_question_id" - t.integer "exercise_choice_id" - t.text "answer_text" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "exercise_users", :force => true do |t| - t.integer "user_id" - t.integer "exercise_id" - t.integer "score" - t.datetime "start_at" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.datetime "end_at" - t.integer "status" - end - - create_table "exercises", :force => true do |t| - t.text "exercise_name" - t.text "exercise_description" - t.integer "course_id" - t.integer "exercise_status" - t.integer "user_id" - t.integer "time" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.datetime "publish_time" - t.datetime "end_time" - t.integer "show_result" - end - - create_table "first_pages", :force => true do |t| - t.string "web_title" - t.string "title" - t.text "description" - t.string "page_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sort_type" - t.integer "image_width", :default => 107 - t.integer "image_height", :default => 63 - t.integer "show_course", :default => 1 - t.integer "show_contest", :default => 1 - end - - create_table "forge_activities", :force => true do |t| - t.integer "user_id" - t.integer "project_id" - t.integer "forge_act_id" - t.string "forge_act_type" - t.integer "org_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "forge_activities", ["forge_act_id"], :name => "index_forge_activities_on_forge_act_id" - - create_table "forge_messages", :force => true do |t| - t.integer "user_id" - t.integer "project_id" - t.integer "forge_message_id" - t.string "forge_message_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "secret_key" - t.integer "status" - end - - create_table "forums", :force => true do |t| - t.string "name", :null => false - t.text "description" - t.integer "topic_count", :default => 0 - t.integer "memo_count", :default => 0 - t.integer "last_memo_id", :default => 0 - t.integer "creator_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sticky" - t.integer "locked" - end - - create_table "groups_users", :id => false, :force => true do |t| - t.integer "group_id", :null => false - t.integer "user_id", :null => false - end - - add_index "groups_users", ["group_id", "user_id"], :name => "groups_users_ids", :unique => true - - create_table "homework_attaches", :force => true do |t| - t.integer "bid_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - t.string "name" - t.text "description" - t.integer "state" - t.integer "project_id", :default => 0 - t.float "score", :default => 0.0 - t.integer "is_teacher_score", :default => 0 - end - - add_index "homework_attaches", ["bid_id"], :name => "index_homework_attaches_on_bid_id" - - create_table "homework_commons", :force => true do |t| - t.string "name" - t.integer "user_id" - t.text "description" - t.date "publish_time" - t.date "end_time" - t.integer "homework_type", :default => 1 - t.string "late_penalty" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "teacher_priority", :default => 1 - t.integer "anonymous_comment", :default => 0 - end - - add_index "homework_commons", ["course_id", "id"], :name => "index_homework_commons_on_course_id_and_id" - - create_table "homework_detail_groups", :force => true do |t| - t.integer "homework_common_id" - t.integer "min_num" - t.integer "max_num" - t.integer "base_on_project" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "homework_detail_groups", ["homework_common_id"], :name => "index_homework_detail_groups_on_homework_common_id" - - create_table "homework_detail_manuals", :force => true do |t| - t.float "ta_proportion" - t.integer "comment_status" - t.date "evaluation_start" - t.date "evaluation_end" - t.integer "evaluation_num" - t.integer "absence_penalty", :default => 1 - t.integer "homework_common_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "homework_detail_programings", :force => true do |t| - t.string "language" - t.text "standard_code", :limit => 2147483647 - t.integer "homework_common_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.float "ta_proportion", :default => 0.1 - t.integer "question_id" - end - - create_table "homework_evaluations", :force => true do |t| - t.string "user_id" - t.string "homework_attach_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "homework_for_courses", :force => true do |t| - t.integer "course_id" - t.integer "bid_id" - end - - add_index "homework_for_courses", ["bid_id"], :name => "index_homework_for_courses_on_bid_id" - add_index "homework_for_courses", ["course_id"], :name => "index_homework_for_courses_on_course_id" - - create_table "homework_tests", :force => true do |t| - t.text "input" - t.text "output" - t.integer "homework_common_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "result" - t.text "error_msg" - end - - create_table "homework_users", :force => true do |t| - t.string "homework_attach_id" - t.string "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "invite_lists", :force => true do |t| - t.integer "project_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "mail" - end - - create_table "issue_categories", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "name", :limit => 30, :default => "", :null => false - t.integer "assigned_to_id" - end - - add_index "issue_categories", ["assigned_to_id"], :name => "index_issue_categories_on_assigned_to_id" - add_index "issue_categories", ["project_id"], :name => "issue_categories_project_id" - - create_table "issue_relations", :force => true do |t| - t.integer "issue_from_id", :null => false - t.integer "issue_to_id", :null => false - t.string "relation_type", :default => "", :null => false - t.integer "delay" - end - - add_index "issue_relations", ["issue_from_id", "issue_to_id"], :name => "index_issue_relations_on_issue_from_id_and_issue_to_id", :unique => true - add_index "issue_relations", ["issue_from_id"], :name => "index_issue_relations_on_issue_from_id" - add_index "issue_relations", ["issue_to_id"], :name => "index_issue_relations_on_issue_to_id" - - create_table "issue_statuses", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.boolean "is_closed", :default => false, :null => false - t.boolean "is_default", :default => false, :null => false - t.integer "position", :default => 1 - t.integer "default_done_ratio" - end - - add_index "issue_statuses", ["is_closed"], :name => "index_issue_statuses_on_is_closed" - add_index "issue_statuses", ["is_default"], :name => "index_issue_statuses_on_is_default" - add_index "issue_statuses", ["position"], :name => "index_issue_statuses_on_position" - - create_table "issues", :force => true do |t| - t.integer "tracker_id", :null => false - t.integer "project_id", :null => false - t.string "subject", :default => "", :null => false - t.text "description" - t.date "due_date" - t.integer "category_id" - t.integer "status_id", :null => false - t.integer "assigned_to_id" - t.integer "priority_id", :null => false - t.integer "fixed_version_id" - t.integer "author_id", :null => false - t.integer "lock_version", :default => 0, :null => false - t.datetime "created_on" - t.datetime "updated_on" - t.date "start_date" - t.integer "done_ratio", :default => 0, :null => false - t.float "estimated_hours" - t.integer "parent_id" - t.integer "root_id" - t.integer "lft" - t.integer "rgt" - t.boolean "is_private", :default => false, :null => false - t.datetime "closed_on" - t.integer "project_issues_index" - end - - add_index "issues", ["assigned_to_id"], :name => "index_issues_on_assigned_to_id" - add_index "issues", ["author_id"], :name => "index_issues_on_author_id" - add_index "issues", ["category_id"], :name => "index_issues_on_category_id" - add_index "issues", ["created_on"], :name => "index_issues_on_created_on" - add_index "issues", ["fixed_version_id"], :name => "index_issues_on_fixed_version_id" - add_index "issues", ["priority_id"], :name => "index_issues_on_priority_id" - add_index "issues", ["project_id"], :name => "issues_project_id" - add_index "issues", ["root_id", "lft", "rgt"], :name => "index_issues_on_root_id_and_lft_and_rgt" - add_index "issues", ["status_id"], :name => "index_issues_on_status_id" - add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id" - - create_table "join_in_competitions", :force => true do |t| - t.integer "user_id" - t.integer "competition_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "join_in_contests", :force => true do |t| - t.integer "user_id" - t.integer "bid_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "journal_details", :force => true do |t| - t.integer "journal_id", :default => 0, :null => false - t.string "property", :limit => 30, :default => "", :null => false - t.string "prop_key", :limit => 30, :default => "", :null => false - t.text "old_value" - t.text "value" - end - - add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id" - - create_table "journal_replies", :id => false, :force => true do |t| - t.integer "journal_id" - t.integer "user_id" - t.integer "reply_id" - end - - add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id" - add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id" - add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id" - - create_table "journals", :force => true do |t| - t.integer "journalized_id", :default => 0, :null => false - t.string "journalized_type", :limit => 30, :default => "", :null => false - t.integer "user_id", :default => 0, :null => false - t.text "notes" - t.datetime "created_on", :null => false - t.boolean "private_notes", :default => false, :null => false - end - - add_index "journals", ["created_on"], :name => "index_journals_on_created_on" - add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id" - add_index "journals", ["journalized_id"], :name => "index_journals_on_journalized_id" - add_index "journals", ["user_id"], :name => "index_journals_on_user_id" - - create_table "journals_for_messages", :force => true do |t| - t.integer "jour_id" - t.string "jour_type" - t.integer "user_id" - t.text "notes" - t.integer "status" - t.integer "reply_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.string "m_parent_id" - t.boolean "is_readed" - t.integer "m_reply_count" - t.integer "m_reply_id" - t.integer "is_comprehensive_evaluation" - t.integer "private", :default => 0 - end - - create_table "kindeditor_assets", :force => true do |t| - t.string "asset" - t.integer "file_size" - t.string "file_type" - t.integer "owner_id" - t.string "asset_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "owner_type", :default => 0 - end - - create_table "member_roles", :force => true do |t| - t.integer "member_id", :null => false - t.integer "role_id", :null => false - t.integer "inherited_from" - end - - add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id" - add_index "member_roles", ["role_id"], :name => "index_member_roles_on_role_id" - - create_table "members", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.integer "project_id", :default => 0 - t.datetime "created_on" - t.boolean "mail_notification", :default => false, :null => false - t.integer "course_id", :default => -1 - t.integer "course_group_id", :default => 0 - end - - add_index "members", ["project_id"], :name => "index_members_on_project_id" - add_index "members", ["user_id", "project_id", "course_id"], :name => "index_members_on_user_id_and_project_id", :unique => true - add_index "members", ["user_id"], :name => "index_members_on_user_id" - - create_table "memo_messages", :force => true do |t| - t.integer "user_id" - t.integer "forum_id" - t.integer "memo_id" - t.string "memo_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "memos", :force => true do |t| - t.integer "forum_id", :null => false - t.integer "parent_id" - t.string "subject", :null => false - t.text "content", :null => false - t.integer "author_id", :null => false - t.integer "replies_count", :default => 0 - t.integer "last_reply_id" - t.boolean "lock", :default => false - t.boolean "sticky", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "viewed_count", :default => 0 - end - - create_table "message_alls", :force => true do |t| - t.integer "user_id" - t.integer "message_id" - t.string "message_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "messages", :force => true do |t| - t.integer "board_id", :null => false - t.integer "parent_id" - t.string "subject", :default => "", :null => false - t.text "content" - t.integer "author_id" - t.integer "replies_count", :default => 0, :null => false - t.integer "last_reply_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.boolean "locked", :default => false - t.integer "sticky", :default => 0 - t.integer "reply_id" - t.integer "quotes" - end - - add_index "messages", ["author_id"], :name => "index_messages_on_author_id" - add_index "messages", ["board_id"], :name => "messages_board_id" - add_index "messages", ["created_on"], :name => "index_messages_on_created_on" - add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id" - add_index "messages", ["parent_id"], :name => "messages_parent_id" - - create_table "news", :force => true do |t| - t.integer "project_id" - t.string "title", :limit => 60, :default => "", :null => false - t.string "summary", :default => "" - t.text "description" - t.integer "author_id", :default => 0, :null => false - t.datetime "created_on" - t.integer "comments_count", :default => 0, :null => false - t.integer "course_id" - t.integer "sticky", :default => 0 - end - - add_index "news", ["author_id"], :name => "index_news_on_author_id" - add_index "news", ["created_on"], :name => "index_news_on_created_on" - add_index "news", ["project_id"], :name => "news_project_id" - - create_table "no_uses", :force => true do |t| - t.integer "user_id", :null => false - t.string "no_use_type" - t.integer "no_use_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "notificationcomments", :force => true do |t| - t.string "notificationcommented_type" - t.integer "notificationcommented_id" - t.integer "author_id" - t.text "notificationcomments" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "onclick_times", :force => true do |t| - t.integer "user_id" - t.datetime "onclick_time" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "open_id_authentication_associations", :force => true do |t| - t.integer "issued" - t.integer "lifetime" - t.string "handle" - t.string "assoc_type" - t.binary "server_url" - t.binary "secret" - end - - create_table "open_id_authentication_nonces", :force => true do |t| - t.integer "timestamp", :null => false - t.string "server_url" - t.string "salt", :null => false - end - - create_table "open_source_projects", :force => true do |t| - t.string "name" - t.text "description" - t.integer "commit_count", :default => 0 - t.integer "code_line", :default => 0 - t.integer "users_count", :default => 0 - t.date "last_commit_time" - t.string "url" - t.date "date_collected" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "option_numbers", :force => true do |t| - t.integer "user_id" - t.integer "memo" - t.integer "messages_for_issues" - t.integer "issues_status" - t.integer "replay_for_message" - t.integer "replay_for_memo" - t.integer "follow" - t.integer "tread" - t.integer "praise_by_one" - t.integer "praise_by_two" - t.integer "praise_by_three" - t.integer "tread_by_one" - t.integer "tread_by_two" - t.integer "tread_by_three" - t.integer "changeset" - t.integer "document" - t.integer "attachment" - t.integer "issue_done_ratio" - t.integer "post_issue" - t.integer "score_type" - t.integer "total_score" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "project_id" - end - - create_table "org_activities", :force => true do |t| - t.integer "user_id" - t.integer "org_act_id" - t.string "org_act_type" - t.integer "container_id" - t.string "container_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "org_courses", :force => true do |t| - t.integer "organization_id" - t.integer "course_id" - t.datetime "created_at" - end - - create_table "org_document_comments", :force => true do |t| - t.text "title" - t.text "content" - t.integer "organization_id" - t.integer "creator_id" - t.integer "parent_id" - t.integer "reply_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.boolean "locked", :default => false - t.integer "sticky", :default => 0 - t.integer "org_subfield_id" - end - - create_table "org_member_roles", :force => true do |t| - t.integer "org_member_id" - t.integer "role_id" - end - - create_table "org_members", :force => true do |t| - t.integer "user_id" - t.integer "organization_id" - t.string "role" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "org_messages", :force => true do |t| - t.integer "user_id" - t.integer "sender_id" - t.integer "organization_id" - t.string "message_type" - t.integer "message_id" - t.integer "viewed" - t.string "content" +ActiveRecord::Schema.define(:version => 20160114022928) do + + create_table "activities", :force => true do |t| + t.integer "act_id", :null => false + t.string "act_type", :null => false + t.integer "user_id", :null => false + t.integer "activity_container_id" + t.string "activity_container_type", :default => "" + t.datetime "created_at" + end + + add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type" + add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type" + add_index "activities", ["user_id"], :name => "index_activities_on_user_id" + + create_table "activity_notifies", :force => true do |t| + t.integer "activity_container_id" + t.string "activity_container_type" + t.integer "activity_id" + t.string "activity_type" + t.integer "notify_to" + t.datetime "created_on" + t.integer "is_read" + end + + add_index "activity_notifies", ["activity_container_id", "activity_container_type"], :name => "index_an_activity_container_id" + add_index "activity_notifies", ["created_on"], :name => "index_an_created_on" + add_index "activity_notifies", ["notify_to"], :name => "index_an_notify_to" + + create_table "api_keys", :force => true do |t| + t.string "access_token" + t.datetime "expires_at" + t.integer "user_id" + t.boolean "active", :default => true + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token" + add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id" + + create_table "applied_projects", :force => true do |t| + t.integer "project_id", :null => false + t.integer "user_id", :null => false + end + + create_table "apply_project_masters", :force => true do |t| + t.integer "user_id" + t.string "apply_type" + t.integer "apply_id" + t.integer "status" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "at_messages", :force => true do |t| + t.integer "user_id" + t.integer "at_message_id" + t.string "at_message_type" + t.boolean "viewed", :default => false + t.string "container_type" + t.integer "container_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "sender_id" + end + + add_index "at_messages", ["user_id"], :name => "index_at_messages_on_user_id" + + create_table "attachment_histories", :force => true do |t| + t.integer "container_id" + t.string "container_type" + t.string "filename", :default => "" + t.string "disk_filename", :default => "" + t.integer "filesize", :default => 0 + t.string "content_type", :default => "" + t.string "digest", :limit => 40, :default => "" + t.integer "downloads", :default => 0 + t.integer "author_id" + t.datetime "created_on" + t.string "description" + t.string "disk_directory" + t.integer "attachtype" + t.integer "is_public" + t.integer "copy_from" + t.integer "quotes" + t.integer "version" + t.integer "attachment_id" + end + + create_table "attachments", :force => true do |t| + t.integer "container_id" + t.string "container_type", :limit => 30 + t.string "filename", :default => "", :null => false + t.string "disk_filename", :default => "", :null => false + t.integer "filesize", :default => 0, :null => false + t.string "content_type", :default => "" + t.string "digest", :limit => 40, :default => "", :null => false + t.integer "downloads", :default => 0, :null => false + t.integer "author_id", :default => 0, :null => false + t.datetime "created_on" + t.string "description" + t.string "disk_directory" + t.integer "attachtype", :default => 1 + t.integer "is_public", :default => 1 + t.integer "copy_from" + t.integer "quotes" + end + + add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id" + add_index "attachments", ["container_id", "container_type"], :name => "index_attachments_on_container_id_and_container_type" + add_index "attachments", ["created_on"], :name => "index_attachments_on_created_on" + + create_table "attachmentstypes", :force => true do |t| + t.integer "typeId", :null => false + t.string "typeName", :limit => 50 + end + + create_table "auth_sources", :force => true do |t| + t.string "type", :limit => 30, :default => "", :null => false + t.string "name", :limit => 60, :default => "", :null => false + t.string "host", :limit => 60 + t.integer "port" + t.string "account" + t.string "account_password", :default => "" + t.string "base_dn" + t.string "attr_login", :limit => 30 + t.string "attr_firstname", :limit => 30 + t.string "attr_lastname", :limit => 30 + t.string "attr_mail", :limit => 30 + t.boolean "onthefly_register", :default => false, :null => false + t.boolean "tls", :default => false, :null => false + t.string "filter" + t.integer "timeout" + end + + add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type" + + create_table "biding_projects", :force => true do |t| + t.integer "project_id" + t.integer "bid_id" + t.integer "user_id" + t.string "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "reward" + end + + create_table "bids", :force => true do |t| + t.string "name" + t.string "budget", :null => false + t.integer "author_id" + t.date "deadline" + t.text "description" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + t.integer "commit" + t.integer "reward_type" + t.integer "homework_type" + t.integer "parent_id" + t.string "password" + t.integer "is_evaluation" + t.integer "proportion", :default => 60 + t.integer "comment_status", :default => 0 + t.integer "evaluation_num", :default => 3 + t.integer "open_anonymous_evaluation", :default => 1 + end + + create_table "blog_comments", :force => true do |t| + t.integer "blog_id", :null => false + t.integer "parent_id" + t.string "title", :default => "", :null => false + t.text "content" + t.integer "author_id" + t.integer "comments_count", :default => 0, :null => false + t.integer "last_comment_id" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + t.boolean "locked", :default => false + t.integer "sticky", :default => 0 + t.integer "reply_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "blogs", :force => true do |t| + t.string "name", :default => "", :null => false + t.text "description" + t.integer "position", :default => 1 + t.integer "article_count", :default => 0, :null => false + t.integer "comments_count", :default => 0, :null => false + t.integer "last_comments_id" + t.integer "parent_id" + t.integer "author_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "homepage_id" + end + + create_table "boards", :force => true do |t| + t.integer "project_id", :null => false + t.string "name", :default => "", :null => false + t.string "description" + t.integer "position", :default => 1 + t.integer "topics_count", :default => 0, :null => false + t.integer "messages_count", :default => 0, :null => false + t.integer "last_message_id" + t.integer "parent_id" + t.integer "course_id" + t.integer "org_subfield_id" + end + + add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id" + add_index "boards", ["project_id"], :name => "boards_project_id" + + create_table "bug_to_osps", :force => true do |t| + t.integer "osp_id" + t.integer "relative_memo_id" + t.string "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "changes", :force => true do |t| + t.integer "changeset_id", :null => false + t.string "action", :limit => 1, :default => "", :null => false + t.text "path", :null => false + t.text "from_path" + t.string "from_revision" + t.string "revision" + t.string "branch" + end + + add_index "changes", ["changeset_id"], :name => "changesets_changeset_id" + + create_table "changeset_parents", :id => false, :force => true do |t| + t.integer "changeset_id", :null => false + t.integer "parent_id", :null => false + end + + add_index "changeset_parents", ["changeset_id"], :name => "changeset_parents_changeset_ids" + add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids" + + create_table "changesets", :force => true do |t| + t.integer "repository_id", :null => false + t.string "revision", :null => false + t.string "committer" + t.datetime "committed_on", :null => false + t.text "comments" + t.date "commit_date" + t.string "scmid" + t.integer "user_id" + end + + add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on" + add_index "changesets", ["repository_id", "revision"], :name => "changesets_repos_rev", :unique => true + add_index "changesets", ["repository_id", "scmid"], :name => "changesets_repos_scmid" + add_index "changesets", ["repository_id"], :name => "index_changesets_on_repository_id" + add_index "changesets", ["user_id"], :name => "index_changesets_on_user_id" + + create_table "changesets_issues", :id => false, :force => true do |t| + t.integer "changeset_id", :null => false + t.integer "issue_id", :null => false + end + + add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true + + create_table "code_review_assignments", :force => true do |t| + t.integer "issue_id" + t.integer "change_id" + t.integer "attachment_id" + t.string "file_path" + t.string "rev" + t.string "rev_to" + t.string "action_type" + t.integer "changeset_id" + end + + create_table "code_review_project_settings", :force => true do |t| + t.integer "project_id" + t.integer "tracker_id" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "updated_by" + t.boolean "hide_code_review_tab", :default => false + t.integer "auto_relation", :default => 1 + t.integer "assignment_tracker_id" + t.text "auto_assign" + t.integer "lock_version", :default => 0, :null => false + t.boolean "tracker_in_review_dialog", :default => false + end + + create_table "code_review_user_settings", :force => true do |t| + t.integer "user_id", :default => 0, :null => false + t.integer "mail_notification", :default => 0, :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "code_reviews", :force => true do |t| + t.integer "project_id" + t.integer "change_id" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "line" + t.integer "updated_by_id" + t.integer "lock_version", :default => 0, :null => false + t.integer "status_changed_from" + t.integer "status_changed_to" + t.integer "issue_id" + t.string "action_type" + t.string "file_path" + t.string "rev" + t.string "rev_to" + t.integer "attachment_id" + t.integer "file_count", :default => 0, :null => false + t.boolean "diff_all" + end + + create_table "comments", :force => true do |t| + t.string "commented_type", :limit => 30, :default => "", :null => false + t.integer "commented_id", :default => 0, :null => false + t.integer "author_id", :default => 0, :null => false + t.text "comments" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + end + + add_index "comments", ["author_id"], :name => "index_comments_on_author_id" + add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type" + + create_table "contest_notifications", :force => true do |t| + t.text "title" + t.text "content" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "contesting_projects", :force => true do |t| + t.integer "project_id" + t.string "contest_id" + t.integer "user_id" + t.string "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "reward" + end + + create_table "contesting_softapplications", :force => true do |t| + t.integer "softapplication_id" + t.integer "contest_id" + t.integer "user_id" + t.string "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "reward" + end + + create_table "contestnotifications", :force => true do |t| + t.integer "contest_id" + t.string "title" + t.string "summary" + t.text "description" + t.integer "author_id" + t.integer "notificationcomments_count" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "contests", :force => true do |t| + t.string "name" + t.string "budget", :default => "" + t.integer "author_id" + t.date "deadline" + t.string "description" + t.integer "commit" + t.string "password" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + end + + create_table "course_activities", :force => true do |t| + t.integer "user_id" + t.integer "course_id" + t.integer "course_act_id" + t.string "course_act_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "course_attachments", :force => true do |t| + t.string "filename" + t.string "disk_filename" + t.integer "filesize" + t.string "content_type" + t.string "digest" + t.integer "downloads" + t.string "author_id" + t.string "integer" + t.string "description" + t.string "disk_directory" + t.integer "attachtype" + t.integer "is_public" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "container_id", :default => 0 + end + + create_table "course_contributor_scores", :force => true do |t| + t.integer "course_id" + t.integer "user_id" + t.integer "message_num" + t.integer "message_reply_num" + t.integer "news_reply_num" + t.integer "resource_num" + t.integer "journal_num" + t.integer "journal_reply_num" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "total_score" + end + + create_table "course_groups", :force => true do |t| + t.string "name" + t.integer "course_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "course_infos", :force => true do |t| + t.integer "course_id" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "course_messages", :force => true do |t| + t.integer "user_id" + t.integer "course_id" + t.integer "course_message_id" + t.string "course_message_type" + t.integer "viewed" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "content" + t.integer "status" + end + + create_table "course_statuses", :force => true do |t| + t.integer "changesets_count" + t.integer "watchers_count" + t.integer "course_id" + t.float "grade", :default => 0.0 + t.integer "course_ac_para", :default => 0 + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "courses", :force => true do |t| + t.integer "tea_id" + t.string "name" + t.integer "state" + t.string "code" + t.integer "time" + t.string "extra" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "location" + t.string "term" + t.string "string" + t.string "password" + t.string "setup_time" + t.string "endup_time" + t.string "class_period" + t.integer "school_id" + t.text "description" + t.integer "status", :default => 1 + t.integer "attachmenttype", :default => 2 + t.integer "lft" + t.integer "rgt" + t.integer "is_public", :limit => 1, :default => 1 + t.integer "inherit_members", :limit => 1, :default => 1 + t.integer "open_student", :default => 0 + t.integer "outline", :default => 0 + t.integer "publish_resource", :default => 0 + t.integer "is_delete", :default => 0 + t.integer "end_time" + t.string "end_term" + end + + create_table "custom_fields", :force => true do |t| + t.string "type", :limit => 30, :default => "", :null => false + t.string "name", :limit => 30, :default => "", :null => false + t.string "field_format", :limit => 30, :default => "", :null => false + t.text "possible_values" + t.string "regexp", :default => "" + t.integer "min_length", :default => 0, :null => false + t.integer "max_length", :default => 0, :null => false + t.boolean "is_required", :default => false, :null => false + t.boolean "is_for_all", :default => false, :null => false + t.boolean "is_filter", :default => false, :null => false + t.integer "position", :default => 1 + t.boolean "searchable", :default => false + t.text "default_value" + t.boolean "editable", :default => true + t.boolean "visible", :default => true, :null => false + t.boolean "multiple", :default => false + end + + add_index "custom_fields", ["id", "type"], :name => "index_custom_fields_on_id_and_type" + + create_table "custom_fields_projects", :id => false, :force => true do |t| + t.integer "custom_field_id", :default => 0, :null => false + t.integer "project_id", :default => 0, :null => false + end + + add_index "custom_fields_projects", ["custom_field_id", "project_id"], :name => "index_custom_fields_projects_on_custom_field_id_and_project_id", :unique => true + + create_table "custom_fields_trackers", :id => false, :force => true do |t| + t.integer "custom_field_id", :default => 0, :null => false + t.integer "tracker_id", :default => 0, :null => false + end + + add_index "custom_fields_trackers", ["custom_field_id", "tracker_id"], :name => "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", :unique => true + + create_table "custom_values", :force => true do |t| + t.string "customized_type", :limit => 30, :default => "", :null => false + t.integer "customized_id", :default => 0, :null => false + t.integer "custom_field_id", :default => 0, :null => false + t.text "value" + end + + add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id" + add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized" + + create_table "delayed_jobs", :force => true do |t| + t.integer "priority", :default => 0, :null => false + t.integer "attempts", :default => 0, :null => false + t.text "handler", :null => false + t.text "last_error" + t.datetime "run_at" + t.datetime "locked_at" + t.datetime "failed_at" + t.string "locked_by" + t.string "queue" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" + + create_table "discuss_demos", :force => true do |t| + t.string "title" + t.text "body" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "documents", :force => true do |t| + t.integer "project_id", :default => 0, :null => false + t.integer "category_id", :default => 0, :null => false + t.string "title", :limit => 60, :default => "", :null => false + t.text "description" + t.datetime "created_on" + t.integer "user_id", :default => 0 + t.integer "is_public", :default => 1 + end + + add_index "documents", ["category_id"], :name => "index_documents_on_category_id" + add_index "documents", ["created_on"], :name => "index_documents_on_created_on" + add_index "documents", ["project_id"], :name => "documents_project_id" + + create_table "dts", :primary_key => "Num", :force => true do |t| + t.string "Defect", :limit => 50 + t.string "Category", :limit => 50 + t.string "File" + t.string "Method" + t.string "Module", :limit => 20 + t.string "Variable", :limit => 50 + t.integer "StartLine" + t.integer "IPLine" + t.string "IPLineCode", :limit => 200 + t.string "Judge", :limit => 15 + t.integer "Review", :limit => 1 + t.string "Description" + t.text "PreConditions", :limit => 2147483647 + t.text "TraceInfo", :limit => 2147483647 + t.text "Code", :limit => 2147483647 + t.integer "project_id" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "id", :null => false + end + + create_table "editor_of_documents", :force => true do |t| + t.integer "editor_id" + t.integer "org_document_comment_id" + t.datetime "created_at" + end + + create_table "enabled_modules", :force => true do |t| + t.integer "project_id" + t.string "name", :null => false + t.integer "course_id" + end + + add_index "enabled_modules", ["project_id"], :name => "enabled_modules_project_id" + + create_table "enumerations", :force => true do |t| + t.string "name", :limit => 30, :default => "", :null => false + t.integer "position", :default => 1 + t.boolean "is_default", :default => false, :null => false + t.string "type" + t.boolean "active", :default => true, :null => false + t.integer "project_id" + t.integer "parent_id" + t.string "position_name", :limit => 30 + end + + add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type" + add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id" + + create_table "exercise_answers", :force => true do |t| + t.integer "user_id" + t.integer "exercise_question_id" + t.integer "exercise_choice_id" + t.text "answer_text" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "exercise_choices", :force => true do |t| + t.integer "exercise_question_id" + t.text "choice_text" + t.integer "choice_position" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "exercise_questions", :force => true do |t| + t.text "question_title" + t.integer "question_type" + t.integer "question_number" + t.integer "exercise_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "question_score" + end + + create_table "exercise_standard_answers", :force => true do |t| + t.integer "exercise_question_id" + t.integer "exercise_choice_id" + t.text "answer_text" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "exercise_users", :force => true do |t| + t.integer "user_id" + t.integer "exercise_id" + t.integer "score" + t.datetime "start_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.datetime "end_at" + t.integer "status" + end + + create_table "exercises", :force => true do |t| + t.text "exercise_name" + t.text "exercise_description" + t.integer "course_id" + t.integer "exercise_status" + t.integer "user_id" + t.integer "time" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.datetime "publish_time" + t.datetime "end_time" + t.integer "show_result" + end + + create_table "first_pages", :force => true do |t| + t.string "web_title" + t.string "title" + t.text "description" + t.string "page_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "sort_type" + t.integer "image_width", :default => 107 + t.integer "image_height", :default => 63 + t.integer "show_course", :default => 1 + t.integer "show_contest", :default => 1 + end + + create_table "forge_activities", :force => true do |t| + t.integer "user_id" + t.integer "project_id" + t.integer "forge_act_id" + t.string "forge_act_type" + t.integer "org_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "forge_activities", ["forge_act_id"], :name => "index_forge_activities_on_forge_act_id" + + create_table "forge_messages", :force => true do |t| + t.integer "user_id" + t.integer "project_id" + t.integer "forge_message_id" + t.string "forge_message_type" + t.integer "viewed" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "secret_key" + t.integer "status" + end + + create_table "forums", :force => true do |t| + t.string "name", :null => false + t.text "description" + t.integer "topic_count", :default => 0 + t.integer "memo_count", :default => 0 + t.integer "last_memo_id", :default => 0 + t.integer "creator_id", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "sticky" + t.integer "locked" + end + + create_table "groups_users", :id => false, :force => true do |t| + t.integer "group_id", :null => false + t.integer "user_id", :null => false + end + + add_index "groups_users", ["group_id", "user_id"], :name => "groups_users_ids", :unique => true + + create_table "homework_attaches", :force => true do |t| + t.integer "bid_id" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "reward" + t.string "name" + t.text "description" + t.integer "state" + t.integer "project_id", :default => 0 + t.float "score", :default => 0.0 + t.integer "is_teacher_score", :default => 0 + end + + add_index "homework_attaches", ["bid_id"], :name => "index_homework_attaches_on_bid_id" + + create_table "homework_commons", :force => true do |t| + t.string "name" + t.integer "user_id" + t.text "description" + t.date "publish_time" + t.date "end_time" + t.integer "homework_type", :default => 1 + t.string "late_penalty" + t.integer "course_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "teacher_priority", :default => 1 + t.integer "anonymous_comment", :default => 0 + end + + add_index "homework_commons", ["course_id", "id"], :name => "index_homework_commons_on_course_id_and_id" + + create_table "homework_detail_groups", :force => true do |t| + t.integer "homework_common_id" + t.integer "min_num" + t.integer "max_num" + t.integer "base_on_project" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "homework_detail_groups", ["homework_common_id"], :name => "index_homework_detail_groups_on_homework_common_id" + + create_table "homework_detail_manuals", :force => true do |t| + t.float "ta_proportion" + t.integer "comment_status" + t.date "evaluation_start" + t.date "evaluation_end" + t.integer "evaluation_num" + t.integer "absence_penalty", :default => 1 + t.integer "homework_common_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "homework_detail_programings", :force => true do |t| + t.string "language" + t.text "standard_code", :limit => 2147483647 + t.integer "homework_common_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.float "ta_proportion", :default => 0.1 + t.integer "question_id" + end + + create_table "homework_evaluations", :force => true do |t| + t.string "user_id" + t.string "homework_attach_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "homework_for_courses", :force => true do |t| + t.integer "course_id" + t.integer "bid_id" + end + + add_index "homework_for_courses", ["bid_id"], :name => "index_homework_for_courses_on_bid_id" + add_index "homework_for_courses", ["course_id"], :name => "index_homework_for_courses_on_course_id" + + create_table "homework_tests", :force => true do |t| + t.text "input" + t.text "output" + t.integer "homework_common_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "result" + t.text "error_msg" + end + + create_table "homework_users", :force => true do |t| + t.string "homework_attach_id" + t.string "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "invite_lists", :force => true do |t| + t.integer "project_id" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "mail" + end + + create_table "issue_categories", :force => true do |t| + t.integer "project_id", :default => 0, :null => false + t.string "name", :limit => 30, :default => "", :null => false + t.integer "assigned_to_id" + end + + add_index "issue_categories", ["assigned_to_id"], :name => "index_issue_categories_on_assigned_to_id" + add_index "issue_categories", ["project_id"], :name => "issue_categories_project_id" + + create_table "issue_relations", :force => true do |t| + t.integer "issue_from_id", :null => false + t.integer "issue_to_id", :null => false + t.string "relation_type", :default => "", :null => false + t.integer "delay" + end + + add_index "issue_relations", ["issue_from_id", "issue_to_id"], :name => "index_issue_relations_on_issue_from_id_and_issue_to_id", :unique => true + add_index "issue_relations", ["issue_from_id"], :name => "index_issue_relations_on_issue_from_id" + add_index "issue_relations", ["issue_to_id"], :name => "index_issue_relations_on_issue_to_id" + + create_table "issue_statuses", :force => true do |t| + t.string "name", :limit => 30, :default => "", :null => false + t.boolean "is_closed", :default => false, :null => false + t.boolean "is_default", :default => false, :null => false + t.integer "position", :default => 1 + t.integer "default_done_ratio" + end + + add_index "issue_statuses", ["is_closed"], :name => "index_issue_statuses_on_is_closed" + add_index "issue_statuses", ["is_default"], :name => "index_issue_statuses_on_is_default" + add_index "issue_statuses", ["position"], :name => "index_issue_statuses_on_position" + + create_table "issues", :force => true do |t| + t.integer "tracker_id", :null => false + t.integer "project_id", :null => false + t.string "subject", :default => "", :null => false + t.text "description" + t.date "due_date" + t.integer "category_id" + t.integer "status_id", :null => false + t.integer "assigned_to_id" + t.integer "priority_id", :null => false + t.integer "fixed_version_id" + t.integer "author_id", :null => false + t.integer "lock_version", :default => 0, :null => false + t.datetime "created_on" + t.datetime "updated_on" + t.date "start_date" + t.integer "done_ratio", :default => 0, :null => false + t.float "estimated_hours" + t.integer "parent_id" + t.integer "root_id" + t.integer "lft" + t.integer "rgt" + t.boolean "is_private", :default => false, :null => false + t.datetime "closed_on" + t.integer "project_issues_index" + end + + add_index "issues", ["assigned_to_id"], :name => "index_issues_on_assigned_to_id" + add_index "issues", ["author_id"], :name => "index_issues_on_author_id" + add_index "issues", ["category_id"], :name => "index_issues_on_category_id" + add_index "issues", ["created_on"], :name => "index_issues_on_created_on" + add_index "issues", ["fixed_version_id"], :name => "index_issues_on_fixed_version_id" + add_index "issues", ["priority_id"], :name => "index_issues_on_priority_id" + add_index "issues", ["project_id"], :name => "issues_project_id" + add_index "issues", ["root_id", "lft", "rgt"], :name => "index_issues_on_root_id_and_lft_and_rgt" + add_index "issues", ["status_id"], :name => "index_issues_on_status_id" + add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id" + + create_table "join_in_competitions", :force => true do |t| + t.integer "user_id" + t.integer "competition_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "join_in_contests", :force => true do |t| + t.integer "user_id" + t.integer "bid_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "journal_details", :force => true do |t| + t.integer "journal_id", :default => 0, :null => false + t.string "property", :limit => 30, :default => "", :null => false + t.string "prop_key", :limit => 30, :default => "", :null => false + t.text "old_value" + t.text "value" + end + + add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id" + + create_table "journal_replies", :id => false, :force => true do |t| + t.integer "journal_id" + t.integer "user_id" + t.integer "reply_id" + end + + add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id" + add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id" + add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id" + + create_table "journals", :force => true do |t| + t.integer "journalized_id", :default => 0, :null => false + t.string "journalized_type", :limit => 30, :default => "", :null => false + t.integer "user_id", :default => 0, :null => false + t.text "notes" + t.datetime "created_on", :null => false + t.boolean "private_notes", :default => false, :null => false + end + + add_index "journals", ["created_on"], :name => "index_journals_on_created_on" + add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id" + add_index "journals", ["journalized_id"], :name => "index_journals_on_journalized_id" + add_index "journals", ["user_id"], :name => "index_journals_on_user_id" + + create_table "journals_for_messages", :force => true do |t| + t.integer "jour_id" + t.string "jour_type" + t.integer "user_id" + t.text "notes" + t.integer "status" + t.integer "reply_id" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + t.string "m_parent_id" + t.boolean "is_readed" + t.integer "m_reply_count" + t.integer "m_reply_id" + t.integer "is_comprehensive_evaluation" + t.integer "private", :default => 0 + end + + create_table "kindeditor_assets", :force => true do |t| + t.string "asset" + t.integer "file_size" + t.string "file_type" + t.integer "owner_id" + t.string "asset_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "owner_type", :default => 0 + end + + create_table "member_roles", :force => true do |t| + t.integer "member_id", :null => false + t.integer "role_id", :null => false + t.integer "inherited_from" + end + + add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id" + add_index "member_roles", ["role_id"], :name => "index_member_roles_on_role_id" + + create_table "members", :force => true do |t| + t.integer "user_id", :default => 0, :null => false + t.integer "project_id", :default => 0 + t.datetime "created_on" + t.boolean "mail_notification", :default => false, :null => false + t.integer "course_id", :default => -1 + t.integer "course_group_id", :default => 0 + end + + add_index "members", ["project_id"], :name => "index_members_on_project_id" + add_index "members", ["user_id", "project_id", "course_id"], :name => "index_members_on_user_id_and_project_id", :unique => true + add_index "members", ["user_id"], :name => "index_members_on_user_id" + + create_table "memo_messages", :force => true do |t| + t.integer "user_id" + t.integer "forum_id" + t.integer "memo_id" + t.string "memo_type" + t.integer "viewed" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "memos", :force => true do |t| + t.integer "forum_id", :null => false + t.integer "parent_id" + t.string "subject", :null => false + t.text "content", :null => false + t.integer "author_id", :null => false + t.integer "replies_count", :default => 0 + t.integer "last_reply_id" + t.boolean "lock", :default => false + t.boolean "sticky", :default => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "viewed_count", :default => 0 + end + + create_table "message_alls", :force => true do |t| + t.integer "user_id" + t.integer "message_id" + t.string "message_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "messages", :force => true do |t| + t.integer "board_id", :null => false + t.integer "parent_id" + t.string "subject", :default => "", :null => false + t.text "content" + t.integer "author_id" + t.integer "replies_count", :default => 0, :null => false + t.integer "last_reply_id" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + t.boolean "locked", :default => false + t.integer "sticky", :default => 0 + t.integer "reply_id" + t.integer "quotes" + end + + add_index "messages", ["author_id"], :name => "index_messages_on_author_id" + add_index "messages", ["board_id"], :name => "messages_board_id" + add_index "messages", ["created_on"], :name => "index_messages_on_created_on" + add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id" + add_index "messages", ["parent_id"], :name => "messages_parent_id" + + create_table "news", :force => true do |t| + t.integer "project_id" + t.string "title", :limit => 60, :default => "", :null => false + t.string "summary", :default => "" + t.text "description" + t.integer "author_id", :default => 0, :null => false + t.datetime "created_on" + t.integer "comments_count", :default => 0, :null => false + t.integer "course_id" + t.integer "sticky", :default => 0 + end + + add_index "news", ["author_id"], :name => "index_news_on_author_id" + add_index "news", ["created_on"], :name => "index_news_on_created_on" + add_index "news", ["project_id"], :name => "news_project_id" + + create_table "no_uses", :force => true do |t| + t.integer "user_id", :null => false + t.string "no_use_type" + t.integer "no_use_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "notificationcomments", :force => true do |t| + t.string "notificationcommented_type" + t.integer "notificationcommented_id" + t.integer "author_id" + t.text "notificationcomments" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "onclick_times", :force => true do |t| + t.integer "user_id" + t.datetime "onclick_time" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "open_id_authentication_associations", :force => true do |t| + t.integer "issued" + t.integer "lifetime" + t.string "handle" + t.string "assoc_type" + t.binary "server_url" + t.binary "secret" + end + + create_table "open_id_authentication_nonces", :force => true do |t| + t.integer "timestamp", :null => false + t.string "server_url" + t.string "salt", :null => false + end + + create_table "open_source_projects", :force => true do |t| + t.string "name" + t.text "description" + t.integer "commit_count", :default => 0 + t.integer "code_line", :default => 0 + t.integer "users_count", :default => 0 + t.date "last_commit_time" + t.string "url" + t.date "date_collected" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "option_numbers", :force => true do |t| + t.integer "user_id" + t.integer "memo" + t.integer "messages_for_issues" + t.integer "issues_status" + t.integer "replay_for_message" + t.integer "replay_for_memo" + t.integer "follow" + t.integer "tread" + t.integer "praise_by_one" + t.integer "praise_by_two" + t.integer "praise_by_three" + t.integer "tread_by_one" + t.integer "tread_by_two" + t.integer "tread_by_three" + t.integer "changeset" + t.integer "document" + t.integer "attachment" + t.integer "issue_done_ratio" + t.integer "post_issue" + t.integer "score_type" + t.integer "total_score" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "project_id" + end + + create_table "org_activities", :force => true do |t| + t.integer "user_id" + t.integer "org_act_id" + t.string "org_act_type" + t.integer "container_id" + t.string "container_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "org_courses", :force => true do |t| + t.integer "organization_id" + t.integer "course_id" + t.datetime "created_at" + end + + create_table "org_document_comments", :force => true do |t| + t.text "title" + t.text "content" + t.integer "organization_id" + t.integer "creator_id" + t.integer "parent_id" + t.integer "reply_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.boolean "locked", :default => false + t.integer "sticky", :default => 0 + t.integer "org_subfield_id" + end + + create_table "org_member_roles", :force => true do |t| + t.integer "org_member_id" + t.integer "role_id" + end + + create_table "org_members", :force => true do |t| + t.integer "user_id" + t.integer "organization_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "org_messages", :force => true do |t| + t.integer "user_id" + t.integer "sender_id" + t.integer "organization_id" + t.string "message_type" + t.integer "message_id" + t.integer "viewed" + t.string "content" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.integer "status", :default => 0 - end - - create_table "org_projects", :force => true do |t| - t.integer "organization_id" - t.integer "project_id" - t.datetime "created_at" - end - - create_table "org_subfield_messages", :force => true do |t| - t.integer "org_subfield_id" - t.integer "message_id" - t.string "message_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "org_subfields", :force => true do |t| - t.integer "organization_id" - t.integer "priority" - t.string "name" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "field_type" - t.integer "hide", :default => 0 - end - - create_table "organizations", :force => true do |t| - t.string "name" - t.text "description" - t.integer "creator_id" - t.integer "home_id" - t.string "domain" - t.boolean "is_public" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "phone_app_versions", :force => true do |t| - t.string "version" - t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_answers", :force => true do |t| - t.integer "poll_question_id" - t.text "answer_text" - t.integer "answer_position" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_questions", :force => true do |t| - t.string "question_title" - t.integer "question_type" - t.integer "is_necessary" - t.integer "poll_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "question_number" - end - - create_table "poll_users", :force => true do |t| - t.integer "user_id" - t.integer "poll_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_votes", :force => true do |t| - t.integer "user_id" - t.integer "poll_question_id" - t.integer "poll_answer_id" - t.text "vote_text" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "polls", :force => true do |t| - t.string "polls_name" - t.string "polls_type" - t.integer "polls_group_id" - t.integer "polls_status" - t.integer "user_id" - t.datetime "published_at" - t.datetime "closed_at" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.text "polls_description" - t.integer "show_result", :default => 1 - end - - create_table "praise_tread_caches", :force => true do |t| - t.integer "object_id", :null => false - t.string "object_type" - t.integer "praise_num" - t.integer "tread_num" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "praise_treads", :force => true do |t| - t.integer "user_id", :null => false - t.integer "praise_tread_object_id" - t.string "praise_tread_object_type" - t.integer "praise_or_tread" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "principal_activities", :force => true do |t| - t.integer "user_id" - t.integer "principal_id" - t.integer "principal_act_id" - t.string "principal_act_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "project_infos", :force => true do |t| - t.integer "project_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "project_scores", :force => true do |t| - t.string "project_id" - t.integer "score" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "issue_num", :default => 0 - t.integer "issue_journal_num", :default => 0 - t.integer "news_num", :default => 0 - t.integer "documents_num", :default => 0 - t.integer "changeset_num", :default => 0 - t.integer "board_message_num", :default => 0 + end + + create_table "org_projects", :force => true do |t| + t.integer "organization_id" + t.integer "project_id" + t.datetime "created_at" + end + + create_table "org_subfield_messages", :force => true do |t| + t.integer "org_subfield_id" + t.integer "message_id" + t.string "message_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "org_subfields", :force => true do |t| + t.integer "organization_id" + t.integer "priority" + t.string "name" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "field_type" + t.integer "hide", :default => 0 + end + + create_table "organizations", :force => true do |t| + t.string "name" + t.text "description" + t.integer "creator_id" + t.integer "home_id" + t.string "domain" + t.boolean "is_public" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "phone_app_versions", :force => true do |t| + t.string "version" + t.text "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "poll_answers", :force => true do |t| + t.integer "poll_question_id" + t.text "answer_text" + t.integer "answer_position" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "poll_questions", :force => true do |t| + t.string "question_title" + t.integer "question_type" + t.integer "is_necessary" + t.integer "poll_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "question_number" + end + + create_table "poll_users", :force => true do |t| + t.integer "user_id" + t.integer "poll_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "poll_votes", :force => true do |t| + t.integer "user_id" + t.integer "poll_question_id" + t.integer "poll_answer_id" + t.text "vote_text" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "polls", :force => true do |t| + t.string "polls_name" + t.string "polls_type" + t.integer "polls_group_id" + t.integer "polls_status" + t.integer "user_id" + t.datetime "published_at" + t.datetime "closed_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.text "polls_description" + t.integer "show_result", :default => 1 + end + + create_table "praise_tread_caches", :force => true do |t| + t.integer "object_id", :null => false + t.string "object_type" + t.integer "praise_num" + t.integer "tread_num" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "praise_treads", :force => true do |t| + t.integer "user_id", :null => false + t.integer "praise_tread_object_id" + t.string "praise_tread_object_type" + t.integer "praise_or_tread" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "principal_activities", :force => true do |t| + t.integer "user_id" + t.integer "principal_id" + t.integer "principal_act_id" + t.string "principal_act_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "project_infos", :force => true do |t| + t.integer "project_id" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "project_scores", :force => true do |t| + t.string "project_id" + t.integer "score" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "issue_num", :default => 0 + t.integer "issue_journal_num", :default => 0 + t.integer "news_num", :default => 0 + t.integer "documents_num", :default => 0 + t.integer "changeset_num", :default => 0 + t.integer "board_message_num", :default => 0 t.integer "board_num", :default => 0 t.integer "attach_num", :default => 0 - end - - create_table "project_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "project_id" - t.integer "project_type" - t.float "grade", :default => 0.0 - t.integer "course_ac_para", :default => 0 - end - - add_index "project_statuses", ["grade"], :name => "index_project_statuses_on_grade" - - create_table "projecting_softapplictions", :force => true do |t| - t.integer "user_id" - t.integer "softapplication_id" - t.integer "project_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "projects", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "description" - t.string "homepage", :default => "" - t.boolean "is_public", :default => true, :null => false - t.integer "parent_id" - t.datetime "created_on" - t.datetime "updated_on" - t.string "identifier" - t.integer "status", :default => 1, :null => false - t.integer "lft" - t.integer "rgt" - t.boolean "inherit_members", :default => false, :null => false - t.integer "project_type" - t.boolean "hidden_repo", :default => false, :null => false - t.integer "attachmenttype", :default => 1 - t.integer "user_id" - t.integer "dts_test", :default => 0 - t.string "enterprise_name" - t.integer "organization_id" - t.integer "project_new_type" - t.integer "gpid" - t.integer "forked_from_project_id" - t.integer "forked_count" - t.integer "commits_count", :default => 0 - t.integer "publish_resource", :default => 0 - end - - add_index "projects", ["lft"], :name => "index_projects_on_lft" - add_index "projects", ["rgt"], :name => "index_projects_on_rgt" - - create_table "projects_trackers", :id => false, :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.integer "tracker_id", :default => 0, :null => false - end - - add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true - add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id" - - create_table "queries", :force => true do |t| - t.integer "project_id" - t.string "name", :default => "", :null => false - t.text "filters" - t.integer "user_id", :default => 0, :null => false - t.boolean "is_public", :default => false, :null => false - t.text "column_names" - t.text "sort_criteria" - t.string "group_by" - t.string "type" - end - - add_index "queries", ["project_id"], :name => "index_queries_on_project_id" - add_index "queries", ["user_id"], :name => "index_queries_on_user_id" - - create_table "relative_memo_to_open_source_projects", :force => true do |t| - t.integer "osp_id" - t.integer "relative_memo_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "relative_memos", :force => true do |t| - t.integer "osp_id" - t.integer "parent_id" - t.string "subject", :null => false - t.text "content", :limit => 16777215, :null => false - t.integer "author_id" - t.integer "replies_count", :default => 0 - t.integer "last_reply_id" - t.boolean "lock", :default => false - t.boolean "sticky", :default => false - t.boolean "is_quote", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "viewed_count_crawl", :default => 0 - t.integer "viewed_count_local", :default => 0 - t.string "url" - t.string "username" - t.string "userhomeurl" - t.date "date_collected" - t.string "topic_resource" - end - - create_table "repositories", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "url", :default => "", :null => false - t.string "login", :limit => 60, :default => "" - t.string "password", :default => "" - t.string "root_url", :default => "" - t.string "type" - t.string "path_encoding", :limit => 64 - t.string "log_encoding", :limit => 64 - t.text "extra_info" - t.string "identifier" - t.boolean "is_default", :default => false - t.boolean "hidden", :default => false - end - - add_index "repositories", ["project_id"], :name => "index_repositories_on_project_id" - - create_table "rich_rich_files", :force => true do |t| - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "rich_file_file_name" - t.string "rich_file_content_type" - t.integer "rich_file_file_size" - t.datetime "rich_file_updated_at" - t.string "owner_type" - t.integer "owner_id" - t.text "uri_cache" - t.string "simplified_type", :default => "file" - end - - create_table "roles", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.integer "position", :default => 1 - t.boolean "assignable", :default => true - t.integer "builtin", :default => 0, :null => false - t.text "permissions" - t.string "issues_visibility", :limit => 30, :default => "default", :null => false - end - - create_table "schools", :force => true do |t| - t.string "name" - t.string "province" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "logo_link" - t.string "pinyin" - end - - create_table "seems_rateable_cached_ratings", :force => true do |t| - t.integer "cacheable_id", :limit => 8 - t.string "cacheable_type" - t.float "avg", :null => false - t.integer "cnt", :null => false - t.string "dimension" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "seems_rateable_rates", :force => true do |t| - t.integer "rater_id", :limit => 8 - t.integer "rateable_id" - t.string "rateable_type" - t.float "stars", :null => false - t.string "dimension" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "is_teacher_score", :default => 0 - end - - create_table "settings", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "value" - t.datetime "updated_on" - end - - add_index "settings", ["name"], :name => "index_settings_on_name" - - create_table "shares", :force => true do |t| - t.date "created_on" - t.string "url" - t.string "title" - t.integer "share_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "project_id" - t.integer "user_id" - t.string "description" - end - - create_table "shield_activities", :force => true do |t| - t.string "container_type" - t.integer "container_id" - t.string "shield_type" - t.integer "shield_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "softapplications", :force => true do |t| - t.string "name" - t.text "description" - t.integer "app_type_id" - t.string "app_type_name" - t.string "android_min_version_available" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "contest_id" - t.integer "softapplication_id" - t.integer "is_public" - t.string "application_developers" - t.string "deposit_project_url" - t.string "deposit_project" - t.integer "project_id" - end - - create_table "student_work_projects", :force => true do |t| - t.integer "homework_common_id" - t.integer "student_work_id" - t.integer "project_id" - t.integer "user_id" - t.integer "is_leader" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "student_work_projects", ["homework_common_id"], :name => "index_student_work_projects_on_homework_common_id" - add_index "student_work_projects", ["project_id"], :name => "index_student_work_projects_on_project_id" - add_index "student_work_projects", ["student_work_id"], :name => "index_student_work_projects_on_student_work_id" - add_index "student_work_projects", ["user_id"], :name => "index_student_work_projects_on_user_id" - - create_table "student_work_tests", :force => true do |t| - t.integer "student_work_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "status", :default => 9 - t.text "results" - t.text "src" - end - - create_table "student_works", :force => true do |t| - t.string "name" - t.text "description", :limit => 2147483647 - t.integer "homework_common_id" - t.integer "user_id" - t.float "final_score" - t.float "teacher_score" - t.float "student_score" - t.float "teaching_asistant_score" - t.integer "project_id", :default => 0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "late_penalty", :default => 0 - t.integer "absence_penalty", :default => 0 - t.float "system_score", :default => 0.0 - t.boolean "is_test", :default => false - end - - add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id" - - create_table "student_works_evaluation_distributions", :force => true do |t| - t.integer "student_work_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "student_works_scores", :force => true do |t| - t.integer "student_work_id" - t.integer "user_id" - t.integer "score" - t.text "comment" - t.integer "reviewer_role" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "students_for_courses", :force => true do |t| - t.integer "student_id" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "students_for_courses", ["course_id"], :name => "index_students_for_courses_on_course_id" - add_index "students_for_courses", ["student_id"], :name => "index_students_for_courses_on_student_id" - + end + + create_table "project_statuses", :force => true do |t| + t.integer "changesets_count" + t.integer "watchers_count" + t.integer "project_id" + t.integer "project_type" + t.float "grade", :default => 0.0 + t.integer "course_ac_para", :default => 0 + end + + add_index "project_statuses", ["grade"], :name => "index_project_statuses_on_grade" + + create_table "projecting_softapplictions", :force => true do |t| + t.integer "user_id" + t.integer "softapplication_id" + t.integer "project_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "projects", :force => true do |t| + t.string "name", :default => "", :null => false + t.text "description" + t.string "homepage", :default => "" + t.boolean "is_public", :default => true, :null => false + t.integer "parent_id" + t.datetime "created_on" + t.datetime "updated_on" + t.string "identifier" + t.integer "status", :default => 1, :null => false + t.integer "lft" + t.integer "rgt" + t.boolean "inherit_members", :default => false, :null => false + t.integer "project_type" + t.boolean "hidden_repo", :default => false, :null => false + t.integer "attachmenttype", :default => 1 + t.integer "user_id" + t.integer "dts_test", :default => 0 + t.string "enterprise_name" + t.integer "organization_id" + t.integer "project_new_type" + t.integer "gpid" + t.integer "forked_from_project_id" + t.integer "forked_count" + t.integer "commits_count", :default => 0 + t.integer "publish_resource", :default => 0 + t.integer "issues_count", :default => 0 + t.integer "attachments_count", :default => 0 + t.integer "boards_count", :default => 0 + t.integer "news_count", :default => 0 + t.integer "acts_count", :default => 0 + t.integer "journals_count", :default => 0 + t.integer "boards_reply_count", :default => 0 + end + + add_index "projects", ["lft"], :name => "index_projects_on_lft" + add_index "projects", ["rgt"], :name => "index_projects_on_rgt" + + create_table "projects_trackers", :id => false, :force => true do |t| + t.integer "project_id", :default => 0, :null => false + t.integer "tracker_id", :default => 0, :null => false + end + + add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true + add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id" + + create_table "queries", :force => true do |t| + t.integer "project_id" + t.string "name", :default => "", :null => false + t.text "filters" + t.integer "user_id", :default => 0, :null => false + t.boolean "is_public", :default => false, :null => false + t.text "column_names" + t.text "sort_criteria" + t.string "group_by" + t.string "type" + end + + add_index "queries", ["project_id"], :name => "index_queries_on_project_id" + add_index "queries", ["user_id"], :name => "index_queries_on_user_id" + + create_table "relative_memo_to_open_source_projects", :force => true do |t| + t.integer "osp_id" + t.integer "relative_memo_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "relative_memos", :force => true do |t| + t.integer "osp_id" + t.integer "parent_id" + t.string "subject", :null => false + t.text "content", :limit => 16777215, :null => false + t.integer "author_id" + t.integer "replies_count", :default => 0 + t.integer "last_reply_id" + t.boolean "lock", :default => false + t.boolean "sticky", :default => false + t.boolean "is_quote", :default => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "viewed_count_crawl", :default => 0 + t.integer "viewed_count_local", :default => 0 + t.string "url" + t.string "username" + t.string "userhomeurl" + t.date "date_collected" + t.string "topic_resource" + end + + create_table "repositories", :force => true do |t| + t.integer "project_id", :default => 0, :null => false + t.string "url", :default => "", :null => false + t.string "login", :limit => 60, :default => "" + t.string "password", :default => "" + t.string "root_url", :default => "" + t.string "type" + t.string "path_encoding", :limit => 64 + t.string "log_encoding", :limit => 64 + t.text "extra_info" + t.string "identifier" + t.boolean "is_default", :default => false + t.boolean "hidden", :default => false + end + + add_index "repositories", ["project_id"], :name => "index_repositories_on_project_id" + + create_table "rich_rich_files", :force => true do |t| + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "rich_file_file_name" + t.string "rich_file_content_type" + t.integer "rich_file_file_size" + t.datetime "rich_file_updated_at" + t.string "owner_type" + t.integer "owner_id" + t.text "uri_cache" + t.string "simplified_type", :default => "file" + end + + create_table "roles", :force => true do |t| + t.string "name", :limit => 30, :default => "", :null => false + t.integer "position", :default => 1 + t.boolean "assignable", :default => true + t.integer "builtin", :default => 0, :null => false + t.text "permissions" + t.string "issues_visibility", :limit => 30, :default => "default", :null => false + end + + create_table "schools", :force => true do |t| + t.string "name" + t.string "province" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "logo_link" + t.string "pinyin" + end + + create_table "seems_rateable_cached_ratings", :force => true do |t| + t.integer "cacheable_id", :limit => 8 + t.string "cacheable_type" + t.float "avg", :null => false + t.integer "cnt", :null => false + t.string "dimension" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "seems_rateable_rates", :force => true do |t| + t.integer "rater_id", :limit => 8 + t.integer "rateable_id" + t.string "rateable_type" + t.float "stars", :null => false + t.string "dimension" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "is_teacher_score", :default => 0 + end + + create_table "settings", :force => true do |t| + t.string "name", :default => "", :null => false + t.text "value" + t.datetime "updated_on" + end + + add_index "settings", ["name"], :name => "index_settings_on_name" + + create_table "shares", :force => true do |t| + t.date "created_on" + t.string "url" + t.string "title" + t.integer "share_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "project_id" + t.integer "user_id" + t.string "description" + end + + create_table "shield_activities", :force => true do |t| + t.string "container_type" + t.integer "container_id" + t.string "shield_type" + t.integer "shield_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "softapplications", :force => true do |t| + t.string "name" + t.text "description" + t.integer "app_type_id" + t.string "app_type_name" + t.string "android_min_version_available" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "contest_id" + t.integer "softapplication_id" + t.integer "is_public" + t.string "application_developers" + t.string "deposit_project_url" + t.string "deposit_project" + t.integer "project_id" + end + + create_table "student_work_projects", :force => true do |t| + t.integer "homework_common_id" + t.integer "student_work_id" + t.integer "project_id" + t.integer "user_id" + t.integer "is_leader" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "student_work_projects", ["homework_common_id"], :name => "index_student_work_projects_on_homework_common_id" + add_index "student_work_projects", ["project_id"], :name => "index_student_work_projects_on_project_id" + add_index "student_work_projects", ["student_work_id"], :name => "index_student_work_projects_on_student_work_id" + add_index "student_work_projects", ["user_id"], :name => "index_student_work_projects_on_user_id" + + create_table "student_work_tests", :force => true do |t| + t.integer "student_work_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "status", :default => 9 + t.text "results" + t.text "src" + end + + create_table "student_works", :force => true do |t| + t.string "name" + t.text "description", :limit => 2147483647 + t.integer "homework_common_id" + t.integer "user_id" + t.float "final_score" + t.float "teacher_score" + t.float "student_score" + t.float "teaching_asistant_score" + t.integer "project_id", :default => 0 + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "late_penalty", :default => 0 + t.integer "absence_penalty", :default => 0 + t.float "system_score", :default => 0.0 + t.boolean "is_test", :default => false + end + + add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id" + + create_table "student_works_evaluation_distributions", :force => true do |t| + t.integer "student_work_id" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "student_works_scores", :force => true do |t| + t.integer "student_work_id" + t.integer "user_id" + t.integer "score" + t.text "comment" + t.integer "reviewer_role" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "students_for_courses", :force => true do |t| + t.integer "student_id" + t.integer "course_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "students_for_courses", ["course_id"], :name => "index_students_for_courses_on_course_id" + add_index "students_for_courses", ["student_id"], :name => "index_students_for_courses_on_student_id" + create_table "subfield_subdomain_dirs", :force => true do |t| t.integer "org_subfield_id" t.string "name" @@ -3681,356 +1672,351 @@ ActiveRecord::Schema.define(:version => 20160112085834) do t.datetime "updated_at", :null => false end - create_table "system_messages", :force => true do |t| - t.integer "user_id" - t.string "content" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.text "description" - t.string "subject" - end - - create_table "taggings", :force => true do |t| - t.integer "tag_id" - t.integer "taggable_id" - t.string "taggable_type" - t.integer "tagger_id" - t.string "tagger_type" - t.string "context", :limit => 128 - t.datetime "created_at" - end - - add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id" - add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context" - add_index "taggings", ["taggable_type"], :name => "index_taggings_on_taggable_type" - - create_table "tags", :force => true do |t| - t.string "name" - end - - create_table "teachers", :force => true do |t| - t.string "tea_name" - t.string "location" - t.integer "couurse_time" - t.integer "course_code" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "extra" - end - - create_table "temp", :id => false, :force => true do |t| - t.integer "id", :default => 0, :null => false - end - - create_table "time_entries", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false - t.integer "issue_id" - t.float "hours", :null => false - t.string "comments" - t.integer "activity_id", :null => false - t.date "spent_on", :null => false - t.integer "tyear", :null => false - t.integer "tmonth", :null => false - t.integer "tweek", :null => false - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - add_index "time_entries", ["activity_id"], :name => "index_time_entries_on_activity_id" - add_index "time_entries", ["created_on"], :name => "index_time_entries_on_created_on" - add_index "time_entries", ["issue_id"], :name => "time_entries_issue_id" - add_index "time_entries", ["project_id"], :name => "time_entries_project_id" - add_index "time_entries", ["user_id"], :name => "index_time_entries_on_user_id" - - create_table "tokens", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.string "action", :limit => 30, :default => "", :null => false - t.string "value", :limit => 40, :default => "", :null => false - t.datetime "created_on", :null => false - end - - add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id" - add_index "tokens", ["value"], :name => "tokens_value", :unique => true - - create_table "trackers", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.boolean "is_in_chlog", :default => false, :null => false - t.integer "position", :default => 1 - t.boolean "is_in_roadmap", :default => true, :null => false - t.integer "fields_bits", :default => 0 - end - - create_table "user_activities", :force => true do |t| - t.string "act_type" - t.integer "act_id" - t.string "container_type" - t.integer "container_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "user_id" - end - - create_table "user_extensions", :force => true do |t| - t.integer "user_id", :null => false - t.date "birthday" - t.string "brief_introduction" - t.integer "gender" - t.string "location" - t.string "occupation" - t.integer "work_experience" - t.integer "zip_code" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "technical_title" - t.integer "identity" - t.string "student_id" - t.string "teacher_realname" - t.string "student_realname" - t.string "location_city" - t.integer "school_id" - t.string "description", :default => "" - end - - create_table "user_feedback_messages", :force => true do |t| - t.integer "user_id" - t.integer "journals_for_message_id" - t.string "journals_for_message_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_grades", :force => true do |t| - t.integer "user_id", :null => false - t.integer "project_id", :null => false - t.float "grade", :default => 0.0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "user_grades", ["grade"], :name => "index_user_grades_on_grade" - add_index "user_grades", ["project_id"], :name => "index_user_grades_on_project_id" - add_index "user_grades", ["user_id"], :name => "index_user_grades_on_user_id" - - create_table "user_levels", :force => true do |t| - t.integer "user_id" - t.integer "level" - end - - create_table "user_preferences", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.text "others" - t.boolean "hide_mail", :default => false - t.string "time_zone" - end - - add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id" - - create_table "user_score_details", :force => true do |t| - t.integer "current_user_id" - t.integer "target_user_id" - t.string "score_type" - t.string "score_action" - t.integer "user_id" - t.integer "old_score" - t.integer "new_score" - t.integer "current_user_level" - t.integer "target_user_level" - t.integer "score_changeable_obj_id" - t.string "score_changeable_obj_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_scores", :force => true do |t| - t.integer "user_id", :null => false - t.integer "collaboration" - t.integer "influence" - t.integer "skill" - t.integer "active" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.float "grade", :default => 0.0 - end - - add_index "user_statuses", ["changesets_count"], :name => "index_user_statuses_on_changesets_count" - add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade" - add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count" - - create_table "users", :force => true do |t| - t.string "login", :default => "", :null => false - t.string "hashed_password", :limit => 40, :default => "", :null => false - t.string "firstname", :limit => 30, :default => "", :null => false - t.string "lastname", :default => "", :null => false - t.string "mail", :limit => 60, :default => "", :null => false - t.boolean "admin", :default => false, :null => false - t.integer "status", :default => 1, :null => false - t.datetime "last_login_on" - t.string "language", :limit => 5, :default => "" - t.integer "auth_source_id" - t.datetime "created_on" - t.datetime "updated_on" - t.string "type" - t.string "identity_url" - t.string "mail_notification", :default => "", :null => false - t.string "salt", :limit => 64 - t.integer "gid" - end - - add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id" - add_index "users", ["id", "type"], :name => "index_users_on_id_and_type" - add_index "users", ["type"], :name => "index_users_on_type" - - create_table "versions", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "name", :default => "", :null => false - t.string "description", :default => "" - t.date "effective_date" - t.datetime "created_on" - t.datetime "updated_on" - t.string "wiki_page_title" - t.string "status", :default => "open" - t.string "sharing", :default => "none", :null => false - end - - add_index "versions", ["project_id"], :name => "versions_project_id" - add_index "versions", ["sharing"], :name => "index_versions_on_sharing" - - create_table "visitors", :force => true do |t| - t.integer "user_id" - t.integer "master_id" - t.datetime "updated_on" - t.datetime "created_on" - end - - add_index "visitors", ["master_id"], :name => "index_visitors_master_id" - add_index "visitors", ["updated_on"], :name => "index_visitors_updated_on" - add_index "visitors", ["user_id"], :name => "index_visitors_user_id" - - create_table "watchers", :force => true do |t| - t.string "watchable_type", :default => "", :null => false - t.integer "watchable_id", :default => 0, :null => false - t.integer "user_id" - end - - add_index "watchers", ["user_id", "watchable_type"], :name => "watchers_user_id_type" - add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id" - add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type" - - create_table "web_footer_companies", :force => true do |t| - t.string "name" - t.string "logo_size" - t.string "url" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "web_footer_oranizers", :force => true do |t| - t.string "name" - t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "wiki_content_versions", :force => true do |t| - t.integer "wiki_content_id", :null => false - t.integer "page_id", :null => false - t.integer "author_id" - t.binary "data", :limit => 2147483647 - t.string "compression", :limit => 6, :default => "" - t.string "comments", :default => "" - t.datetime "updated_on", :null => false - t.integer "version", :null => false - end - - add_index "wiki_content_versions", ["updated_on"], :name => "index_wiki_content_versions_on_updated_on" - add_index "wiki_content_versions", ["wiki_content_id"], :name => "wiki_content_versions_wcid" - - create_table "wiki_contents", :force => true do |t| - t.integer "page_id", :null => false - t.integer "author_id" - t.text "text", :limit => 2147483647 - t.string "comments", :default => "" - t.datetime "updated_on", :null => false - t.integer "version", :null => false - end - - add_index "wiki_contents", ["author_id"], :name => "index_wiki_contents_on_author_id" - add_index "wiki_contents", ["page_id"], :name => "wiki_contents_page_id" - - create_table "wiki_pages", :force => true do |t| - t.integer "wiki_id", :null => false - t.string "title", :null => false - t.datetime "created_on", :null => false - t.boolean "protected", :default => false, :null => false - t.integer "parent_id" - end - - add_index "wiki_pages", ["parent_id"], :name => "index_wiki_pages_on_parent_id" - add_index "wiki_pages", ["wiki_id", "title"], :name => "wiki_pages_wiki_id_title" - add_index "wiki_pages", ["wiki_id"], :name => "index_wiki_pages_on_wiki_id" - - create_table "wiki_redirects", :force => true do |t| - t.integer "wiki_id", :null => false - t.string "title" - t.string "redirects_to" - t.datetime "created_on", :null => false - end - - add_index "wiki_redirects", ["wiki_id", "title"], :name => "wiki_redirects_wiki_id_title" - add_index "wiki_redirects", ["wiki_id"], :name => "index_wiki_redirects_on_wiki_id" - - create_table "wikis", :force => true do |t| - t.integer "project_id", :null => false - t.string "start_page", :null => false - t.integer "status", :default => 1, :null => false - end - - add_index "wikis", ["project_id"], :name => "wikis_project_id" - - create_table "workflows", :force => true do |t| - t.integer "tracker_id", :default => 0, :null => false - t.integer "old_status_id", :default => 0, :null => false - t.integer "new_status_id", :default => 0, :null => false - t.integer "role_id", :default => 0, :null => false - t.boolean "assignee", :default => false, :null => false - t.boolean "author", :default => false, :null => false - t.string "type", :limit => 30 - t.string "field_name", :limit => 30 - t.string "rule", :limit => 30 - end - - add_index "workflows", ["new_status_id"], :name => "index_workflows_on_new_status_id" - add_index "workflows", ["old_status_id"], :name => "index_workflows_on_old_status_id" - add_index "workflows", ["role_id", "tracker_id", "old_status_id"], :name => "wkfs_role_tracker_old_status" - add_index "workflows", ["role_id"], :name => "index_workflows_on_role_id" - - create_table "works_categories", :force => true do |t| - t.string "category" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "zip_packs", :force => true do |t| - t.integer "user_id" - t.integer "homework_id" - t.string "file_digest" - t.string "file_path" - t.integer "pack_times", :default => 1 - t.integer "pack_size", :default => 0 - t.text "file_digests" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - -end ->>>>>>> 26631e21991a327974a811851282b7535ab10b1d + create_table "system_messages", :force => true do |t| + t.integer "user_id" + t.string "content" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.text "description" + t.string "subject" + end + + create_table "taggings", :force => true do |t| + t.integer "tag_id" + t.integer "taggable_id" + t.string "taggable_type" + t.integer "tagger_id" + t.string "tagger_type" + t.string "context", :limit => 128 + t.datetime "created_at" + end + + add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id" + add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context" + add_index "taggings", ["taggable_type"], :name => "index_taggings_on_taggable_type" + + create_table "tags", :force => true do |t| + t.string "name" + end + + create_table "teachers", :force => true do |t| + t.string "tea_name" + t.string "location" + t.integer "couurse_time" + t.integer "course_code" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "extra" + end + + create_table "time_entries", :force => true do |t| + t.integer "project_id", :null => false + t.integer "user_id", :null => false + t.integer "issue_id" + t.float "hours", :null => false + t.string "comments" + t.integer "activity_id", :null => false + t.date "spent_on", :null => false + t.integer "tyear", :null => false + t.integer "tmonth", :null => false + t.integer "tweek", :null => false + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + end + + add_index "time_entries", ["activity_id"], :name => "index_time_entries_on_activity_id" + add_index "time_entries", ["created_on"], :name => "index_time_entries_on_created_on" + add_index "time_entries", ["issue_id"], :name => "time_entries_issue_id" + add_index "time_entries", ["project_id"], :name => "time_entries_project_id" + add_index "time_entries", ["user_id"], :name => "index_time_entries_on_user_id" + + create_table "tokens", :force => true do |t| + t.integer "user_id", :default => 0, :null => false + t.string "action", :limit => 30, :default => "", :null => false + t.string "value", :limit => 40, :default => "", :null => false + t.datetime "created_on", :null => false + end + + add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id" + add_index "tokens", ["value"], :name => "tokens_value", :unique => true + + create_table "trackers", :force => true do |t| + t.string "name", :limit => 30, :default => "", :null => false + t.boolean "is_in_chlog", :default => false, :null => false + t.integer "position", :default => 1 + t.boolean "is_in_roadmap", :default => true, :null => false + t.integer "fields_bits", :default => 0 + end + + create_table "user_activities", :force => true do |t| + t.string "act_type" + t.integer "act_id" + t.string "container_type" + t.integer "container_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "user_id" + end + + create_table "user_extensions", :force => true do |t| + t.integer "user_id", :null => false + t.date "birthday" + t.string "brief_introduction" + t.integer "gender" + t.string "location" + t.string "occupation" + t.integer "work_experience" + t.integer "zip_code" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "technical_title" + t.integer "identity" + t.string "student_id" + t.string "teacher_realname" + t.string "student_realname" + t.string "location_city" + t.integer "school_id" + t.string "description", :default => "" + end + + create_table "user_feedback_messages", :force => true do |t| + t.integer "user_id" + t.integer "journals_for_message_id" + t.string "journals_for_message_type" + t.integer "viewed" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "user_grades", :force => true do |t| + t.integer "user_id", :null => false + t.integer "project_id", :null => false + t.float "grade", :default => 0.0 + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "user_grades", ["grade"], :name => "index_user_grades_on_grade" + add_index "user_grades", ["project_id"], :name => "index_user_grades_on_project_id" + add_index "user_grades", ["user_id"], :name => "index_user_grades_on_user_id" + + create_table "user_levels", :force => true do |t| + t.integer "user_id" + t.integer "level" + end + + create_table "user_preferences", :force => true do |t| + t.integer "user_id", :default => 0, :null => false + t.text "others" + t.boolean "hide_mail", :default => false + t.string "time_zone" + end + + add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id" + + create_table "user_score_details", :force => true do |t| + t.integer "current_user_id" + t.integer "target_user_id" + t.string "score_type" + t.string "score_action" + t.integer "user_id" + t.integer "old_score" + t.integer "new_score" + t.integer "current_user_level" + t.integer "target_user_level" + t.integer "score_changeable_obj_id" + t.string "score_changeable_obj_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "user_scores", :force => true do |t| + t.integer "user_id", :null => false + t.integer "collaboration" + t.integer "influence" + t.integer "skill" + t.integer "active" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "user_statuses", :force => true do |t| + t.integer "changesets_count" + t.integer "watchers_count" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.float "grade", :default => 0.0 + end + + add_index "user_statuses", ["changesets_count"], :name => "index_user_statuses_on_changesets_count" + add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade" + add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count" + + create_table "users", :force => true do |t| + t.string "login", :default => "", :null => false + t.string "hashed_password", :limit => 40, :default => "", :null => false + t.string "firstname", :limit => 30, :default => "", :null => false + t.string "lastname", :default => "", :null => false + t.string "mail", :limit => 60, :default => "", :null => false + t.boolean "admin", :default => false, :null => false + t.integer "status", :default => 1, :null => false + t.datetime "last_login_on" + t.string "language", :limit => 5, :default => "" + t.integer "auth_source_id" + t.datetime "created_on" + t.datetime "updated_on" + t.string "type" + t.string "identity_url" + t.string "mail_notification", :default => "", :null => false + t.string "salt", :limit => 64 + t.integer "gid" + end + + add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id" + add_index "users", ["id", "type"], :name => "index_users_on_id_and_type" + add_index "users", ["type"], :name => "index_users_on_type" + + create_table "versions", :force => true do |t| + t.integer "project_id", :default => 0, :null => false + t.string "name", :default => "", :null => false + t.string "description", :default => "" + t.date "effective_date" + t.datetime "created_on" + t.datetime "updated_on" + t.string "wiki_page_title" + t.string "status", :default => "open" + t.string "sharing", :default => "none", :null => false + end + + add_index "versions", ["project_id"], :name => "versions_project_id" + add_index "versions", ["sharing"], :name => "index_versions_on_sharing" + + create_table "visitors", :force => true do |t| + t.integer "user_id" + t.integer "master_id" + t.datetime "updated_on" + t.datetime "created_on" + end + + add_index "visitors", ["master_id"], :name => "index_visitors_master_id" + add_index "visitors", ["updated_on"], :name => "index_visitors_updated_on" + add_index "visitors", ["user_id"], :name => "index_visitors_user_id" + + create_table "watchers", :force => true do |t| + t.string "watchable_type", :default => "", :null => false + t.integer "watchable_id", :default => 0, :null => false + t.integer "user_id" + end + + add_index "watchers", ["user_id", "watchable_type"], :name => "watchers_user_id_type" + add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id" + add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type" + + create_table "web_footer_companies", :force => true do |t| + t.string "name" + t.string "logo_size" + t.string "url" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "web_footer_oranizers", :force => true do |t| + t.string "name" + t.text "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "wiki_content_versions", :force => true do |t| + t.integer "wiki_content_id", :null => false + t.integer "page_id", :null => false + t.integer "author_id" + t.binary "data", :limit => 2147483647 + t.string "compression", :limit => 6, :default => "" + t.string "comments", :default => "" + t.datetime "updated_on", :null => false + t.integer "version", :null => false + end + + add_index "wiki_content_versions", ["updated_on"], :name => "index_wiki_content_versions_on_updated_on" + add_index "wiki_content_versions", ["wiki_content_id"], :name => "wiki_content_versions_wcid" + + create_table "wiki_contents", :force => true do |t| + t.integer "page_id", :null => false + t.integer "author_id" + t.text "text", :limit => 2147483647 + t.string "comments", :default => "" + t.datetime "updated_on", :null => false + t.integer "version", :null => false + end + + add_index "wiki_contents", ["author_id"], :name => "index_wiki_contents_on_author_id" + add_index "wiki_contents", ["page_id"], :name => "wiki_contents_page_id" + + create_table "wiki_pages", :force => true do |t| + t.integer "wiki_id", :null => false + t.string "title", :null => false + t.datetime "created_on", :null => false + t.boolean "protected", :default => false, :null => false + t.integer "parent_id" + end + + add_index "wiki_pages", ["parent_id"], :name => "index_wiki_pages_on_parent_id" + add_index "wiki_pages", ["wiki_id", "title"], :name => "wiki_pages_wiki_id_title" + add_index "wiki_pages", ["wiki_id"], :name => "index_wiki_pages_on_wiki_id" + + create_table "wiki_redirects", :force => true do |t| + t.integer "wiki_id", :null => false + t.string "title" + t.string "redirects_to" + t.datetime "created_on", :null => false + end + + add_index "wiki_redirects", ["wiki_id", "title"], :name => "wiki_redirects_wiki_id_title" + add_index "wiki_redirects", ["wiki_id"], :name => "index_wiki_redirects_on_wiki_id" + + create_table "wikis", :force => true do |t| + t.integer "project_id", :null => false + t.string "start_page", :null => false + t.integer "status", :default => 1, :null => false + end + + add_index "wikis", ["project_id"], :name => "wikis_project_id" + + create_table "workflows", :force => true do |t| + t.integer "tracker_id", :default => 0, :null => false + t.integer "old_status_id", :default => 0, :null => false + t.integer "new_status_id", :default => 0, :null => false + t.integer "role_id", :default => 0, :null => false + t.boolean "assignee", :default => false, :null => false + t.boolean "author", :default => false, :null => false + t.string "type", :limit => 30 + t.string "field_name", :limit => 30 + t.string "rule", :limit => 30 + end + + add_index "workflows", ["new_status_id"], :name => "index_workflows_on_new_status_id" + add_index "workflows", ["old_status_id"], :name => "index_workflows_on_old_status_id" + add_index "workflows", ["role_id", "tracker_id", "old_status_id"], :name => "wkfs_role_tracker_old_status" + add_index "workflows", ["role_id"], :name => "index_workflows_on_role_id" + + create_table "works_categories", :force => true do |t| + t.string "category" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "zip_packs", :force => true do |t| + t.integer "user_id" + t.integer "homework_id" + t.string "file_digest" + t.string "file_path" + t.integer "pack_times", :default => 1 + t.integer "pack_size", :default => 0 + t.text "file_digests" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + +end From 62c2085d61df6c7f5c6f5e26c106ad1b462b2487 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Fri, 15 Jan 2016 22:45:16 +0800 Subject: [PATCH 002/423] merge --- db/schema.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/schema.rb b/db/schema.rb index 2e0e4d238..5d1d51c13 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20160114022928) do +ActiveRecord::Schema.define(:version => 20160115023749) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false From 744b2469307d912915edac88c953547cd479da2d Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Fri, 15 Jan 2016 23:15:06 +0800 Subject: [PATCH 003/423] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/wechat.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/config/wechat.yml b/config/wechat.yml index af795654f..20b6382c3 100644 --- a/config/wechat.yml +++ b/config/wechat.yml @@ -1,14 +1,14 @@ default: &default - corpid: "corpid" - corpsecret: "corpsecret" - agentid: 1 +# corpid: "corpid" +# corpsecret: "corpsecret" +# agentid: 1 # Or if using public account, only need above two line -# appid: "my_appid" -# secret: "my_secret" - token: "my_token" + appid: "wxc09454f171153c2d" + secret: "dff5b606e34dcafe24163ec82c2715f8" + token: "123456" access_token: "1234567" encrypt_mode: true # if true must fill encoding_aes_key - encoding_aes_key: "TJP8IMYwdcW1EkBIKIcQ193bCe7uB0RVqZDC2eAmkjz" + encoding_aes_key: "QyocNOkRmrT5HzBpCG54EVPUQjk86nJapXNVDQm6Yy6" jsapi_ticket: "C:/Users/[user_name]/wechat_jsapi_ticket" production: From 932b0923b19da204daf743b5b569299abfe11453 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Fri, 15 Jan 2016 23:49:03 +0800 Subject: [PATCH 004/423] change wechat to guange2015 --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 0e4e456ca..d8d148ec3 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ unless RUBY_PLATFORM =~ /w32/ gem 'iconv' end -gem 'wechat' +gem 'wechat',git: 'https://github.com/guange2015/wechat.git' gem 'grack', path:'lib/grack' gem 'gitlab', path: 'lib/gitlab-cli' gem 'rest-client' From 5f6a3cac04c05c1180b002350c441be98590dbad Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sat, 16 Jan 2016 11:54:59 +0800 Subject: [PATCH 005/423] wechat init --- app/views/wechats/create.html.erb | 0 config/routes.rb | 2 ++ db/migrate/20160116034925_create_wechat_logs.rb | 11 +++++++++++ db/schema.rb | 10 +++++++++- 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 app/views/wechats/create.html.erb create mode 100644 db/migrate/20160116034925_create_wechat_logs.rb diff --git a/app/views/wechats/create.html.erb b/app/views/wechats/create.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/config/routes.rb b/config/routes.rb index 5bccb915c..02f611677 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -27,6 +27,8 @@ RedmineApp::Application.routes.draw do + resource :wechat, only: [:show, :create] + mount Mobile::API => '/api' # Enable Grack support diff --git a/db/migrate/20160116034925_create_wechat_logs.rb b/db/migrate/20160116034925_create_wechat_logs.rb new file mode 100644 index 000000000..a60c68f9f --- /dev/null +++ b/db/migrate/20160116034925_create_wechat_logs.rb @@ -0,0 +1,11 @@ +class CreateWechatLogs < ActiveRecord::Migration + def change + create_table :wechat_logs do |t| + t.string :openid, null: false, index: true + t.text :request_raw + t.text :response_raw + t.text :session_raw + t.datetime :created_at, null: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 5d1d51c13..6de03ed54 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20160115023749) do +ActiveRecord::Schema.define(:version => 20160116034925) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -1928,6 +1928,14 @@ ActiveRecord::Schema.define(:version => 20160115023749) do t.datetime "updated_at", :null => false end + create_table "wechat_logs", :force => true do |t| + t.string "openid", :null => false + t.text "request_raw" + t.text "response_raw" + t.text "session_raw" + t.datetime "created_at", :null => false + end + create_table "wiki_content_versions", :force => true do |t| t.integer "wiki_content_id", :null => false t.integer "page_id", :null => false From 080cc71912889598bc653abac45c4e44295cac98 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sat, 16 Jan 2016 11:59:09 +0800 Subject: [PATCH 006/423] =?UTF-8?q?wechat=20=E8=B7=AF=E7=94=B1=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 02f611677..aa97e84e5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,9 +26,6 @@ # Example: :via => :get ====> :via => :get RedmineApp::Application.routes.draw do - - resource :wechat, only: [:show, :create] - mount Mobile::API => '/api' # Enable Grack support From 9f667588c45b61481d6a1d1eb47878ece4cacb5d Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 11:50:59 +0800 Subject: [PATCH 007/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/menu.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 config/menu.yml diff --git a/config/menu.yml b/config/menu.yml new file mode 100644 index 000000000..1a4927fbd --- /dev/null +++ b/config/menu.yml @@ -0,0 +1,9 @@ +button: + - + type: "click" + name: "最新动态" + key: "MY_NEWS" + - + type: "view" + name: "进入网站" + url: "http://www.trustie.net/" \ No newline at end of file From 40047ff81866b042c086f36da71ef3666d90fc9c Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 11:51:26 +0800 Subject: [PATCH 008/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index fd3050e05..880b5d6de 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -54,6 +54,14 @@ class WechatsController < ActionController::Base end end + on :click, with: 'MY_NEWS' do |request, key| + + news = (1..count.to_i).each_with_object([]) { |n, memo| memo << { title: 'News title', content: "No. #{n} news content" } } + request.reply.news(news) do |article, n, index| # article is return object + article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'http://www.baidu.com/img/bdlogo.gif', url: 'http://www.baidu.com/' + end + end + # When user click the menu button on :click, with: 'BOOK_LUNCH' do |request, key| request.reply.text "User: #{request[:FromUserName]} click #{key}" From 08e193ea3cbca918e4cd0bea3eb9909a67d5216e Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 11:51:37 +0800 Subject: [PATCH 009/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/user_wechat.rb | 3 +++ .../20160119034447_create_user_wechats.rb | 21 +++++++++++++++++++ db/schema.rb | 21 ++++++++++++++++++- 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 app/models/user_wechat.rb create mode 100644 db/migrate/20160119034447_create_user_wechats.rb diff --git a/app/models/user_wechat.rb b/app/models/user_wechat.rb new file mode 100644 index 000000000..f77e3273d --- /dev/null +++ b/app/models/user_wechat.rb @@ -0,0 +1,3 @@ +class UserWechat < ActiveRecord::Base + # attr_accessible :title, :body +end diff --git a/db/migrate/20160119034447_create_user_wechats.rb b/db/migrate/20160119034447_create_user_wechats.rb new file mode 100644 index 000000000..e2170f0c1 --- /dev/null +++ b/db/migrate/20160119034447_create_user_wechats.rb @@ -0,0 +1,21 @@ +class CreateUserWechats < ActiveRecord::Migration + def change + create_table :user_wechats do |t| + t.integer :subscribe + t.string :openid + t.string :nickname + t.integer :sex + t.string :language + t.string :city + t.string :province + t.string :country + t.string :headimgurl + t.string :subscribe_time + t.string :unionid + t.string :remark + t.integer :groupid + t.references :user + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 6de03ed54..a7b2af8b2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20160116034925) do +ActiveRecord::Schema.define(:version => 20160119034447) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -1853,6 +1853,25 @@ ActiveRecord::Schema.define(:version => 20160116034925) do add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade" add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count" + create_table "user_wechats", :force => true do |t| + t.integer "subscribe" + t.string "openid" + t.string "nickname" + t.integer "sex" + t.string "language" + t.string "city" + t.string "province" + t.string "country" + t.string "headimgurl" + t.string "subscribe_time" + t.string "unionid" + t.string "remark" + t.integer "groupid" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + create_table "users", :force => true do |t| t.string "login", :default => "", :null => false t.string "hashed_password", :limit => 40, :default => "", :null => false From 571196ad2d198f2c97f9b9a14c622c7958883dd3 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 12:00:13 +0800 Subject: [PATCH 010/423] =?UTF-8?q?wechat=20model=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/user.rb | 1 + app/models/user_wechat.rb | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index f3367db59..4a30fcaf0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -179,6 +179,7 @@ class User < Principal ##### has_many :shares ,:dependent => :destroy + has_one :user_wechat # add by zjc has_one :level, :class_name => 'UserLevels', :dependent => :destroy diff --git a/app/models/user_wechat.rb b/app/models/user_wechat.rb index f77e3273d..446655afd 100644 --- a/app/models/user_wechat.rb +++ b/app/models/user_wechat.rb @@ -1,3 +1,6 @@ class UserWechat < ActiveRecord::Base - # attr_accessible :title, :body + attr_accessible :subscribe, :openid, :nickname, :sex, :language, :city, :province, :country, + :headimgurl, :subscribe_time, :unionid, :remark, :groupid, :user + + belongs_to :user end From 96d0b2e717fb345aaff60f88b29f31bdef172699 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 14:07:59 +0800 Subject: [PATCH 011/423] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 38 +++++++++++++++++++++------ config/routes.rb | 8 ++++-- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 880b5d6de..24de889a8 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -1,6 +1,8 @@ class WechatsController < ActionController::Base wechat_responder + + # default text responder when no other match on :text do |request, content| request.reply.text "echo: #{content}" # Just echo @@ -54,14 +56,6 @@ class WechatsController < ActionController::Base end end - on :click, with: 'MY_NEWS' do |request, key| - - news = (1..count.to_i).each_with_object([]) { |n, memo| memo << { title: 'News title', content: "No. #{n} news content" } } - request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'http://www.baidu.com/img/bdlogo.gif', url: 'http://www.baidu.com/' - end - end - # When user click the menu button on :click, with: 'BOOK_LUNCH' do |request, key| request.reply.text "User: #{request[:FromUserName]} click #{key}" @@ -124,4 +118,32 @@ class WechatsController < ActionController::Base # Any not match above will fail to below on :fallback, respond: 'fallback message' + + on :click, with: 'MY_NEWS' do |request, key| + if user_binded? + news = (1..count.to_i).each_with_object([]) { |n, memo| memo << { title: 'News title', content: "No. #{n} news content" } } + request.reply.news(news) do |article, n, index| # article is return object + article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'http://www.baidu.com/img/bdlogo.gif', url: 'http://www.baidu.com/' + end + else + news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } + request.reply.news(news) do |article, n, index| # article is return object + article.item title: "#{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo1.png', url: login_wechat_path + end + end + end + + def bind + + end + + def login + + end + + private + def user_binded? + openid = request[:FromUserName] + uw = UserWechat.where(:openid, open).first + end end diff --git a/config/routes.rb b/config/routes.rb index aa97e84e5..3ed832368 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1122,8 +1122,12 @@ RedmineApp::Application.routes.draw do end resources :at - - resource :wechat, only:[:show, :create] + resource :wechat, only:[:show, :create] do + collection do + get :login + post :bind + end + end Dir.glob File.expand_path("plugins/*", Rails.root) do |plugin_dir| file = File.join(plugin_dir, "config/routes.rb") From 8e66ab6a41c1a97cadf88403bf00abb3eab4bbf3 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 14:28:13 +0800 Subject: [PATCH 012/423] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20bind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 17 ++++++++++---- app/views/wechats/login.html.erb | 32 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 app/views/wechats/login.html.erb diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 24de889a8..40c7d5ff5 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -1,8 +1,6 @@ class WechatsController < ActionController::Base wechat_responder - - # default text responder when no other match on :text do |request, content| request.reply.text "echo: #{content}" # Just echo @@ -134,11 +132,22 @@ class WechatsController < ActionController::Base end def bind - + begin + raise "非法操作, 微信ID不存在" unless params[:openid] + user, last_login_on = User.try_to_login(params[:username], params[:password]) + raise "用户名或密码错误,请重新登录" unless user + #补全用户信息 + puts wechat.user(request[:openid]) + user.user_wechat = UserWechat.new(openid: params[:openid]) + user.save! + rescue Exception=>e + @wechat_bind_errors = e.message + render :login + end end def login - + @openid = request[:FromUserName] #TODO 安全性 end private diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb new file mode 100644 index 000000000..44fc1da32 --- /dev/null +++ b/app/views/wechats/login.html.erb @@ -0,0 +1,32 @@ +
+
+

+ <%= @wechat_bind_errors %> +

+
+ <%= form_tag(bind_wechat_path,:id=>'main_login_form',:method=>'post') do %> + +
+ <%= text_field_tag 'username', params[:username], :tabindex => '1' , + :class=>'loginSignBox',:placeholder=>'请输入邮箱地址或昵称', :onkeypress => "user_name_keypress(event);"%> + +
+ <% if Setting.openid? %> +
+ <%= text_field_tag "openid_url", nil, :tabindex => '3',:placeholder=>'请输入OpenId URL' %> +
+ <% end %> +
+ + <%= password_field_tag 'password', nil, :tabindex => '2',:class=>'loginSignBox' ,:placeholder=>'请输密码', :onkeypress => "user_name_keypress(event);"%> +
+ + + +
+ <%= submit_tag '绑定' %> +
+ + <% end %> + +
\ No newline at end of file From 80feca0c8c7628df2541505214c7c48c25f8dfe8 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 14:32:22 +0800 Subject: [PATCH 013/423] . --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 40c7d5ff5..9231bb77c 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -153,6 +153,6 @@ class WechatsController < ActionController::Base private def user_binded? openid = request[:FromUserName] - uw = UserWechat.where(:openid, open).first + uw = UserWechat.where(:openid => open).first end end From 2681cc97ddca4da513360dd5c069938ce6b24645 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 14:39:31 +0800 Subject: [PATCH 014/423] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=89=8D=E5=85=88=E5=BD=95=E5=85=A5=E7=94=A8=E6=88=B7=E8=B5=84?= =?UTF-8?q?=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 9231bb77c..75fba6082 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -124,9 +124,11 @@ class WechatsController < ActionController::Base article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'http://www.baidu.com/img/bdlogo.gif', url: 'http://www.baidu.com/' end else + openid = request[:FromUserName] + puts wechat.user(request[:openid]) news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo1.png', url: login_wechat_path + article.item title: "#{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo1.png', url: login_wechat_url end end end @@ -137,7 +139,7 @@ class WechatsController < ActionController::Base user, last_login_on = User.try_to_login(params[:username], params[:password]) raise "用户名或密码错误,请重新登录" unless user #补全用户信息 - puts wechat.user(request[:openid]) + user.user_wechat = UserWechat.new(openid: params[:openid]) user.save! rescue Exception=>e From 0b1b8a4fcd8030d276eba4b9fb126f326f5559be Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 14:40:39 +0800 Subject: [PATCH 015/423] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20bind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 75fba6082..dc3804bf8 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -155,6 +155,6 @@ class WechatsController < ActionController::Base private def user_binded? openid = request[:FromUserName] - uw = UserWechat.where(:openid => open).first + uw = UserWechat.where(openid: openid).first end end From 527b695fabd89abe5cee5215eca85ddd26c87186 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 14:46:16 +0800 Subject: [PATCH 016/423] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20bind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index dc3804bf8..017886194 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -125,10 +125,12 @@ class WechatsController < ActionController::Base end else openid = request[:FromUserName] - puts wechat.user(request[:openid]) + attrs = wechat.user(openid) + UserWechat.delete_all(openid: openid) + uw = UserWechat.create!(attrs) news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo1.png', url: login_wechat_url + article.item title: "#{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo1.png', url: login_wechat_url(openid: uw.id) end end end @@ -140,7 +142,7 @@ class WechatsController < ActionController::Base raise "用户名或密码错误,请重新登录" unless user #补全用户信息 - user.user_wechat = UserWechat.new(openid: params[:openid]) + user.user_wechat = UserWechat.find_by_id(params[:openid]) user.save! rescue Exception=>e @wechat_bind_errors = e.message From 349f511c1210fbc56a759f3a7a2ea0b9d371184d Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 14:56:52 +0800 Subject: [PATCH 017/423] =?UTF-8?q?=E5=BC=80=E5=8F=91=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E4=B8=8D=E8=A6=81=E5=BC=849200=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/user.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 4a30fcaf0..502f521d1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1163,17 +1163,17 @@ class User < Principal def create_user_ealasticsearch_index if self.id != 2 && self.id != 4 - self.__elasticsearch__.index_document + self.__elasticsearch__.index_document if Rails.env.production? end end def update_user_ealasticsearch_index if self.id != 2 && self.id != 4 - self.__elasticsearch__.update_document + self.__elasticsearch__.update_document if Rails.env.production? end end def delete_user_ealasticsearch_index if self.id != 2 && self.id != 4 - self.__elasticsearch__.delete_document + self.__elasticsearch__.delete_document if Rails.env.production? end end From babf30af0ae7fbb3cc63c6093bf1bacc8a4cbf00 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 15:06:40 +0800 Subject: [PATCH 018/423] =?UTF-8?q?=E7=95=8C=E9=9D=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 5 +++-- app/views/wechats/bind.html.erb | 14 ++++++++++++++ app/views/wechats/login.html.erb | 15 ++++++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 app/views/wechats/bind.html.erb diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 017886194..a83969d39 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -142,8 +142,9 @@ class WechatsController < ActionController::Base raise "用户名或密码错误,请重新登录" unless user #补全用户信息 - user.user_wechat = UserWechat.find_by_id(params[:openid]) - user.save! + uw = UserWechat.find_by_id(params[:openid]) + uw.user = user + uw.save! rescue Exception=>e @wechat_bind_errors = e.message render :login diff --git a/app/views/wechats/bind.html.erb b/app/views/wechats/bind.html.erb new file mode 100644 index 000000000..e569162b2 --- /dev/null +++ b/app/views/wechats/bind.html.erb @@ -0,0 +1,14 @@ + + + + Ruby China + + + + + + +

恭喜! 绑定成功.

+ + + \ No newline at end of file diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index 44fc1da32..cbc476f26 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -1,3 +1,13 @@ + + + + Ruby China + + + + + +

@@ -29,4 +39,7 @@ <% end %> -

\ No newline at end of file +
+ + + \ No newline at end of file From f098e5358da34be6f0df2106d2c8b4b3d6830fc9 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 15:12:00 +0800 Subject: [PATCH 019/423] =?UTF-8?q?openid=E5=87=BA=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index a83969d39..7f589124d 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -152,7 +152,7 @@ class WechatsController < ActionController::Base end def login - @openid = request[:FromUserName] #TODO 安全性 + @openid = params[:openid] #TODO 安全性 end private From 3a0f98ebea5f316c86b9f487b8a5f640c0b65f64 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 15:17:56 +0800 Subject: [PATCH 020/423] =?UTF-8?q?openid=E5=87=BA=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 7f589124d..3cf0664e4 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -118,7 +118,7 @@ class WechatsController < ActionController::Base on :fallback, respond: 'fallback message' on :click, with: 'MY_NEWS' do |request, key| - if user_binded? + if user_binded?(request[:FromUserName]) news = (1..count.to_i).each_with_object([]) { |n, memo| memo << { title: 'News title', content: "No. #{n} news content" } } request.reply.news(news) do |article, n, index| # article is return object article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'http://www.baidu.com/img/bdlogo.gif', url: 'http://www.baidu.com/' @@ -156,8 +156,7 @@ class WechatsController < ActionController::Base end private - def user_binded? - openid = request[:FromUserName] + def user_binded?(openid) uw = UserWechat.where(openid: openid).first end end From 7f5bb11a5f28cb448995bda653f1c5fa4e87faa3 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 15:25:36 +0800 Subject: [PATCH 021/423] =?UTF-8?q?=E8=AE=A4=E8=AF=81=E5=90=8E=E5=9B=9E?= =?UTF-8?q?=E5=A4=8D=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 3cf0664e4..993007308 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -118,10 +118,15 @@ class WechatsController < ActionController::Base on :fallback, respond: 'fallback message' on :click, with: 'MY_NEWS' do |request, key| - if user_binded?(request[:FromUserName]) - news = (1..count.to_i).each_with_object([]) { |n, memo| memo << { title: 'News title', content: "No. #{n} news content" } } + uw = user_binded?(request[:FromUserName]) + if uw + ua = UserActivity.where(user_id: uw.user.id).order("id desc").limit(5) + news = ua.map do |ua| + {title: "act_type: #{ua.act_type}, act_id: #{ua.act_id}", content: "container_id: #{ua.container_id}, container_type: #{ua.container_type}"} + end + request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'http://www.baidu.com/img/bdlogo.gif', url: 'http://www.baidu.com/' + article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo1.png', url: 'http://www.baidu.com/' end else openid = request[:FromUserName] From f39631169d9cd1e0e29f5fc52cc1abd07ec0caee Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 19 Jan 2016 15:29:03 +0800 Subject: [PATCH 022/423] =?UTF-8?q?=E8=AE=A4=E8=AF=81=E5=90=8E=E5=9B=9E?= =?UTF-8?q?=E5=A4=8D=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- app/models/user_wechat.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 993007308..34dd2e79a 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -148,7 +148,7 @@ class WechatsController < ActionController::Base #补全用户信息 uw = UserWechat.find_by_id(params[:openid]) - uw.user = user + uw.user_id = user.id uw.save! rescue Exception=>e @wechat_bind_errors = e.message diff --git a/app/models/user_wechat.rb b/app/models/user_wechat.rb index 446655afd..49053dbf0 100644 --- a/app/models/user_wechat.rb +++ b/app/models/user_wechat.rb @@ -1,6 +1,6 @@ class UserWechat < ActiveRecord::Base attr_accessible :subscribe, :openid, :nickname, :sex, :language, :city, :province, :country, - :headimgurl, :subscribe_time, :unionid, :remark, :groupid, :user + :headimgurl, :subscribe_time, :unionid, :remark, :groupid, :user, :user_id belongs_to :user end From 3f867a7f83a71d4d9fc5506adac71a1884c02c2e Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 21:40:56 +0800 Subject: [PATCH 023/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0weui=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/stylesheets/weui/weui.min.css | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 public/stylesheets/weui/weui.min.css diff --git a/public/stylesheets/weui/weui.min.css b/public/stylesheets/weui/weui.min.css new file mode 100644 index 000000000..7b75fa7dd --- /dev/null +++ b/public/stylesheets/weui/weui.min.css @@ -0,0 +1,5 @@ +/*! + * WeUI v0.2.2 (https://github.com/weui/weui) + * Copyright 2016 Tencent, Inc. + * Licensed under the MIT license + */.weui_input,.weui_select,.weui_switch{-webkit-appearance:none}.weui_btn,.weui_btn:after,.weui_grid,.weui_switch{box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{line-height:1.6;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}*{margin:0;padding:0}a img{border:0}a{text-decoration:none}@font-face{font-weight:400;font-style:normal;font-family:weui;src:url(data:application/octet-stream;base64,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) format('truetype'),url(data:application/octet-stream;base64,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) format('woff'),url(data:application/octet-stream;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtZXRhZGF0YT5Db3B5cmlnaHQgKEMpIDIwMTUgYnkgb3JpZ2luYWwgYXV0aG9ycyBAIGZvbnRlbGxvLmNvbTwvbWV0YWRhdGE+CjxkZWZzPgo8Zm9udCBpZD0id2V1aSIgaG9yaXotYWR2LXg9IjEwMDAiID4KPGZvbnQtZmFjZSBmb250LWZhbWlseT0id2V1aSIgZm9udC13ZWlnaHQ9IjQwMCIgZm9udC1zdHJldGNoPSJub3JtYWwiIHVuaXRzLXBlci1lbT0iMTAwMCIgYXNjZW50PSI4NTAiIGRlc2NlbnQ9Ii0xNTAiIC8+CjxtaXNzaW5nLWdseXBoIGhvcml6LWFkdi14PSIxMDAwIiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0iY2lyY2xlIiB1bmljb2RlPSImI3hlYTAxOyIgZD0ibTUwMSA3OTFjLTI0NCAwLTQ0Mi0xOTgtNDQyLTQ0MiAwLTI0MyAxOTgtNDQxIDQ0Mi00NDFzNDQxIDE5NyA0NDEgNDQxYzAgMjQ0LTE5OCA0NDItNDQxIDQ0MnogbTAtODQ5Yy0yMjMgMC00MDQgMTgwLTQwNCA0MDMgMCAyMjMgMTgxIDQwMyA0MDQgNDAzIDIyMiAwIDQwMy0xODAgNDAzLTQwMyAwLTIyMy0xODEtNDAzLTQwMy00MDN6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KPGdseXBoIGdseXBoLW5hbWU9ImRvd25sb2FkIiB1bmljb2RlPSImI3hlYTAyOyIgZD0ibTQ5NSA3OTdjLTI0MiAwLTQ0Mi0yMDAtNDQyLTQ1MiAwLTI0MiAyMDAtNDQyIDQ0Mi00NDIgMjUyIDAgNDUyIDIwMCA0NTIgNDQyIDAgMjUyLTIwMCA0NTItNDUyIDQ1MnogbTE1Ny01MjhsLTExOC0xNTRjLTE5LTI0LTQ5LTI0LTY4IDBsLTExOCAxNTRjLTE5IDI0LTkgNDQgMjIgNDRoOTN2Mjc5YzAgMTAgOCAxOSAxOCAxOWgzOGMxMCAwIDE4LTkgMTgtMTl2LTI3OWg5M2MzMSAwIDQxLTIwIDIyLTQ0eiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+CjxnbHlwaCBnbHlwaC1uYW1lPSJpbmZvIiB1bmljb2RlPSImI3hlYTAzOyIgZD0ibTQ5NiA3ODljLTIzOCAwLTQzNS0xOTctNDM1LTQ0NSAwLTIzOCAxOTctNDM1IDQzNS00MzUgMjQ4IDAgNDQ1IDE5NyA0NDUgNDM1IDAgMjQ4LTE5NyA0NDUtNDQ1IDQ0NXogbTM2LTY1NmMwLTktOC0xNy0xNy0xN2gtMjhjLTkgMC0xNyA4LTE3IDE3djI4MmMwIDUgNCA5IDkgOWg0NGM1IDAgOS00IDktOXYtMjgyeiBtLTMxIDMzOWMtMjQgMC00NCAyMC00NCA0NHMyMCA0NCA0NCA0NGMyNCAwIDQ0LTE5IDQ0LTQ0cy0yMC00NC00NC00NHoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0ic2FmZV9zdWNjZXNzIiB1bmljb2RlPSImI3hlYTA0OyIgZD0ibTUwMCA4MTJjLTE3My0zOS0yOTktODItNDEzLTExOSAwLTEyMCAwLTIxNiAwLTMxNyAwLTI4MyAyMzEtNDM5IDQxMy00ODggMTgyIDQ5IDQxMyAyMDUgNDEzIDQ4OCAwIDEwMSAwIDE5NyAwIDMxNy0xMTQgMzctMjQwIDgwLTQxMyAxMTl6IG0yNTItMzIxbC0zMjItMzE2Yy0yLTItNS0yLTcgMGwtMTQ4IDE1M2MtMiAyLTIgNS0xIDhsMjEgMjdjMSAyIDQgMyA3IDFsMTIxLTkzYzItMSA1LTEgNyAwbDI5NSAyNDZjMiAyIDUgMiA3IDBsMjAtMTljMS0yIDEtNSAwLTd6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KPGdseXBoIGdseXBoLW5hbWU9InNhZmVfd2FybiIgdW5pY29kZT0iJiN4ZWEwNTsiIGQ9Im01MDEgNzk0Yy0xNjYtMzgtMjg3LTgwLTM5Ny0xMTQgMC0xMTYgMC0yMDggMC0zMDUgMC0yNzIgMjIzLTQyMiAzOTctNDY5IDE3NCA0NyAzOTcgMTk3IDM5NyA0NjkgMCA5NyAwIDE4OSAwIDMwNS0xMTAgMzQtMjMxIDc2LTM5NyAxMTR6IG0tMjMtMjc2aDQ2YzYgMCAxMC00IDktOWwtMTAtMjE2YzAtMy0yLTUtNS01aC0zNGMtMyAwLTUgMi01IDVsLTEwIDIxNmMwIDUgNCA5IDkgOXogbTIzLTMzNmMtMTggMC0zMyAxNS0zMyAzM3MxNSAzMyAzMyAzMyAzMy0xNSAzMy0zMy0xNS0zMy0zMy0zM3oiIGhvcml6LWFkdi14PSIxMDAwIiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0ic3VjY2VzcyIgdW5pY29kZT0iJiN4ZWEwNjsiIGQ9Im0yODggMzA1Yy03IDgtOCAyMi0yIDMwbDMgNGM3IDkgMTkgMTEgMjggNGw5OC03NWM5LTcgMjMtNyAzMSAwbDI3NiAyMjljOCA3IDIxIDcgMjktMWwtMiAyYzgtOCA4LTIwIDAtMjhsLTMwNC0yOTljLTctOC0yMC03LTI4IDFsLTEyOSAxMzN6IG02NjkgMzljMCAyNTgtMjA1IDQ2My00NjMgNDYzLTI0NiAwLTQ1MS0yMDUtNDUxLTQ2MyAwLTI0NiAyMDUtNDUxIDQ1MS00NTEgMjU4IDAgNDYzIDIwNSA0NjMgNDUxeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+CjxnbHlwaCBnbHlwaC1uYW1lPSJzdWNjZXNzX2NpcmNsZSIgdW5pY29kZT0iJiN4ZWEwNzsiIGQ9Im01MDEgNzkxYy0yNDQgMC00NDItMTk4LTQ0Mi00NDIgMC0yNDMgMTk4LTQ0MSA0NDItNDQxczQ0MSAxOTcgNDQxIDQ0MWMwIDI0NC0xOTggNDQyLTQ0MSA0NDJ6IG0wLTg0OWMtMjIzIDAtNDA0IDE4MC00MDQgNDAzIDAgMjIzIDE4MSA0MDMgNDA0IDQwMyAyMjIgMCA0MDMtMTgwIDQwMy00MDMgMC0yMjMtMTgxLTQwMy00MDMtNDAzeiBtMjE0IDU1MGwtMjY2LTIyMWMtOC03LTIyLTctMzAtMWwtOTYgNzNjLTggNy0yMCA1LTI2LTNsLTMtNGMtNi05LTUtMjIgMi0zMGwxMjUtMTI4YzctOCAxOS04IDI3LTFsMjkzIDI4OWM3IDcgOCAxOCAxIDI2LTggNy0yMCA3LTI3IDB6IG0yNiAxYzAgMCAxLTEgMS0xIDAgMCAxLTEgMS0xbC0yIDJ6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KPGdseXBoIGdseXBoLW5hbWU9InN1Y2Nlc3Nfbm9fY2lyY2xlIiB1bmljb2RlPSImI3hlYTA4OyIgZD0ibTYxIDI4NWMtMTQgMTQtMTggNDAtOSA1OGw2IDExYzggMTggMjggMjMgNDQgMTFsMjAzLTE0N2MxNi0xMSA0MS0xMSA1NiAybDU0MSA0NDZjMTUgMTIgMzkgMTEgNTMtM2wtMTMgMTNjMTQtMTQgMTQtMzcgMC01MWwtNTgzLTU5MWMtMTQtMTQtMzYtMTQtNTAtMWwtMjQ4IDI1MnoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0id2FpdGluZyIgdW5pY29kZT0iJiN4ZWEwOTsiIGQ9Im00OTQgODAyYy0yNDQgMC00NDYtMjAyLTQ0Ni00NTggMC0yNDQgMjAyLTQ0NiA0NDYtNDQ2IDI1NiAwIDQ1OCAyMDIgNDU4IDQ0NiAwIDI1Ni0yMDIgNDU4LTQ1OCA0NTh6IG0yNTUtNTUxaC0yOTR2MzM0aDQ1di0yODloMjQ5di00NXoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0id2FpdGluZ19jaXJjbGUiIHVuaWNvZGU9IiYjeGVhMGE7IiBkPSJtNzQxIDQ5M2MwIDAgMS0xIDEtMSAwIDAgMS0xIDEtMWwtMiAyeiBtLTI0MCAyOThjLTI0NCAwLTQ0Mi0xOTgtNDQyLTQ0MiAwLTI0MyAxOTgtNDQxIDQ0Mi00NDFzNDQxIDE5NyA0NDEgNDQxYzAgMjQ0LTE5OCA0NDItNDQxIDQ0MnogbTAtODQ5Yy0yMjMgMC00MDQgMTgwLTQwNCA0MDMgMCAyMjMgMTgxIDQwMyA0MDQgNDAzIDIyMiAwIDQwMy0xODAgNDAzLTQwMyAwLTIyMy0xODEtNDAzLTQwMy00MDN6IG0tNDYgNTYxaC0zNnYtMjUzaDI1M3YzNmgtMjE3eiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+CjxnbHlwaCBnbHlwaC1uYW1lPSJ3YXJuIiB1bmljb2RlPSImI3hlYTBiOyIgZD0ibTQ5NCA4MTNjLTI1MCAwLTQ1Ny0yMDctNDU3LTQ2OSAwLTI1MCAyMDctNDU3IDQ1Ny00NTcgMjYyIDAgNDY5IDIwNyA0NjkgNDU3IDAgMjYyLTIwNyA0NjktNDY5IDQ2OXogbS0yMS0yMzZoNTRjMTAgMCAxOC04IDE4LTE4bC0xNC0zMDFjMC01LTUtMTAtMTAtMTBoLTQyYy01IDAtOSA1LTEwIDEwbC0xMyAzMDBjLTEgMTAgNyAxOSAxNyAxOXogbTI3LTQ3MmMtMjUgMC00NSAyMC00NSA0NSAwIDI1IDIwIDQ2IDQ1IDQ2IDI1IDAgNDUtMjEgNDUtNDYgMC0yNS0yMC00NS00NS00NXoiIGhvcml6LWFkdi14PSIxMDAwIiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0iaW5mb19jaXJjbGUiIHVuaWNvZGU9IiYjeGVhMGM7IiBkPSJtNTAwIDUyMmMzMiAwIDU3IDI2IDU3IDU4IDAgMzEtMjUgNTctNTcgNTctMzIgMC01Ny0yNi01Ny01NyAwLTMyIDI1LTU4IDU3LTU4eiBtNTctNTdoLTE0M3YtMjloNTd2LTMxNmgtNTd2LTI4aDIwMXYyOGgtNTh2MzQ1eiBtLTQzIDM0NGMtMjY4IDAtNDczLTIwNS00NzMtNDczIDAtMjQwIDIwNS00NDUgNDczLTQ0NSAyNDAgMCA0NDUgMjA1IDQ0NSA0NDUgMCAyNjgtMjA1IDQ3My00NDUgNDczeiBtLTE0LTg2MWMtMjIyIDAtNDAyIDE4MC00MDIgNDAyIDAgMjIyIDE4MCA0MDIgNDAyIDQwMiAyMjIgMCA0MDItMTgwIDQwMi00MDIgMC0yMjItMTgwLTQwMi00MDItNDAyeiIgaG9yaXotYWR2LXg9IjEwMDAiIC8+CjxnbHlwaCBnbHlwaC1uYW1lPSJjYW5jZWwiIHVuaWNvZGU9IiYjeGVhMGQ7IiBkPSJtNjU0IDUzMmwtMTU0LTE1NC0xNTQgMTU0LTI4LTI4IDE1NC0xNTQtMTU0LTE1NCAyOC0yOCAxNTQgMTU0IDE1NC0xNTQgMjggMjgtMTU0IDE1NCAxNTQgMTU0eiBtLTE1NCAyNTNjLTI0MCAwLTQzNS0xOTUtNDM1LTQzNSAwLTI0MCAxOTUtNDM1IDQzNS00MzUgMjQwIDAgNDM1IDE5NSA0MzUgNDM1IDAgMjQwLTE5NSA0MzUtNDM1IDQzNXogbTAtODMxYy0yMTggMC0zOTUgMTc4LTM5NSAzOTYgMCAyMTggMTc3IDM5NiAzOTUgMzk2IDIxOCAwIDM5Ni0xNzggMzk2LTM5NiAwLTIxOC0xNzgtMzk2LTM5Ni0zOTZ6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KPGdseXBoIGdseXBoLW5hbWU9InNlYXJjaCIgdW5pY29kZT0iJiN4ZWEwZTsiIGQ9Im02NTMgMTQwYy02OS01Ni0xNTctOTAtMjUzLTkwLTIyMSAwLTQwMCAxNzktNDAwIDQwMHMxNzkgNDAwIDQwMCA0MDAgNDAwLTE3OSA0MDAtNDAwYzAtOTYtMzQtMTg0LTkwLTI1M2wyOTAtMjkxLTU2LTU2LTI5MSAyOTB6IG0tMjUzLTEwYzE3NyAwIDMyMCAxNDMgMzIwIDMyMHMtMTQzIDMyMC0zMjAgMzIwLTMyMC0xNDMtMzIwLTMyMCAxNDMtMzIwIDMyMC0zMjB6IiBob3Jpei1hZHYteD0iMTAwMCIgLz4KPC9mb250Pgo8L2RlZnM+Cjwvc3ZnPg==) format('svg')}[class*=" weui_icon_"]:before,[class^=weui_icon_]:before{font-family:weui;font-style:normal;font-weight:400;speak:none;display:inline-block;vertical-align:middle;text-decoration:inherit;width:1em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin:0}.weui_btn,.weui_dialog_ft a{text-decoration:none;-webkit-tap-highlight-color:transparent}.weui_icon_circle:before{content:"\EA01"}.weui_icon_download:before{content:"\EA02"}.weui_icon_info:before{content:"\EA03"}.weui_icon_safe_success:before{content:"\EA04"}.weui_icon_safe_warn:before{content:"\EA05"}.weui_icon_success:before{content:"\EA06";font-size:23px;color:#09BB07}.weui_icon_success_circle:before{content:"\EA07"}.weui_icon_success_no_circle:before{content:"\EA08"}.weui_icon_waiting:before{content:"\EA09";font-size:23px;color:#10AEFF}.weui_icon_waiting_circle:before{content:"\EA0A"}.weui_icon_warn:before{content:"\EA0B";font-size:23px;color:#F43530}.weui_icon_info_circle:before{content:"\EA0C"}.weui_icon_cancel:before{content:"\EA0D"}.weui_icon_info:before{font-size:23px;color:#10AEFF}.weui_icon_success_circle:before,.weui_icon_success_no_circle:before{font-size:23px;color:#09BB07}.weui_icon_waiting_circle:before{font-size:23px;color:#10AEFF}.weui_icon_circle:before{font-size:23px;color:#C9C9C9}.weui_icon_download:before,.weui_icon_info_circle:before{font-size:23px;color:#09BB07}.weui_icon_safe_success:before{color:#09BB07}.weui_icon_safe_warn:before{color:#FFBE00}.weui_icon_cancel:before{color:#F43530;font-size:22px}.weui_icon_search:before{content:"\EA0E";color:#B2B2B2;font-size:14px}.weui_icon_msg:before,.weui_icon_safe:before{font-size:104px}.weui_icon_warn.weui_icon_msg:before{color:#F76260}.weui_btn.weui_btn_mini{line-height:1.9;font-size:14px;padding:0 .75em;display:inline-block}button.weui_btn,input.weui_btn{width:100%;border-width:0;outline:0;-webkit-appearance:none}button.weui_btn:focus,input.weui_btn:focus{outline:0}button.weui_btn_inline,button.weui_btn_mini,input.weui_btn_inline,input.weui_btn_mini{width:auto}.weui_btn+.weui_btn{margin-top:15px}.weui_btn.weui_btn_inline+.weui_btn.weui_btn_inline{margin-top:auto;margin-left:15px}.weui_btn_area{margin:1.17647059em 15px .3em}.weui_btn_area.weui_btn_area_inline{-webkit-display:-webkit-box;-webkit-display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex}.weui_btn_area.weui_btn_area_inline .weui_btn{margin-top:auto;margin-right:15px;width:100%;-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1}.weui_btn_area.weui_btn_area_inline .weui_btn:last-child{margin-right:0}.weui_btn{position:relative;display:block;margin-left:auto;margin-right:auto;padding-left:14px;padding-right:14px;font-size:18px;text-align:center;color:#FFF;line-height:2.33333333;border-radius:5px;overflow:hidden}.weui_btn:after,.weui_cell:before{content:" ";position:absolute}.weui_btn:after{width:200%;height:200%;top:0;left:0;border:1px solid rgba(0,0,0,.2);-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;border-radius:10px}.weui_btn.weui_btn_inline{display:inline-block}.weui_btn_default{background-color:#F7F7F7;color:#454545}.weui_btn_default:not(.weui_btn_disabled):visited{color:#454545}.weui_btn_default:not(.weui_btn_disabled):active{color:#A1A1A1;background-color:#DEDEDE}.weui_btn_primary{background-color:#04BE02}.weui_btn_primary:not(.weui_btn_disabled):visited{color:#FFF}.weui_btn_primary:not(.weui_btn_disabled):active{color:rgba(255,255,255,.4);background-color:#039702}.weui_btn_warn{background-color:#EF4F4F}.weui_btn_warn:not(.weui_btn_disabled):visited{color:#FFF}.weui_btn_warn:not(.weui_btn_disabled):active{color:rgba(255,255,255,.4);background-color:#C13E3E}.weui_btn_disabled{color:rgba(255,255,255,.6)}.weui_btn_disabled.weui_btn_default{color:#C9C9C9}.weui_btn_plain_primary{color:#04BE02;border:1px solid #04BE02}button.weui_btn_plain_primary,input.weui_btn_plain_primary{border-width:1px;background-color:transparent}.weui_btn_plain_primary:active{border-color:#039702}.weui_btn_plain_primary:after{border-width:0}.weui_btn_plain_default{color:#5A5A5A;border:1px solid #5A5A5A}button.weui_btn_plain_default,input.weui_btn_plain_default{border-width:1px;background-color:transparent}.weui_btn_plain_default:after{border-width:0}.weui_cell:before,.weui_cells:before{top:0;border-top:1px solid #D9D9D9;-webkit-transform:scaleY(.5);-ms-transform:scaleY(.5)}.weui_cell:before{width:100%;height:1px;color:#D9D9D9;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;transform:scaleY(.5);left:15px}.weui_cells:before,.weui_grids:before{-webkit-transform-origin:0 0;-ms-transform-origin:0 0}.weui_cell:first-child:before{display:none}.weui_cells{margin-top:1.17647059em;background-color:#FFF;line-height:1.41176471;font-size:17px;overflow:hidden;position:relative}.weui_cells_access .weui_cell:not(.no_access):active,.weui_cells_checkbox .weui_cell:active,.weui_cells_radio .weui_cell:active{background-color:#ECECEC}.weui_cells_tips,.weui_cells_title{padding-left:15px;padding-right:15px;font-size:14px}.weui_cells:after,.weui_cells:before{position:absolute;left:0;width:100%;height:1px;color:#D9D9D9;content:" "}.weui_cells:before{transform-origin:0 0;transform:scaleY(.5)}.weui_cells:after{bottom:0;border-bottom:1px solid #D9D9D9;-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);-ms-transform:scaleY(.5);transform:scaleY(.5)}.weui_cells_title{margin-top:.77em;margin-bottom:.3em;color:#888}.weui_cells_title+.weui_cells{margin-top:0}.weui_cells_tips{margin-top:.3em;color:#888}.weui_cell{padding:10px 15px;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.weui_cell_ft{text-align:right;color:#888}.weui_cell_primary{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.weui_cells_access .weui_cell:not(.no_access){-webkit-tap-highlight-color:transparent}.weui_cells_access a.weui_cell{color:inherit}.weui_cells_access .weui_cell_ft:after{content:" ";display:inline-block;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);height:6px;width:6px;border-width:2px 2px 0 0;border-color:#C8C8CD;border-style:solid;position:relative;top:-2px;top:-1px;margin-left:.3em}.weui_check_label{-webkit-tap-highlight-color:transparent}.weui_check{position:absolute;left:-9999em}.weui_cells_radio .weui_cell_ft{padding-left:.35em}.weui_cells_radio .weui_check:checked+.weui_icon_checked:before{content:'\EA08';color:#09BB07;font-size:16px}.weui_cells_checkbox .weui_cell_hd{padding-right:.35em}.weui_cells_checkbox .weui_icon_checked:before{content:'\EA01';color:#C9C9C9;font-size:23px;display:block}.weui_cells_checkbox .weui_check:checked+.weui_icon_checked:before{content:'\EA06';color:#09BB07}.weui_input,.weui_textarea{border:0;color:inherit;outline:0}.weui_label{display:block;width:3em}.weui_input{width:100%;background-color:transparent;font-size:inherit;height:1.41176471em;line-height:1.41176471}.weui_input::-webkit-inner-spin-button,.weui_input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.weui_textarea{display:block;resize:none;width:100%;font-size:1em;line-height:inherit}.weui_textarea_counter{color:#B2B2B2;text-align:right}.weui_dialog,.weui_grid_label,.weui_msg,.weui_toptips{text-align:center}.weui_cell_warn .weui_textarea_counter{color:#E64340}.weui_toptips{display:none;position:fixed;-webkit-transform:translateZ(0);width:100%;top:0;line-height:2.3;font-size:14px;color:#FFF;z-index:2}.weui_toptips.weui_warn{background-color:#E64340}.weui_cells_form .weui_cell_warn{color:#E64340}.weui_cells_form .weui_cell_warn .weui_icon_warn{display:inline-block}.weui_cells_form .weui_cell_hd{padding-right:.3em}.weui_cells_form .weui_cell_ft{font-size:0}.weui_cells_form .weui_icon_warn{display:none}.weui_cell_select .weui_cell_bd:after,.weui_select_before .weui_cell_hd:before{content:" ";display:inline-block;margin-top:-3px}.weui_cell_select{padding:0}.weui_select,.weui_select_after,.weui_select_before .weui_cell_bd{padding-left:15px}.weui_cell_select .weui_select{padding-right:30px}.weui_cell_select .weui_cell_bd:after{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);height:6px;width:6px;border-width:2px 2px 0 0;border-color:#C8C8CD;border-style:solid;position:absolute;top:50%;right:15px}.weui_grid:before,.weui_select_before .weui_cell_hd:after{-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%}.weui_select,.weui_select_before .weui_cell_hd{position:relative}.weui_select{border:0;outline:0;background-color:transparent;width:100%;font-size:inherit;height:44px;z-index:1}.weui_select_before{padding-right:15px}.weui_select_before .weui_select{width:auto}.weui_select_before .weui_cell_hd:after{content:" ";position:absolute;right:0;top:0;width:1px;height:100%;border-right:1px solid #D9D9D9;color:#D9D9D9;transform-origin:0 100%;-webkit-transform:scaleX(.5);-ms-transform:scaleX(.5);transform:scaleX(.5)}.weui_select_before .weui_cell_hd:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);height:6px;width:6px;border-width:2px 2px 0 0;border-color:#C8C8CD;border-style:solid;position:absolute;top:50%;right:15px}.weui_select_before .weui_cell_bd:after{display:none}.weui_vcode{padding-top:0;padding-right:0;padding-bottom:0}.weui_vcode .weui_cell_ft img{margin-left:5px;height:44px;vertical-align:middle}.weui_cell_switch{padding-top:6px;padding-bottom:6px}.weui_switch{-moz-appearance:none;appearance:none;position:relative;width:52px;height:32px;border:1px solid #DFDFDF;outline:0;border-radius:16px;background:#DFDFDF}.weui_switch:after,.weui_switch:before{position:absolute;height:30px;border-radius:15px;top:0;left:0;content:" "}.weui_switch:before{width:50px;background-color:#FDFDFD;-webkit-transition:-webkit-transform .3s;transition:transform .3s}.weui_switch:after{width:30px;background-color:#FFF;box-shadow:0 1px 3px rgba(0,0,0,.4);-webkit-transition:-webkit-transform .3s;transition:transform .3s}.weui_switch:checked{border-color:#04BE02;background-color:#04BE02}.weui_switch:checked:before{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.weui_switch:checked:after{-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}.weui_uploader_hd{padding-top:0;padding-right:0;padding-left:0}.weui_uploader_hd .weui_cell_ft{font-size:1em}.weui_uploader_bd{margin-bottom:-4px;margin-right:-9px;overflow:hidden}.weui_uploader_file,.weui_uploader_input_wrp{margin-right:9px;margin-bottom:9px;float:left}.weui_uploader_files{list-style:none}.weui_uploader_file{width:79px;height:79px;background:center center no-repeat;background-size:cover}.weui_uploader_status{position:relative}.weui_uploader_status:before{content:" ";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.5)}.weui_uploader_status .weui_uploader_status_content{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#FFF}.weui_uploader_status .weui_icon_warn{display:block}.weui_uploader_input_wrp{position:relative;width:77px;height:77px;border:1px solid #D9D9D9}.weui_uploader_input_wrp:after,.weui_uploader_input_wrp:before{content:" ";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#D9D9D9}.weui_uploader_input_wrp:before{width:2px;height:39.5px}.weui_uploader_input_wrp:after{width:39.5px;height:2px}.weui_uploader_input_wrp:active{border-color:#999}.weui_uploader_input_wrp:active:after,.weui_uploader_input_wrp:active:before{background-color:#999}.weui_uploader_input{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0;-webkit-tap-highlight-color:transparent}.weui_msg{padding-top:36px}.weui_msg .weui_icon_area{margin-bottom:30px}.weui_msg .weui_text_area{margin-bottom:25px;padding:0 20px}.weui_msg .weui_msg_title{margin-bottom:5px;font-weight:400;font-size:20px}.weui_msg .weui_msg_desc{font-size:14px;color:#888}.weui_msg .weui_opr_area{margin-bottom:25px}.weui_msg .weui_extra_area{margin-bottom:15px;font-size:14px;color:#888}.weui_msg .weui_extra_area a{color:#61749B}@media screen and (min-height:438px){.weui_extra_area{position:fixed;left:0;bottom:0;width:100%;text-align:center}}.weui_article{padding:20px 15px;font-size:15px}.weui_article section{margin-bottom:1.5em}.weui_article h1{font-size:17px;font-weight:400;margin-bottom:.75em}.weui_article h2{font-size:16px;font-weight:400;margin-bottom:.3em}.weui_article h3{font-weight:400;font-size:15px}.weui_progress{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.weui_progress_bar{background-color:#EBEBEB;height:3px;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.weui_progress_inner_bar{width:0;height:100%;background-color:#09BB07}.weui_progress_opr{display:block;margin-left:15px;font-size:0}.weui_grids{position:relative;overflow:hidden}.weui_grids:after,.weui_grids:before{content:" ";position:absolute;color:#D9D9D9;top:0;left:0}.weui_grids:before{width:100%;height:1px;border-top:1px solid #D9D9D9;transform-origin:0 0;-webkit-transform:scaleY(.5);-ms-transform:scaleY(.5);transform:scaleY(.5)}.weui_dialog_ft:after,.weui_grids:after{-webkit-transform-origin:0 0;-ms-transform-origin:0 0}.weui_grids:after{width:1px;height:100%;border-left:1px solid #D9D9D9;transform-origin:0 0;-webkit-transform:scaleX(.5);-ms-transform:scaleX(.5);transform:scaleX(.5)}.weui_grid{position:relative;float:left;padding:20px 10px;width:33.33333333%}.weui_grid:after,.weui_grid:before{content:" ";position:absolute;color:#D9D9D9}.weui_grid:before{top:0;width:1px;height:100%;border-right:1px solid #D9D9D9;transform-origin:0 100%;-webkit-transform:scaleX(.5);-ms-transform:scaleX(.5);transform:scaleX(.5);right:-1px}.weui_grid:after{left:0;bottom:0;width:100%;height:1px;border-bottom:1px solid #D9D9D9;-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);-ms-transform:scaleY(.5);transform:scaleY(.5)}.weui_grid:active{background-color:#E4E4E4}.weui_grid_icon{width:28px;height:28px;margin:0 auto}.weui_grid_icon img{display:block;width:100%;height:100%}.weui_grid_icon+.weui_grid_label{margin-top:5px}.weui_grid_label{display:block;color:#000;font-size:14px}.weui_dialog{position:fixed;z-index:13;width:85%;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#FAFAFC;border-radius:3px}.weui_dialog_confirm .weui_dialog .weui_dialog_hd{padding:1.2em 20px .5em}.weui_dialog_confirm .weui_dialog .weui_dialog_bd{text-align:left}.weui_dialog_hd{padding:1.2em 0 .5em}.weui_dialog_title{font-weight:400;font-size:17px}.weui_dialog_bd{padding:0 20px;font-size:15px;color:#888}.weui_dialog_ft{position:relative;line-height:42px;margin-top:20px;font-size:17px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.weui_dialog_ft a{display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;color:#3CC51F}.weui_dialog_confirm .weui_dialog_ft a:after,.weui_dialog_ft:after{content:" ";left:0;top:0;color:#D5D5D6}.weui_dialog_ft a:active{background-color:#EEE}.weui_dialog_ft:after{position:absolute;width:100%;height:1px;border-top:1px solid #D5D5D6;transform-origin:0 0;-webkit-transform:scaleY(.5);-ms-transform:scaleY(.5);transform:scaleY(.5)}.weui_dialog_confirm .weui_dialog_ft a{position:relative}.weui_dialog_confirm .weui_dialog_ft a:after{position:absolute;width:1px;height:100%;border-left:1px solid #D5D5D6;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);-ms-transform:scaleX(.5);transform:scaleX(.5)}.weui_dialog_confirm .weui_dialog_ft a:first-child:after{display:none}.weui_btn_dialog.default{color:#353535}.weui_btn_dialog.primary{color:#0BB20C}@media screen and (min-width:1024px){.weui_dialog{width:35%}}.weui_toast{position:fixed;z-index:3;width:7.6em;min-height:7.6em;top:180px;left:50%;margin-left:-3.8em;background:rgba(40,40,40,.75);text-align:center;border-radius:5px;color:#FFF}.weui_icon_toast{margin:22px 0 0;display:block}.weui_icon_toast:before{content:'\EA08';color:#FFF;font-size:55px}.weui_toast_content{margin:0 0 15px}.weui_loading_toast .weui_toast_content{margin-top:64%;font-size:14px}.weui_loading{position:absolute;width:0;z-index:2000000000;left:50%;top:38%}.weui_loading_leaf{position:absolute;top:-1px;opacity:.25}.weui_loading_leaf:before{content:" ";position:absolute;width:8.14px;height:3.08px;background:#d1d1d5;box-shadow:rgba(0,0,0,.0980392) 0 0 1px;border-radius:1px;-webkit-transform-origin:left 50% 0;-ms-transform-origin:left 50% 0;transform-origin:left 50% 0}.weui_mask,.weui_mask_transition,.weui_mask_transparent{z-index:1;height:100%;position:fixed;left:0;top:0;width:100%}.weui_loading_leaf_0{-webkit-animation:opacity-60-25-0-12 1.25s linear infinite;animation:opacity-60-25-0-12 1.25s linear infinite}.weui_loading_leaf_0:before{-webkit-transform:rotate(0) translate(7.92px,0);-ms-transform:rotate(0) translate(7.92px,0);transform:rotate(0) translate(7.92px,0)}.weui_loading_leaf_1{-webkit-animation:opacity-60-25-1-12 1.25s linear infinite;animation:opacity-60-25-1-12 1.25s linear infinite}.weui_loading_leaf_1:before{-webkit-transform:rotate(30deg) translate(7.92px,0);-ms-transform:rotate(30deg) translate(7.92px,0);transform:rotate(30deg) translate(7.92px,0)}.weui_loading_leaf_2{-webkit-animation:opacity-60-25-2-12 1.25s linear infinite;animation:opacity-60-25-2-12 1.25s linear infinite}.weui_loading_leaf_2:before{-webkit-transform:rotate(60deg) translate(7.92px,0);-ms-transform:rotate(60deg) translate(7.92px,0);transform:rotate(60deg) translate(7.92px,0)}.weui_loading_leaf_3{-webkit-animation:opacity-60-25-3-12 1.25s linear infinite;animation:opacity-60-25-3-12 1.25s linear infinite}.weui_loading_leaf_3:before{-webkit-transform:rotate(90deg) translate(7.92px,0);-ms-transform:rotate(90deg) translate(7.92px,0);transform:rotate(90deg) translate(7.92px,0)}.weui_loading_leaf_4{-webkit-animation:opacity-60-25-4-12 1.25s linear infinite;animation:opacity-60-25-4-12 1.25s linear infinite}.weui_loading_leaf_4:before{-webkit-transform:rotate(120deg) translate(7.92px,0);-ms-transform:rotate(120deg) translate(7.92px,0);transform:rotate(120deg) translate(7.92px,0)}.weui_loading_leaf_5{-webkit-animation:opacity-60-25-5-12 1.25s linear infinite;animation:opacity-60-25-5-12 1.25s linear infinite}.weui_loading_leaf_5:before{-webkit-transform:rotate(150deg) translate(7.92px,0);-ms-transform:rotate(150deg) translate(7.92px,0);transform:rotate(150deg) translate(7.92px,0)}.weui_loading_leaf_6{-webkit-animation:opacity-60-25-6-12 1.25s linear infinite;animation:opacity-60-25-6-12 1.25s linear infinite}.weui_loading_leaf_6:before{-webkit-transform:rotate(180deg) translate(7.92px,0);-ms-transform:rotate(180deg) translate(7.92px,0);transform:rotate(180deg) translate(7.92px,0)}.weui_loading_leaf_7{-webkit-animation:opacity-60-25-7-12 1.25s linear infinite;animation:opacity-60-25-7-12 1.25s linear infinite}.weui_loading_leaf_7:before{-webkit-transform:rotate(210deg) translate(7.92px,0);-ms-transform:rotate(210deg) translate(7.92px,0);transform:rotate(210deg) translate(7.92px,0)}.weui_loading_leaf_8{-webkit-animation:opacity-60-25-8-12 1.25s linear infinite;animation:opacity-60-25-8-12 1.25s linear infinite}.weui_loading_leaf_8:before{-webkit-transform:rotate(240deg) translate(7.92px,0);-ms-transform:rotate(240deg) translate(7.92px,0);transform:rotate(240deg) translate(7.92px,0)}.weui_loading_leaf_9{-webkit-animation:opacity-60-25-9-12 1.25s linear infinite;animation:opacity-60-25-9-12 1.25s linear infinite}.weui_loading_leaf_9:before{-webkit-transform:rotate(270deg) translate(7.92px,0);-ms-transform:rotate(270deg) translate(7.92px,0);transform:rotate(270deg) translate(7.92px,0)}.weui_loading_leaf_10{-webkit-animation:opacity-60-25-10-12 1.25s linear infinite;animation:opacity-60-25-10-12 1.25s linear infinite}.weui_loading_leaf_10:before{-webkit-transform:rotate(300deg) translate(7.92px,0);-ms-transform:rotate(300deg) translate(7.92px,0);transform:rotate(300deg) translate(7.92px,0)}.weui_loading_leaf_11{-webkit-animation:opacity-60-25-11-12 1.25s linear infinite;animation:opacity-60-25-11-12 1.25s linear infinite}.weui_loading_leaf_11:before{-webkit-transform:rotate(330deg) translate(7.92px,0);-ms-transform:rotate(330deg) translate(7.92px,0);transform:rotate(330deg) translate(7.92px,0)}@-webkit-keyframes opacity-60-25-0-12{0%,0.01%{opacity:.25}0.02%{opacity:1}100%,60.01%{opacity:.25}}@-webkit-keyframes opacity-60-25-1-12{0%,8.34333%{opacity:.25}8.35333%{opacity:1}100%,68.3433%{opacity:.25}}@-webkit-keyframes opacity-60-25-2-12{0%,16.6767%{opacity:.25}16.6867%{opacity:1}100%,76.6767%{opacity:.25}}@-webkit-keyframes opacity-60-25-3-12{0%,25.01%{opacity:.25}25.02%{opacity:1}100%,85.01%{opacity:.25}}@-webkit-keyframes opacity-60-25-4-12{0%,33.3433%{opacity:.25}33.3533%{opacity:1}100%,93.3433%{opacity:.25}}@-webkit-keyframes opacity-60-25-5-12{0%{opacity:.270958333333333}41.6767%{opacity:.25}41.6867%{opacity:1}1.67667%{opacity:.25}100%{opacity:.270958333333333}}@-webkit-keyframes opacity-60-25-6-12{0%{opacity:.375125}50.01%{opacity:.25}50.02%{opacity:1}10.01%{opacity:.25}100%{opacity:.375125}}@-webkit-keyframes opacity-60-25-7-12{0%{opacity:.479291666666667}58.3433%{opacity:.25}58.3533%{opacity:1}18.3433%{opacity:.25}100%{opacity:.479291666666667}}@-webkit-keyframes opacity-60-25-8-12{0%{opacity:.583458333333333}66.6767%{opacity:.25}66.6867%{opacity:1}26.6767%{opacity:.25}100%{opacity:.583458333333333}}@-webkit-keyframes opacity-60-25-9-12{0%{opacity:.687625}75.01%{opacity:.25}75.02%{opacity:1}35.01%{opacity:.25}100%{opacity:.687625}}@-webkit-keyframes opacity-60-25-10-12{0%{opacity:.791791666666667}83.3433%{opacity:.25}83.3533%{opacity:1}43.3433%{opacity:.25}100%{opacity:.791791666666667}}@-webkit-keyframes opacity-60-25-11-12{0%{opacity:.895958333333333}91.6767%{opacity:.25}91.6867%{opacity:1}51.6767%{opacity:.25}100%{opacity:.895958333333333}}.weui_mask{background:rgba(0,0,0,.6)}.weui_mask_transition{display:none;background:0 0;-webkit-transition:background .3s;transition:background .3s}.weui_fade_toggle{background:rgba(0,0,0,.6)}.weui_actionsheet{position:fixed;left:0;bottom:0;-webkit-transform:translate(0,100%);-ms-transform:translate(0,100%);transform:translate(0,100%);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:2;width:100%;background-color:#EFEFF4;-webkit-transition:-webkit-transform .3s;transition:transform .3s}.weui_actionsheet_menu{background-color:#FFF}.weui_actionsheet_action{margin-top:6px;background-color:#FFF}.weui_actionsheet_cell{position:relative;padding:10px 0;text-align:center;font-size:18px}.weui_actionsheet_cell:before{content:" ";position:absolute;left:0;top:0;width:100%;height:1px;border-top:1px solid #D9D9D9;color:#D9D9D9;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);-ms-transform:scaleY(.5);transform:scaleY(.5)}.weui_actionsheet_cell:active{background-color:#ECECEC}.weui_actionsheet_cell:first-child:before{display:none}.weui_actionsheet_toggle{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)} \ No newline at end of file From a585d618f174e2bac23f12e624d29fa8e23ada13 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 21:49:22 +0800 Subject: [PATCH 024/423] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wechats/bind.html.erb | 29 +++++++++++++++----- app/views/wechats/login.html.erb | 46 +++++++++++++++++--------------- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/app/views/wechats/bind.html.erb b/app/views/wechats/bind.html.erb index e569162b2..755a2df4d 100644 --- a/app/views/wechats/bind.html.erb +++ b/app/views/wechats/bind.html.erb @@ -1,14 +1,31 @@ - + - Ruby China - - - + + + 绑定用户 + -

恭喜! 绑定成功.

+
+
+
+
+

操作成功

+

内容详情,可根据实际需要安排

+
+
+

+ 确定 + 取消 +

+
+ +
+
\ No newline at end of file diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index cbc476f26..f323b0a1d 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -1,12 +1,11 @@ - + - Ruby China - - - - - + + + 绑定用户 + +
@@ -14,27 +13,30 @@ <%= @wechat_bind_errors %>

+ + <%= form_tag(bind_wechat_path,:id=>'main_login_form',:method=>'post') do %> +
+
+
+
+ +
+
-
- <%= text_field_tag 'username', params[:username], :tabindex => '1' , - :class=>'loginSignBox',:placeholder=>'请输入邮箱地址或昵称', :onkeypress => "user_name_keypress(event);"%> - -
- <% if Setting.openid? %> -
- <%= text_field_tag "openid_url", nil, :tabindex => '3',:placeholder=>'请输入OpenId URL' %> +
+
+
+
- <% end %> -
- - <%= password_field_tag 'password', nil, :tabindex => '2',:class=>'loginSignBox' ,:placeholder=>'请输密码', :onkeypress => "user_name_keypress(event);"%> -
+
-
- <%= submit_tag '绑定' %> +
+ 确定 +
+
<% end %> From a5cc5d376142384518830d373b8f3afce17ae05f Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 21:52:36 +0800 Subject: [PATCH 025/423] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wechats/bind.html.erb | 2 +- app/views/wechats/login.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/wechats/bind.html.erb b/app/views/wechats/bind.html.erb index 755a2df4d..ab35351c4 100644 --- a/app/views/wechats/bind.html.erb +++ b/app/views/wechats/bind.html.erb @@ -4,7 +4,7 @@ 绑定用户 - + diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index f323b0a1d..a079ca6a0 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -4,7 +4,7 @@ 绑定用户 - +
From 9f49a20a698a8153480e1ac3b868b005fde29fca Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 21:55:50 +0800 Subject: [PATCH 026/423] =?UTF-8?q?=E5=81=9C=E7=94=A8miniprofiler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index d8d148ec3..95484139d 100644 --- a/Gemfile +++ b/Gemfile @@ -44,7 +44,7 @@ gem 'elasticsearch-rails' group :development do gem 'grape-swagger' gem 'better_errors', '~> 1.1.0' - gem 'rack-mini-profiler', '~> 0.9.3' + # gem 'rack-mini-profiler', '~> 0.9.3' if RUBY_PLATFORM =~ /w32/ gem 'win32console' end From e576b5a800f75fb8147bce7225efff4d8f855540 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 21:57:48 +0800 Subject: [PATCH 027/423] =?UTF-8?q?=E5=85=B3=E9=97=ADiphone=E9=A6=96?= =?UTF-8?q?=E5=AD=97=E5=A4=A7=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wechats/login.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index a079ca6a0..c305cd9d5 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -20,7 +20,7 @@
- +
From 7e18fe19be8f0db7d0655dc54a5f8d74e3ca425a Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 22:01:45 +0800 Subject: [PATCH 028/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=80=82=E5=90=88?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=9B=BE=E6=96=87=E7=9A=84=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/stylesheets/images/trustie_logo2.png | Bin 0 -> 106513 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/stylesheets/images/trustie_logo2.png diff --git a/public/stylesheets/images/trustie_logo2.png b/public/stylesheets/images/trustie_logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..bee75165ee5486e8f02070ebe283d7bc6b5bb4e6 GIT binary patch literal 106513 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

0;7E;D7HW>86uRH~UZ)4yb~7<768 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 Date: Wed, 20 Jan 2016 22:02:07 +0800 Subject: [PATCH 029/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=80=82=E5=90=88?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=9B=BE=E6=96=87=E7=9A=84=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 34dd2e79a..9f5d2ed04 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -126,7 +126,7 @@ class WechatsController < ActionController::Base end request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo1.png', url: 'http://www.baidu.com/' + article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo2.png', url: 'http://www.baidu.com/' end else openid = request[:FromUserName] @@ -135,7 +135,7 @@ class WechatsController < ActionController::Base uw = UserWechat.create!(attrs) news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo1.png', url: login_wechat_url(openid: uw.id) + article.item title: "#{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo2.png', url: login_wechat_url(openid: uw.id) end end end From 3df2a8a3cc701357d6f9c860d9284f0cc24dd284 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 22:03:18 +0800 Subject: [PATCH 030/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=80=82=E5=90=88?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=9B=BE=E6=96=87=E7=9A=84=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 9f5d2ed04..19644a624 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -126,7 +126,7 @@ class WechatsController < ActionController::Base end request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo2.png', url: 'http://www.baidu.com/' + article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', url: 'http://www.baidu.com/' end else openid = request[:FromUserName] @@ -135,7 +135,7 @@ class WechatsController < ActionController::Base uw = UserWechat.create!(attrs) news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{n[:title]}", description: n[:content], pic_url: 'https://www.trustie.net/images/trustie_logo2.png', url: login_wechat_url(openid: uw.id) + article.item title: "#{n[:title]}", description: n[:content], pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', url: login_wechat_url(openid: uw.id) end end end From 27c2e9eddc06b1b998447f76c81bfff023c1d8b3 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 22:05:19 +0800 Subject: [PATCH 031/423] =?UTF-8?q?=E6=98=AF=E5=90=A6=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 19644a624..78522d1ed 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -119,7 +119,7 @@ class WechatsController < ActionController::Base on :click, with: 'MY_NEWS' do |request, key| uw = user_binded?(request[:FromUserName]) - if uw + if uw && uw.user ua = UserActivity.where(user_id: uw.user.id).order("id desc").limit(5) news = ua.map do |ua| {title: "act_type: #{ua.act_type}, act_id: #{ua.act_id}", content: "container_id: #{ua.container_id}, container_type: #{ua.container_type}"} From 55b61e9e90f45f8b425387a0b52a5e8449982186 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 22:14:47 +0800 Subject: [PATCH 032/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0js=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wechats/bind.html.erb | 16 +++++++++++----- app/views/wechats/login.html.erb | 11 +++++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/app/views/wechats/bind.html.erb b/app/views/wechats/bind.html.erb index ab35351c4..29022043e 100644 --- a/app/views/wechats/bind.html.erb +++ b/app/views/wechats/bind.html.erb @@ -5,6 +5,15 @@ 绑定用户 + + + @@ -17,13 +26,10 @@

- +
diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index c305cd9d5..e6a936f4e 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -5,11 +5,18 @@ 绑定用户 + +
-

+

<%= @wechat_bind_errors %>

@@ -34,7 +41,7 @@
From 95070b7e838d3703e0d094246d5fe8e3ebfa3bcc Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 22:21:50 +0800 Subject: [PATCH 033/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0js=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wechats/bind.html.erb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/views/wechats/bind.html.erb b/app/views/wechats/bind.html.erb index 29022043e..ada22cd69 100644 --- a/app/views/wechats/bind.html.erb +++ b/app/views/wechats/bind.html.erb @@ -5,12 +5,9 @@ 绑定用户 - - @@ -22,7 +19,7 @@

操作成功

-

内容详情,可根据实际需要安排

+

您已成功绑定微信

From 02cf9b56e1e4acd8cb1476f8a7d757c572a12179 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 22:25:14 +0800 Subject: [PATCH 034/423] =?UTF-8?q?=E5=9B=BE=E7=89=87=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 78522d1ed..85b9ba5ba 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -121,12 +121,16 @@ class WechatsController < ActionController::Base uw = user_binded?(request[:FromUserName]) if uw && uw.user ua = UserActivity.where(user_id: uw.user.id).order("id desc").limit(5) + logo = "trustie_logo2.png" news = ua.map do |ua| - {title: "act_type: #{ua.act_type}, act_id: #{ua.act_id}", content: "container_id: #{ua.container_id}, container_type: #{ua.container_type}"} + {title: "act_type: #{ua.act_type}, act_id: #{ua.act_id}", + content: "container_id: #{ua.container_id}, container_type: #{ua.container_type}", + pic_url:"http://wechat.trustie.net/images/trustie_logo#{logo}.png" } + logo = "trustie_logo1.png" end request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', url: 'http://www.baidu.com/' + article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: n[:pic_url], url: 'http://www.baidu.com/' end else openid = request[:FromUserName] From a72339fe2c91888dae4dfd3d00a40cc3e3789b08 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 22:27:50 +0800 Subject: [PATCH 035/423] =?UTF-8?q?=E5=9B=BE=E7=89=87=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 85b9ba5ba..2bf75798f 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -125,12 +125,12 @@ class WechatsController < ActionController::Base news = ua.map do |ua| {title: "act_type: #{ua.act_type}, act_id: #{ua.act_id}", content: "container_id: #{ua.container_id}, container_type: #{ua.container_type}", - pic_url:"http://wechat.trustie.net/images/trustie_logo#{logo}.png" } + picurl: "http://wechat.trustie.net/images/#{logo}" } logo = "trustie_logo1.png" end request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: n[:pic_url], url: 'http://www.baidu.com/' + article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: n[:picurl], url: 'http://www.baidu.com/' end else openid = request[:FromUserName] From f644aa114492bd049d2e96233cd24998b6426c01 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 22:31:36 +0800 Subject: [PATCH 036/423] =?UTF-8?q?=E5=9B=BE=E7=89=87=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 2bf75798f..9ae28abcd 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -122,15 +122,19 @@ class WechatsController < ActionController::Base if uw && uw.user ua = UserActivity.where(user_id: uw.user.id).order("id desc").limit(5) logo = "trustie_logo2.png" + i = 0 news = ua.map do |ua| + i += 1 {title: "act_type: #{ua.act_type}, act_id: #{ua.act_id}", content: "container_id: #{ua.container_id}, container_type: #{ua.container_type}", - picurl: "http://wechat.trustie.net/images/#{logo}" } - logo = "trustie_logo1.png" + picurl: "http://wechat.trustie.net/images/#{i == 1 ? logo : 'trustie_logo1.png'}" } end request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: n[:picurl], url: 'http://www.baidu.com/' + article.item title: "#{index} #{n[:title]}", + description: n[:content], + pic_url: n[:picurl], + url: 'http://www.baidu.com/' end else openid = request[:FromUserName] @@ -139,7 +143,10 @@ class WechatsController < ActionController::Base uw = UserWechat.create!(attrs) news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{n[:title]}", description: n[:content], pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', url: login_wechat_url(openid: uw.id) + article.item title: "#{n[:title]}", + description: n[:content], + pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', + url: login_wechat_url(openid: uw.id) end end end From fce8d853806a4259de71dc414a8b682209bf48f3 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:15:22 +0800 Subject: [PATCH 037/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 51 ++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 9ae28abcd..06d3fae96 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -120,14 +120,23 @@ class WechatsController < ActionController::Base on :click, with: 'MY_NEWS' do |request, key| uw = user_binded?(request[:FromUserName]) if uw && uw.user - ua = UserActivity.where(user_id: uw.user.id).order("id desc").limit(5) + + ua = user_activity(uw.user) + logo = "trustie_logo2.png" i = 0 - news = ua.map do |ua| + news =[] + ua.each do |ua| i += 1 - {title: "act_type: #{ua.act_type}, act_id: #{ua.act_id}", - content: "container_id: #{ua.container_id}, container_type: #{ua.container_type}", - picurl: "http://wechat.trustie.net/images/#{i == 1 ? logo : 'trustie_logo1.png'}" } + activity = process_activity(ua) + if activity + news << {title: activity[0], + content: activity[1], + picurl: "http://wechat.trustie.net/images/#{i == 1 ? logo : activity[2]}", + url: activity[3] + } + end + end request.reply.news(news) do |article, n, index| # article is return object @@ -175,4 +184,36 @@ class WechatsController < ActionController::Base def user_binded?(openid) uw = UserWechat.where(openid: openid).first end + + def user_activity(user) + @user = user + shield_project_ids = ShieldActivity.where("container_type='User' and container_id=#{@user.id} and shield_type='Project'").map(&:shield_id) + shield_course_ids = ShieldActivity.where("container_type='User' and container_id=#{@user.id} and shield_type='Course'").map(&:shield_id) + @page = params[:page] ? params[:page].to_i + 1 : 0 + user_project_ids = (@user.projects.visible.map{|project| project.id}-shield_project_ids).empty? ? "(-1)" : "(" + (@user.projects.visible.map{|project| project.id}-shield_project_ids).join(",") + ")" + user_course_ids = (@user.courses.visible.map{|course| course.id}-shield_course_ids).empty? ? "(-1)" : "(" + (@user.courses.visible.map{|course| course.id}-shield_course_ids).join(",") + ")" + course_types = "('Message','News','HomeworkCommon','Poll','Course')" + project_types = "('Message','Issue','ProjectCreateInfo')" + principal_types = "JournalsForMessage" + + blog_ids = "("+@user.blog.id.to_s+","+((User.watched_by(@user.id).count == 0 )? '0' :User.watched_by(@user.id).map{|u| u.blog.id}.join(','))+")" + @user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" + + "or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+ + "or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{@user.id}) " + + "or (container_type = 'Blog' and act_type= 'BlogComment' and container_id in #{blog_ids})").order('updated_at desc').limit(10).offset(@page * 10) + + + end + + def process_activity(user_activity) + act= user_activity.act + case user_activity.container_type.to_s + when 'Course' + when 'Project' + case user_activity.act_type.to_s + when 'Issue' + [activity.project.name.to_s+" | 项目问题", activity.subject.to_s, project_issues_path(activity.project), url_to_avatar(activity.author)] + end + end + end end From 6d732ff5ff35650c5e9fa75171b63dcfd1a9fe4c Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:17:17 +0800 Subject: [PATCH 038/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 06d3fae96..9483043c8 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -122,13 +122,12 @@ class WechatsController < ActionController::Base if uw && uw.user ua = user_activity(uw.user) - logo = "trustie_logo2.png" i = 0 news =[] - ua.each do |ua| + ua.each do |a| i += 1 - activity = process_activity(ua) + activity = process_activity(a) if activity news << {title: activity[0], content: activity[1], From 4607d1a78d741c19eb3e39a77bfb251986f2c24e Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:18:21 +0800 Subject: [PATCH 039/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 9483043c8..475594687 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -211,7 +211,7 @@ class WechatsController < ActionController::Base when 'Project' case user_activity.act_type.to_s when 'Issue' - [activity.project.name.to_s+" | 项目问题", activity.subject.to_s, project_issues_path(activity.project), url_to_avatar(activity.author)] + [act.project.name.to_s+" | 项目问题", act.subject.to_s, project_issues_path(act.project), url_to_avatar(act.author)] end end end From c439d62a647e2c22682aead0ff5b8b84fc55ffd0 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:20:44 +0800 Subject: [PATCH 040/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 475594687..33939c140 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -1,6 +1,8 @@ class WechatsController < ActionController::Base wechat_responder + included ApplicationHelper + # default text responder when no other match on :text do |request, content| request.reply.text "echo: #{content}" # Just echo From 22a83bee0e1c99e46691f01adebe62887017ea0b Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:26:58 +0800 Subject: [PATCH 041/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 33939c140..e44f6acd0 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -1,7 +1,7 @@ class WechatsController < ActionController::Base wechat_responder - included ApplicationHelper + include ApplicationHelper # default text responder when no other match on :text do |request, content| From 472c6acf2b4989ca2650376cb5a284afd3bb3a73 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:29:22 +0800 Subject: [PATCH 042/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index e44f6acd0..e07e15d51 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -144,7 +144,7 @@ class WechatsController < ActionController::Base article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: n[:picurl], - url: 'http://www.baidu.com/' + url: n[:url] end else openid = request[:FromUserName] @@ -213,7 +213,7 @@ class WechatsController < ActionController::Base when 'Project' case user_activity.act_type.to_s when 'Issue' - [act.project.name.to_s+" | 项目问题", act.subject.to_s, project_issues_path(act.project), url_to_avatar(act.author)] + [act.project.name.to_s+" | 项目问题", act.subject.to_s, url_to_avatar(act.author),project_issues_url(act.project)] end end end From 74b643584fbfb45fc277bcab799c8e3e83e3e1c1 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:31:29 +0800 Subject: [PATCH 043/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index e07e15d51..025df5f78 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -144,7 +144,7 @@ class WechatsController < ActionController::Base article.item title: "#{index} #{n[:title]}", description: n[:content], pic_url: n[:picurl], - url: n[:url] + url: "https://www.turstie.net"+n[:url] end else openid = request[:FromUserName] From 9d33dcf2f38a7310e226c2ea33586b594e703dcf Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:32:43 +0800 Subject: [PATCH 044/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 025df5f78..0232551be 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -141,8 +141,8 @@ class WechatsController < ActionController::Base end request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{index} #{n[:title]}", - description: n[:content], + article.item title: "#{n[:content]}", + description: n[:title], pic_url: n[:picurl], url: "https://www.turstie.net"+n[:url] end From 6075f4478656bbd9582519f65f81bb4fb959395d Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:34:05 +0800 Subject: [PATCH 045/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 0232551be..a46ea368e 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -143,8 +143,8 @@ class WechatsController < ActionController::Base request.reply.news(news) do |article, n, index| # article is return object article.item title: "#{n[:content]}", description: n[:title], - pic_url: n[:picurl], - url: "https://www.turstie.net"+n[:url] + pic_url: "https://www.turstie.net#{n[:picurl]}", + url: n[:url] end else openid = request[:FromUserName] From 745b8399d1648e46fe3ed2033f85ceae5dd66bbb Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:38:40 +0800 Subject: [PATCH 046/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index a46ea368e..72717914c 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -124,7 +124,7 @@ class WechatsController < ActionController::Base if uw && uw.user ua = user_activity(uw.user) - logo = "trustie_logo2.png" + logo = "http://wechat.trustie.net/images/trustie_logo2.png" i = 0 news =[] ua.each do |a| @@ -133,7 +133,7 @@ class WechatsController < ActionController::Base if activity news << {title: activity[0], content: activity[1], - picurl: "http://wechat.trustie.net/images/#{i == 1 ? logo : activity[2]}", + picurl: "#{i == 1 ? logo : 'https://www.trustie.net'+activity[2]}", url: activity[3] } end @@ -143,7 +143,7 @@ class WechatsController < ActionController::Base request.reply.news(news) do |article, n, index| # article is return object article.item title: "#{n[:content]}", description: n[:title], - pic_url: "https://www.turstie.net#{n[:picurl]}", + pic_url: "#{n[:picurl]}", url: n[:url] end else From 769b044df5784c32b268e36ff24be17dd014ea1e Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 20 Jan 2016 23:39:47 +0800 Subject: [PATCH 047/423] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 72717914c..eeb3a8455 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -133,7 +133,7 @@ class WechatsController < ActionController::Base if activity news << {title: activity[0], content: activity[1], - picurl: "#{i == 1 ? logo : 'https://www.trustie.net'+activity[2]}", + picurl: "#{i == 1 ? logo : 'https://www.trustie.net/'+activity[2]}", url: activity[3] } end From 0ab579af98b32e6e3a9d176a7b05009c65a418e1 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sun, 28 Feb 2016 22:22:10 +0800 Subject: [PATCH 048/423] =?UTF-8?q?=E8=AE=A2=E9=98=85=E6=97=B6=E5=8F=91?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 29 ++++++++++++++++----------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index eeb3a8455..b6b6cc237 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -23,7 +23,7 @@ class WechatsController < ActionController::Base end on :event, with: 'subscribe' do |request| - request.reply.text "#{request[:FromUserName]} subscribe now" + sendBind end # When unsubscribe user scan qrcode qrscene_xxxxxx to subscribe in public account @@ -147,17 +147,22 @@ class WechatsController < ActionController::Base url: n[:url] end else - openid = request[:FromUserName] - attrs = wechat.user(openid) - UserWechat.delete_all(openid: openid) - uw = UserWechat.create!(attrs) - news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } - request.reply.news(news) do |article, n, index| # article is return object - article.item title: "#{n[:title]}", - description: n[:content], - pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', - url: login_wechat_url(openid: uw.id) - end + sendBind + end + end + + def sendBind + openid = request[:FromUserName] + attrs = wechat.user(openid) + UserWechat.delete_all(openid: openid) + uw = UserWechat.create!(attrs) + news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } + request.reply.news(news) do |article, n, index| # article is return object + url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{self.corpid}&redirect_uri=#{login_wechat_url(uid: uw.id)}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect" + article.item title: "#{n[:title]}", + description: n[:content], + pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', + url: url end end From 35f9dc6e77b80dd9d6b031accfaf3b734b776e55 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sun, 28 Feb 2016 22:28:44 +0800 Subject: [PATCH 049/423] =?UTF-8?q?=E4=BC=A0request=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index b6b6cc237..ea51059df 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -23,7 +23,7 @@ class WechatsController < ActionController::Base end on :event, with: 'subscribe' do |request| - sendBind + sendBind(request) end # When unsubscribe user scan qrcode qrscene_xxxxxx to subscribe in public account @@ -147,11 +147,11 @@ class WechatsController < ActionController::Base url: n[:url] end else - sendBind + sendBind(request) end end - def sendBind + def sendBind(request) openid = request[:FromUserName] attrs = wechat.user(openid) UserWechat.delete_all(openid: openid) From 60b35a46cea7eb8ddd4d1d44d9b5b3c2ee1e312a Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 14:05:18 +0800 Subject: [PATCH 050/423] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=BC=81=E4=B8=9Aid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index ea51059df..0429ebd91 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -158,7 +158,7 @@ class WechatsController < ActionController::Base uw = UserWechat.create!(attrs) news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } request.reply.news(news) do |article, n, index| # article is return object - url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{self.corpid}&redirect_uri=#{login_wechat_url(uid: uw.id)}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect" + url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.corpid}&redirect_uri=#{login_wechat_url(uid: uw.id)}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect" article.item title: "#{n[:title]}", description: n[:content], pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', From 8f5645e5c1b18c7f40908756d8a93601791a6683 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 14:32:10 +0800 Subject: [PATCH 051/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9wechat=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/wechat.yml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/config/wechat.yml b/config/wechat.yml index 20b6382c3..98941c578 100644 --- a/config/wechat.yml +++ b/config/wechat.yml @@ -12,19 +12,7 @@ default: &default jsapi_ticket: "C:/Users/[user_name]/wechat_jsapi_ticket" production: - corpid: <%= ENV['WECHAT_CORPID'] %> - corpsecret: <%= ENV['WECHAT_CORPSECRET'] %> - agentid: <%= ENV['WECHAT_AGENTID'] %> -# Or if using public account, only need above two line -# appid: -# secret: - token: <%= ENV['WECHAT_TOKEN'] %> - timeout: 30, - skip_verify_ssl: true - access_token: <%= ENV['WECHAT_ACCESS_TOKEN'] %> - encrypt_mode: false # if true must fill encoding_aes_key - encoding_aes_key: <%= ENV['WECHAT_ENCODING_AES_KEY'] %> - jsapi_ticket: + <<: *default development: <<: *default From a7220a535eed78ff9730371ab3c004e306a6f04b Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 14:33:36 +0800 Subject: [PATCH 052/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9wechat=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/wechat.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/wechat.yml b/config/wechat.yml index 98941c578..5b528487b 100644 --- a/config/wechat.yml +++ b/config/wechat.yml @@ -7,7 +7,7 @@ default: &default secret: "dff5b606e34dcafe24163ec82c2715f8" token: "123456" access_token: "1234567" - encrypt_mode: true # if true must fill encoding_aes_key + encrypt_mode: false # if true must fill encoding_aes_key encoding_aes_key: "QyocNOkRmrT5HzBpCG54EVPUQjk86nJapXNVDQm6Yy6" jsapi_ticket: "C:/Users/[user_name]/wechat_jsapi_ticket" From dce93c83130192f5adbea99fecd9ce319154704c Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 14:50:05 +0800 Subject: [PATCH 053/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9wechat=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 0429ebd91..5be3c8bdf 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -152,13 +152,14 @@ class WechatsController < ActionController::Base end def sendBind(request) + logger.deb openid = request[:FromUserName] attrs = wechat.user(openid) UserWechat.delete_all(openid: openid) uw = UserWechat.create!(attrs) news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } request.reply.news(news) do |article, n, index| # article is return object - url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.corpid}&redirect_uri=#{login_wechat_url(uid: uw.id)}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect" + url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{login_wechat_url(uid: uw.id)}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect" article.item title: "#{n[:title]}", description: n[:content], pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', From e32fdf6bcb090eabcc5a76aa3d12d973267f76d2 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 15:21:20 +0800 Subject: [PATCH 054/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9wechat=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 6 +++--- app/views/wechats/login.html.erb | 21 ++++++++++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 5be3c8bdf..ef5562bf0 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -159,7 +159,7 @@ class WechatsController < ActionController::Base uw = UserWechat.create!(attrs) news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } request.reply.news(news) do |article, n, index| # article is return object - url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{login_wechat_url(uid: uw.id)}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect" + url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{login_wechat_url}&response_type=code&scope=snsapi_base&state=#{uw.id}#wechat_redirect" article.item title: "#{n[:title]}", description: n[:content], pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', @@ -169,12 +169,12 @@ class WechatsController < ActionController::Base def bind begin - raise "非法操作, 微信ID不存在" unless params[:openid] + raise "非法操作, 微信ID不存在" unless params[:state] user, last_login_on = User.try_to_login(params[:username], params[:password]) raise "用户名或密码错误,请重新登录" unless user #补全用户信息 - uw = UserWechat.find_by_id(params[:openid]) + uw = UserWechat.find_by_id(params[:state]) uw.user_id = user.id uw.save! rescue Exception=>e diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index e6a936f4e..f3fa64a56 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -5,12 +5,23 @@ 绑定用户 + @@ -41,7 +52,7 @@

From e2ecd546639eb206bc3cc4acca9dcd168b29bce6 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 15:24:30 +0800 Subject: [PATCH 055/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9wechat=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wechats/login.html.erb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index f3fa64a56..32b70d1e2 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -7,14 +7,13 @@
@@ -66,5 +47,27 @@
+ + + \ No newline at end of file From b5a8625e40fd549d12ca67e9401eea1edf8b8029 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 15:39:18 +0800 Subject: [PATCH 060/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9wechat=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wechats/login.html.erb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index a9a5d54f3..ddea5af18 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -6,9 +6,7 @@ 绑定用户 -
From 42edbce8f26ee8547566083ab44bc21eae203371 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 15:41:33 +0800 Subject: [PATCH 061/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9wechat=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wechats/login.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index ddea5af18..2614c1b08 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -58,7 +58,7 @@ $.ajax({ type: "POST", - url: $(this).parent("form").attr("action"), + url: $("#submitForm").attr("action"), data:data, dataType: "json" }); From 4d1969e715c4da6025d3d4092d8d7bf268047fbd Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 15:42:37 +0800 Subject: [PATCH 062/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9wechat=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wechats/login.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index 2614c1b08..481b89f7a 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -58,7 +58,7 @@ $.ajax({ type: "POST", - url: $("#submitForm").attr("action"), + url: $("#main_login_form").attr("action"), data:data, dataType: "json" }); From e487b39d16b6ec2ebee296dfb6a1821237254f1d Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 15:46:05 +0800 Subject: [PATCH 063/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9wechat=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index ef5562bf0..5d61667a6 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -177,9 +177,9 @@ class WechatsController < ActionController::Base uw = UserWechat.find_by_id(params[:state]) uw.user_id = user.id uw.save! + render :text => {status:0, msg: "绑定成功"} rescue Exception=>e - @wechat_bind_errors = e.message - render :login + render :text => {status: -1, msg: e.message} end end From 445bae6de9bc7dc4bd3fbf73cc2b6d2818798d53 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 16:13:13 +0800 Subject: [PATCH 064/423] =?UTF-8?q?patch=20mysql5.7=E7=9A=84create=20table?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wechats/layout.html.erb | 0 config/initializers/abstract_mysql_adapter.rb | 3 ++ public/javascripts/wechat/alert.js | 38 +++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 app/views/wechats/layout.html.erb create mode 100644 config/initializers/abstract_mysql_adapter.rb create mode 100644 public/javascripts/wechat/alert.js diff --git a/app/views/wechats/layout.html.erb b/app/views/wechats/layout.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/config/initializers/abstract_mysql_adapter.rb b/config/initializers/abstract_mysql_adapter.rb new file mode 100644 index 000000000..5083a562b --- /dev/null +++ b/config/initializers/abstract_mysql_adapter.rb @@ -0,0 +1,3 @@ +class ActiveRecord::ConnectionAdapters::Mysql2Adapter + NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY" +end diff --git a/public/javascripts/wechat/alert.js b/public/javascripts/wechat/alert.js new file mode 100644 index 000000000..bda0150a9 --- /dev/null +++ b/public/javascripts/wechat/alert.js @@ -0,0 +1,38 @@ +$(function(){ + window.byAlert = function(info, title){ + if(typeof title === 'undefined'){ + title = '提示'; + } + $('.weui_dialog_alert .weui_dialog_title').text(title); + $('.weui_dialog_alert .weui_dialog_info').text(info); + + var $dialog = $('#dialog2'); + $dialog.show(); + $dialog.find('.weui_btn_dialog').one('click', function () { + $dialog.hide(); + }); + }; + + + window.byConfirm = function(info, cb){ + var title; + if(typeof title === 'undefined'){ + title = '提示'; + } + $('.weui_dialog_confirm .weui_dialog_title').text(title); + $('.weui_dialog_confirm .weui_dialog_info').text(info); + + var $dialog = $('#dialog1'); + $dialog.show(); + $dialog.find('.weui_btn_dialog.confirm').one('click', function () { + $dialog.hide(); + if(typeof cb === 'function'){ + cb(); + } + }); + + $dialog.find('.weui_btn_dialog.cancel').one('click', function () { + $dialog.hide(); + }); + } +}); \ No newline at end of file From a59f65a45567557417f0706fefbe1efa0c1c6887 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 16:13:37 +0800 Subject: [PATCH 065/423] wechat --- Gemfile | 2 +- app/controllers/wechats_controller.rb | 2 + app/views/wechats/layout.html.erb | 43 + app/views/wechats/login.html.erb | 17 +- db/schema.rb | 2110 +------------------------ 5 files changed, 60 insertions(+), 2114 deletions(-) diff --git a/Gemfile b/Gemfile index 95484139d..e292279ef 100644 --- a/Gemfile +++ b/Gemfile @@ -18,7 +18,7 @@ gem 'daemons' gem 'grape', '~> 0.9.0' gem 'grape-entity' gem 'seems_rateable', '~> 1.0.13' -gem "rails", "3.2.13" +gem 'rails', '~> 3.2', '>= 3.2.22' gem "jquery-rails", "~> 2.0.2" gem "i18n", "~> 0.6.0" gem 'coderay', '~> 1.1.0' diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 5d61667a6..1c14aece0 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -1,4 +1,6 @@ class WechatsController < ActionController::Base + layout 'wechat/layout' + wechat_responder include ApplicationHelper diff --git a/app/views/wechats/layout.html.erb b/app/views/wechats/layout.html.erb index e69de29bb..8f93ac9a1 100644 --- a/app/views/wechats/layout.html.erb +++ b/app/views/wechats/layout.html.erb @@ -0,0 +1,43 @@ + + + + + <%= csrf_meta_tag %> + + 绑定用户 + + + + +<%= yield %> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index 481b89f7a..d0cecb5f9 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -1,13 +1,3 @@ - - - - - <%= csrf_meta_tag %> - - 绑定用户 - - -
@@ -61,11 +51,10 @@ url: $("#main_login_form").attr("action"), data:data, dataType: "json" + }).done(function(data){ + }); }) }); - - - - \ No newline at end of file + \ No newline at end of file diff --git a/db/schema.rb b/db/schema.rb index d47a676fb..c9b53c6aa 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,8 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20160119034447) do +ActiveRecord::Schema.define(:version => 20160225024759) do + create_table "activities", :force => true do |t| t.integer "act_id", :null => false t.string "act_type", :null => false @@ -98,11 +99,8 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.integer "quotes" t.integer "version" t.integer "attachment_id" -<<<<<<< HEAD -======= t.integer "is_publish", :default => 1 t.date "publish_time" ->>>>>>> origin/szzh end create_table "attachments", :force => true do |t| @@ -122,11 +120,8 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.integer "is_public", :default => 1 t.integer "copy_from" t.integer "quotes" -<<<<<<< HEAD -======= t.integer "is_publish", :default => 1 t.date "publish_time" ->>>>>>> origin/szzh end add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id" @@ -508,12 +503,9 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.integer "is_delete", :default => 0 t.integer "end_time" t.string "end_term" -<<<<<<< HEAD -======= t.integer "is_excellent", :default => 0 t.integer "excellent_option", :default => 0 t.integer "is_copy", :default => 0 ->>>>>>> origin/szzh end create_table "custom_fields", :force => true do |t| @@ -759,6 +751,14 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.integer "locked" end + create_table "forwards", :force => true do |t| + t.integer "from_id" + t.string "from_type" + t.integer "to_id" + t.string "to_type" + t.datetime "created_at" + end + create_table "groups_users", :id => false, :force => true do |t| t.integer "group_id", :null => false t.integer "user_id", :null => false @@ -795,10 +795,8 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.datetime "updated_at", :null => false t.integer "teacher_priority", :default => 1 t.integer "anonymous_comment", :default => 0 -<<<<<<< HEAD -======= t.integer "quotes", :default => 0 ->>>>>>> origin/szzh + t.integer "is_open", :default => 0 end add_index "homework_commons", ["course_id", "id"], :name => "index_homework_commons_on_course_id_and_id" @@ -1091,10 +1089,7 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.integer "sticky", :default => 0 t.integer "reply_id" t.integer "quotes" -<<<<<<< HEAD -======= t.integer "status", :default => 0 ->>>>>>> origin/szzh end add_index "messages", ["author_id"], :name => "index_messages_on_author_id" @@ -1105,16 +1100,6 @@ ActiveRecord::Schema.define(:version => 20160119034447) do create_table "news", :force => true do |t| t.integer "project_id" -<<<<<<< HEAD - t.string "title", :limit => 60, :default => "", :null => false - t.string "summary", :default => "" - t.text "description" - t.integer "author_id", :default => 0, :null => false - t.datetime "created_on" - t.integer "comments_count", :default => 0, :null => false - t.integer "course_id" - t.integer "sticky", :default => 0 -======= t.string "title", :limit => 60, :default => "", :null => false t.string "summary", :default => "" t.text "description" @@ -1124,7 +1109,6 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.integer "course_id" t.integer "sticky", :default => 0 t.integer "org_subfield_id" ->>>>>>> origin/szzh end add_index "news", ["author_id"], :name => "index_news_on_author_id" @@ -1294,17 +1278,10 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.text "description" t.integer "creator_id" t.integer "home_id" -<<<<<<< HEAD - t.string "domain" - t.boolean "is_public" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false -======= t.boolean "is_public" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.boolean "allow_guest_download", :default => true ->>>>>>> origin/szzh end create_table "phone_app_versions", :force => true do |t| @@ -1409,10 +1386,7 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.integer "board_message_num", :default => 0 t.integer "board_num", :default => 0 t.integer "attach_num", :default => 0 -<<<<<<< HEAD -======= t.datetime "commit_time" ->>>>>>> origin/szzh end create_table "project_statuses", :force => true do |t| @@ -1572,8 +1546,6 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.string "pinyin" end -<<<<<<< HEAD -======= create_table "secdomains", :force => true do |t| t.integer "sub_type" t.string "subname" @@ -1583,7 +1555,6 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.datetime "updated_at", :null => false end ->>>>>>> origin/szzh create_table "seems_rateable_cached_ratings", :force => true do |t| t.integer "cacheable_id", :limit => 8 t.string "cacheable_type" @@ -1911,7 +1882,6 @@ ActiveRecord::Schema.define(:version => 20160119034447) do add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade" add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count" -<<<<<<< HEAD create_table "user_wechats", :force => true do |t| t.integer "subscribe" t.string "openid" @@ -1931,8 +1901,6 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.datetime "updated_at", :null => false end -======= ->>>>>>> origin/szzh create_table "users", :force => true do |t| t.string "login", :default => "", :null => false t.string "hashed_password", :limit => 40, :default => "", :null => false @@ -2008,7 +1976,6 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.datetime "updated_at", :null => false end -<<<<<<< HEAD create_table "wechat_logs", :force => true do |t| t.string "openid", :null => false t.text "request_raw" @@ -2017,2060 +1984,6 @@ ActiveRecord::Schema.define(:version => 20160119034447) do t.datetime "created_at", :null => false end -======= ->>>>>>> origin/szzh - create_table "wiki_content_versions", :force => true do |t| - t.integer "wiki_content_id", :null => false - t.integer "page_id", :null => false - t.integer "author_id" - t.binary "data", :limit => 2147483647 - t.string "compression", :limit => 6, :default => "" - t.string "comments", :default => "" - t.datetime "updated_on", :null => false - t.integer "version", :null => false - end - - add_index "wiki_content_versions", ["updated_on"], :name => "index_wiki_content_versions_on_updated_on" - add_index "wiki_content_versions", ["wiki_content_id"], :name => "wiki_content_versions_wcid" - - create_table "wiki_contents", :force => true do |t| - t.integer "page_id", :null => false - t.integer "author_id" - t.text "text", :limit => 2147483647 - t.string "comments", :default => "" - t.datetime "updated_on", :null => false - t.integer "version", :null => false - end - - add_index "wiki_contents", ["author_id"], :name => "index_wiki_contents_on_author_id" - add_index "wiki_contents", ["page_id"], :name => "wiki_contents_page_id" - - create_table "wiki_pages", :force => true do |t| - t.integer "wiki_id", :null => false - t.string "title", :null => false - t.datetime "created_on", :null => false - t.boolean "protected", :default => false, :null => false - t.integer "parent_id" - end - - add_index "wiki_pages", ["parent_id"], :name => "index_wiki_pages_on_parent_id" - add_index "wiki_pages", ["wiki_id", "title"], :name => "wiki_pages_wiki_id_title" - add_index "wiki_pages", ["wiki_id"], :name => "index_wiki_pages_on_wiki_id" - - create_table "wiki_redirects", :force => true do |t| - t.integer "wiki_id", :null => false - t.string "title" - t.string "redirects_to" - t.datetime "created_on", :null => false - end - - add_index "wiki_redirects", ["wiki_id", "title"], :name => "wiki_redirects_wiki_id_title" - add_index "wiki_redirects", ["wiki_id"], :name => "index_wiki_redirects_on_wiki_id" - - create_table "wikis", :force => true do |t| - t.integer "project_id", :null => false - t.string "start_page", :null => false - t.integer "status", :default => 1, :null => false - end - - add_index "wikis", ["project_id"], :name => "wikis_project_id" - - create_table "workflows", :force => true do |t| - t.integer "tracker_id", :default => 0, :null => false - t.integer "old_status_id", :default => 0, :null => false - t.integer "new_status_id", :default => 0, :null => false - t.integer "role_id", :default => 0, :null => false - t.boolean "assignee", :default => false, :null => false - t.boolean "author", :default => false, :null => false - t.string "type", :limit => 30 - t.string "field_name", :limit => 30 - t.string "rule", :limit => 30 - end - - add_index "workflows", ["new_status_id"], :name => "index_workflows_on_new_status_id" - add_index "workflows", ["old_status_id"], :name => "index_workflows_on_old_status_id" - add_index "workflows", ["role_id", "tracker_id", "old_status_id"], :name => "wkfs_role_tracker_old_status" - add_index "workflows", ["role_id"], :name => "index_workflows_on_role_id" - - create_table "works_categories", :force => true do |t| - t.string "category" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "zip_packs", :force => true do |t| - t.integer "user_id" - t.integer "homework_id" - t.string "file_digest" - t.string "file_path" - t.integer "pack_times", :default => 1 - t.integer "pack_size", :default => 0 - t.text "file_digests" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - -end -======= -# encoding: UTF-8 -# This file is auto-generated from the current state of the database. Instead -# of editing this file, please use the migrations feature of Active Record to -# incrementally modify your database, and then regenerate this schema definition. -# -# Note that this schema.rb definition is the authoritative source for your -# database schema. If you need to create the application database on another -# system, you should be using db:schema:load, not running all the migrations -# from scratch. The latter is a flawed and unsustainable approach (the more migrations -# you'll amass, the slower it'll run and the greater likelihood for issues). -# -# It's strongly recommended to check this file into your version control system. - -ActiveRecord::Schema.define(:version => 20160225024759) do - - create_table "activities", :force => true do |t| - t.integer "act_id", :null => false - t.string "act_type", :null => false - t.integer "user_id", :null => false - t.integer "activity_container_id" - t.string "activity_container_type", :default => "" - t.datetime "created_at" - end - - add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type" - add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type" - add_index "activities", ["user_id"], :name => "index_activities_on_user_id" - - create_table "activity_notifies", :force => true do |t| - t.integer "activity_container_id" - t.string "activity_container_type" - t.integer "activity_id" - t.string "activity_type" - t.integer "notify_to" - t.datetime "created_on" - t.integer "is_read" - end - - add_index "activity_notifies", ["activity_container_id", "activity_container_type"], :name => "index_an_activity_container_id" - add_index "activity_notifies", ["created_on"], :name => "index_an_created_on" - add_index "activity_notifies", ["notify_to"], :name => "index_an_notify_to" - - create_table "api_keys", :force => true do |t| - t.string "access_token" - t.datetime "expires_at" - t.integer "user_id" - t.boolean "active", :default => true - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token" - add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id" - - create_table "applied_projects", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false - end - - create_table "apply_project_masters", :force => true do |t| - t.integer "user_id" - t.string "apply_type" - t.integer "apply_id" - t.integer "status" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "at_messages", :force => true do |t| - t.integer "user_id" - t.integer "at_message_id" - t.string "at_message_type" - t.boolean "viewed", :default => false - t.string "container_type" - t.integer "container_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sender_id" - end - - add_index "at_messages", ["user_id"], :name => "index_at_messages_on_user_id" - - create_table "attachment_histories", :force => true do |t| - t.integer "container_id" - t.string "container_type" - t.string "filename", :default => "" - t.string "disk_filename", :default => "" - t.integer "filesize", :default => 0 - t.string "content_type", :default => "" - t.string "digest", :limit => 40, :default => "" - t.integer "downloads", :default => 0 - t.integer "author_id" - t.datetime "created_on" - t.string "description" - t.string "disk_directory" - t.integer "attachtype" - t.integer "is_public" - t.integer "copy_from" - t.integer "quotes" - t.integer "version" - t.integer "attachment_id" - t.integer "is_publish", :default => 1 - t.date "publish_time" - end - - create_table "attachments", :force => true do |t| - t.integer "container_id" - t.string "container_type", :limit => 30 - t.string "filename", :default => "", :null => false - t.string "disk_filename", :default => "", :null => false - t.integer "filesize", :default => 0, :null => false - t.string "content_type", :default => "" - t.string "digest", :limit => 40, :default => "", :null => false - t.integer "downloads", :default => 0, :null => false - t.integer "author_id", :default => 0, :null => false - t.datetime "created_on" - t.string "description" - t.string "disk_directory" - t.integer "attachtype", :default => 1 - t.integer "is_public", :default => 1 - t.integer "copy_from" - t.integer "quotes" - t.integer "is_publish", :default => 1 - t.date "publish_time" - end - - add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id" - add_index "attachments", ["container_id", "container_type"], :name => "index_attachments_on_container_id_and_container_type" - add_index "attachments", ["created_on"], :name => "index_attachments_on_created_on" - - create_table "attachmentstypes", :force => true do |t| - t.integer "typeId", :null => false - t.string "typeName", :limit => 50 - end - - create_table "auth_sources", :force => true do |t| - t.string "type", :limit => 30, :default => "", :null => false - t.string "name", :limit => 60, :default => "", :null => false - t.string "host", :limit => 60 - t.integer "port" - t.string "account" - t.string "account_password", :default => "" - t.string "base_dn" - t.string "attr_login", :limit => 30 - t.string "attr_firstname", :limit => 30 - t.string "attr_lastname", :limit => 30 - t.string "attr_mail", :limit => 30 - t.boolean "onthefly_register", :default => false, :null => false - t.boolean "tls", :default => false, :null => false - t.string "filter" - t.integer "timeout" - end - - add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type" - - create_table "biding_projects", :force => true do |t| - t.integer "project_id" - t.integer "bid_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "bids", :force => true do |t| - t.string "name" - t.string "budget", :null => false - t.integer "author_id" - t.date "deadline" - t.text "description" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.integer "commit" - t.integer "reward_type" - t.integer "homework_type" - t.integer "parent_id" - t.string "password" - t.integer "is_evaluation" - t.integer "proportion", :default => 60 - t.integer "comment_status", :default => 0 - t.integer "evaluation_num", :default => 3 - t.integer "open_anonymous_evaluation", :default => 1 - end - - create_table "blog_comments", :force => true do |t| - t.integer "blog_id", :null => false - t.integer "parent_id" - t.string "title", :default => "", :null => false - t.text "content" - t.integer "author_id" - t.integer "comments_count", :default => 0, :null => false - t.integer "last_comment_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.boolean "locked", :default => false - t.integer "sticky", :default => 0 - t.integer "reply_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "blogs", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "description" - t.integer "position", :default => 1 - t.integer "article_count", :default => 0, :null => false - t.integer "comments_count", :default => 0, :null => false - t.integer "last_comments_id" - t.integer "parent_id" - t.integer "author_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "homepage_id" - end - - create_table "boards", :force => true do |t| - t.integer "project_id", :null => false - t.string "name", :default => "", :null => false - t.string "description" - t.integer "position", :default => 1 - t.integer "topics_count", :default => 0, :null => false - t.integer "messages_count", :default => 0, :null => false - t.integer "last_message_id" - t.integer "parent_id" - t.integer "course_id" - t.integer "org_subfield_id" - end - - add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id" - add_index "boards", ["project_id"], :name => "boards_project_id" - - create_table "bug_to_osps", :force => true do |t| - t.integer "osp_id" - t.integer "relative_memo_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "changes", :force => true do |t| - t.integer "changeset_id", :null => false - t.string "action", :limit => 1, :default => "", :null => false - t.text "path", :null => false - t.text "from_path" - t.string "from_revision" - t.string "revision" - t.string "branch" - end - - add_index "changes", ["changeset_id"], :name => "changesets_changeset_id" - - create_table "changeset_parents", :id => false, :force => true do |t| - t.integer "changeset_id", :null => false - t.integer "parent_id", :null => false - end - - add_index "changeset_parents", ["changeset_id"], :name => "changeset_parents_changeset_ids" - add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids" - - create_table "changesets", :force => true do |t| - t.integer "repository_id", :null => false - t.string "revision", :null => false - t.string "committer" - t.datetime "committed_on", :null => false - t.text "comments" - t.date "commit_date" - t.string "scmid" - t.integer "user_id" - end - - add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on" - add_index "changesets", ["repository_id", "revision"], :name => "changesets_repos_rev", :unique => true - add_index "changesets", ["repository_id", "scmid"], :name => "changesets_repos_scmid" - add_index "changesets", ["repository_id"], :name => "index_changesets_on_repository_id" - add_index "changesets", ["user_id"], :name => "index_changesets_on_user_id" - - create_table "changesets_issues", :id => false, :force => true do |t| - t.integer "changeset_id", :null => false - t.integer "issue_id", :null => false - end - - add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true - - create_table "code_review_assignments", :force => true do |t| - t.integer "issue_id" - t.integer "change_id" - t.integer "attachment_id" - t.string "file_path" - t.string "rev" - t.string "rev_to" - t.string "action_type" - t.integer "changeset_id" - end - - create_table "code_review_project_settings", :force => true do |t| - t.integer "project_id" - t.integer "tracker_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "updated_by" - t.boolean "hide_code_review_tab", :default => false - t.integer "auto_relation", :default => 1 - t.integer "assignment_tracker_id" - t.text "auto_assign" - t.integer "lock_version", :default => 0, :null => false - t.boolean "tracker_in_review_dialog", :default => false - end - - create_table "code_review_user_settings", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.integer "mail_notification", :default => 0, :null => false - t.datetime "created_at" - t.datetime "updated_at" - end - - create_table "code_reviews", :force => true do |t| - t.integer "project_id" - t.integer "change_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "line" - t.integer "updated_by_id" - t.integer "lock_version", :default => 0, :null => false - t.integer "status_changed_from" - t.integer "status_changed_to" - t.integer "issue_id" - t.string "action_type" - t.string "file_path" - t.string "rev" - t.string "rev_to" - t.integer "attachment_id" - t.integer "file_count", :default => 0, :null => false - t.boolean "diff_all" - end - - create_table "comments", :force => true do |t| - t.string "commented_type", :limit => 30, :default => "", :null => false - t.integer "commented_id", :default => 0, :null => false - t.integer "author_id", :default => 0, :null => false - t.text "comments" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - add_index "comments", ["author_id"], :name => "index_comments_on_author_id" - add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type" - - create_table "contest_notifications", :force => true do |t| - t.text "title" - t.text "content" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "contesting_projects", :force => true do |t| - t.integer "project_id" - t.string "contest_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "contesting_softapplications", :force => true do |t| - t.integer "softapplication_id" - t.integer "contest_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "contestnotifications", :force => true do |t| - t.integer "contest_id" - t.string "title" - t.string "summary" - t.text "description" - t.integer "author_id" - t.integer "notificationcomments_count" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "contests", :force => true do |t| - t.string "name" - t.string "budget", :default => "" - t.integer "author_id" - t.date "deadline" - t.string "description" - t.integer "commit" - t.string "password" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - create_table "course_activities", :force => true do |t| - t.integer "user_id" - t.integer "course_id" - t.integer "course_act_id" - t.string "course_act_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_attachments", :force => true do |t| - t.string "filename" - t.string "disk_filename" - t.integer "filesize" - t.string "content_type" - t.string "digest" - t.integer "downloads" - t.string "author_id" - t.string "integer" - t.string "description" - t.string "disk_directory" - t.integer "attachtype" - t.integer "is_public" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "container_id", :default => 0 - end - - create_table "course_contributor_scores", :force => true do |t| - t.integer "course_id" - t.integer "user_id" - t.integer "message_num" - t.integer "message_reply_num" - t.integer "news_reply_num" - t.integer "resource_num" - t.integer "journal_num" - t.integer "journal_reply_num" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "total_score" - end - - create_table "course_groups", :force => true do |t| - t.string "name" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_infos", :force => true do |t| - t.integer "course_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_messages", :force => true do |t| - t.integer "user_id" - t.integer "course_id" - t.integer "course_message_id" - t.string "course_message_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "content" - t.integer "status" - end - - create_table "course_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "course_id" - t.float "grade", :default => 0.0 - t.integer "course_ac_para", :default => 0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "courses", :force => true do |t| - t.integer "tea_id" - t.string "name" - t.integer "state" - t.string "code" - t.integer "time" - t.string "extra" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "location" - t.string "term" - t.string "string" - t.string "password" - t.string "setup_time" - t.string "endup_time" - t.string "class_period" - t.integer "school_id" - t.text "description" - t.integer "status", :default => 1 - t.integer "attachmenttype", :default => 2 - t.integer "lft" - t.integer "rgt" - t.integer "is_public", :limit => 1, :default => 1 - t.integer "inherit_members", :limit => 1, :default => 1 - t.integer "open_student", :default => 0 - t.integer "outline", :default => 0 - t.integer "publish_resource", :default => 0 - t.integer "is_delete", :default => 0 - t.integer "end_time" - t.string "end_term" - t.integer "is_excellent", :default => 0 - t.integer "excellent_option", :default => 0 - t.integer "is_copy", :default => 0 - end - - create_table "custom_fields", :force => true do |t| - t.string "type", :limit => 30, :default => "", :null => false - t.string "name", :limit => 30, :default => "", :null => false - t.string "field_format", :limit => 30, :default => "", :null => false - t.text "possible_values" - t.string "regexp", :default => "" - t.integer "min_length", :default => 0, :null => false - t.integer "max_length", :default => 0, :null => false - t.boolean "is_required", :default => false, :null => false - t.boolean "is_for_all", :default => false, :null => false - t.boolean "is_filter", :default => false, :null => false - t.integer "position", :default => 1 - t.boolean "searchable", :default => false - t.text "default_value" - t.boolean "editable", :default => true - t.boolean "visible", :default => true, :null => false - t.boolean "multiple", :default => false - end - - add_index "custom_fields", ["id", "type"], :name => "index_custom_fields_on_id_and_type" - - create_table "custom_fields_projects", :id => false, :force => true do |t| - t.integer "custom_field_id", :default => 0, :null => false - t.integer "project_id", :default => 0, :null => false - end - - add_index "custom_fields_projects", ["custom_field_id", "project_id"], :name => "index_custom_fields_projects_on_custom_field_id_and_project_id", :unique => true - - create_table "custom_fields_trackers", :id => false, :force => true do |t| - t.integer "custom_field_id", :default => 0, :null => false - t.integer "tracker_id", :default => 0, :null => false - end - - add_index "custom_fields_trackers", ["custom_field_id", "tracker_id"], :name => "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", :unique => true - - create_table "custom_values", :force => true do |t| - t.string "customized_type", :limit => 30, :default => "", :null => false - t.integer "customized_id", :default => 0, :null => false - t.integer "custom_field_id", :default => 0, :null => false - t.text "value" - end - - add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id" - add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized" - - create_table "delayed_jobs", :force => true do |t| - t.integer "priority", :default => 0, :null => false - t.integer "attempts", :default => 0, :null => false - t.text "handler", :null => false - t.text "last_error" - t.datetime "run_at" - t.datetime "locked_at" - t.datetime "failed_at" - t.string "locked_by" - t.string "queue" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" - - create_table "discuss_demos", :force => true do |t| - t.string "title" - t.text "body" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "documents", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.integer "category_id", :default => 0, :null => false - t.string "title", :limit => 60, :default => "", :null => false - t.text "description" - t.datetime "created_on" - t.integer "user_id", :default => 0 - t.integer "is_public", :default => 1 - end - - add_index "documents", ["category_id"], :name => "index_documents_on_category_id" - add_index "documents", ["created_on"], :name => "index_documents_on_created_on" - add_index "documents", ["project_id"], :name => "documents_project_id" - - create_table "dts", :primary_key => "Num", :force => true do |t| - t.string "Defect", :limit => 50 - t.string "Category", :limit => 50 - t.string "File" - t.string "Method" - t.string "Module", :limit => 20 - t.string "Variable", :limit => 50 - t.integer "StartLine" - t.integer "IPLine" - t.string "IPLineCode", :limit => 200 - t.string "Judge", :limit => 15 - t.integer "Review", :limit => 1 - t.string "Description" - t.text "PreConditions", :limit => 2147483647 - t.text "TraceInfo", :limit => 2147483647 - t.text "Code", :limit => 2147483647 - t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "id", :null => false - end - - create_table "editor_of_documents", :force => true do |t| - t.integer "editor_id" - t.integer "org_document_comment_id" - t.datetime "created_at" - end - - create_table "enabled_modules", :force => true do |t| - t.integer "project_id" - t.string "name", :null => false - t.integer "course_id" - end - - add_index "enabled_modules", ["project_id"], :name => "enabled_modules_project_id" - - create_table "enumerations", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.integer "position", :default => 1 - t.boolean "is_default", :default => false, :null => false - t.string "type" - t.boolean "active", :default => true, :null => false - t.integer "project_id" - t.integer "parent_id" - t.string "position_name", :limit => 30 - end - - add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type" - add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id" - - create_table "exercise_answers", :force => true do |t| - t.integer "user_id" - t.integer "exercise_question_id" - t.integer "exercise_choice_id" - t.text "answer_text" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "exercise_choices", :force => true do |t| - t.integer "exercise_question_id" - t.text "choice_text" - t.integer "choice_position" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "exercise_questions", :force => true do |t| - t.text "question_title" - t.integer "question_type" - t.integer "question_number" - t.integer "exercise_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "question_score" - end - - create_table "exercise_standard_answers", :force => true do |t| - t.integer "exercise_question_id" - t.integer "exercise_choice_id" - t.text "answer_text" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "exercise_users", :force => true do |t| - t.integer "user_id" - t.integer "exercise_id" - t.integer "score" - t.datetime "start_at" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.datetime "end_at" - t.integer "status" - end - - create_table "exercises", :force => true do |t| - t.text "exercise_name" - t.text "exercise_description" - t.integer "course_id" - t.integer "exercise_status" - t.integer "user_id" - t.integer "time" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.datetime "publish_time" - t.datetime "end_time" - t.integer "show_result" - end - - create_table "first_pages", :force => true do |t| - t.string "web_title" - t.string "title" - t.text "description" - t.string "page_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sort_type" - t.integer "image_width", :default => 107 - t.integer "image_height", :default => 63 - t.integer "show_course", :default => 1 - t.integer "show_contest", :default => 1 - end - - create_table "forge_activities", :force => true do |t| - t.integer "user_id" - t.integer "project_id" - t.integer "forge_act_id" - t.string "forge_act_type" - t.integer "org_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "forge_activities", ["forge_act_id"], :name => "index_forge_activities_on_forge_act_id" - - create_table "forge_messages", :force => true do |t| - t.integer "user_id" - t.integer "project_id" - t.integer "forge_message_id" - t.string "forge_message_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "secret_key" - t.integer "status" - end - - create_table "forums", :force => true do |t| - t.string "name", :null => false - t.text "description" - t.integer "topic_count", :default => 0 - t.integer "memo_count", :default => 0 - t.integer "last_memo_id", :default => 0 - t.integer "creator_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sticky" - t.integer "locked" - end - - create_table "forwards", :force => true do |t| - t.integer "from_id" - t.string "from_type" - t.integer "to_id" - t.string "to_type" - t.datetime "created_at" - end - - create_table "groups_users", :id => false, :force => true do |t| - t.integer "group_id", :null => false - t.integer "user_id", :null => false - end - - add_index "groups_users", ["group_id", "user_id"], :name => "groups_users_ids", :unique => true - - create_table "homework_attaches", :force => true do |t| - t.integer "bid_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - t.string "name" - t.text "description" - t.integer "state" - t.integer "project_id", :default => 0 - t.float "score", :default => 0.0 - t.integer "is_teacher_score", :default => 0 - end - - add_index "homework_attaches", ["bid_id"], :name => "index_homework_attaches_on_bid_id" - - create_table "homework_commons", :force => true do |t| - t.string "name" - t.integer "user_id" - t.text "description" - t.date "publish_time" - t.date "end_time" - t.integer "homework_type", :default => 1 - t.string "late_penalty" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "teacher_priority", :default => 1 - t.integer "anonymous_comment", :default => 0 - t.integer "quotes", :default => 0 - t.integer "is_open", :default => 0 - end - - add_index "homework_commons", ["course_id", "id"], :name => "index_homework_commons_on_course_id_and_id" - - create_table "homework_detail_groups", :force => true do |t| - t.integer "homework_common_id" - t.integer "min_num" - t.integer "max_num" - t.integer "base_on_project" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "homework_detail_groups", ["homework_common_id"], :name => "index_homework_detail_groups_on_homework_common_id" - - create_table "homework_detail_manuals", :force => true do |t| - t.float "ta_proportion" - t.integer "comment_status" - t.date "evaluation_start" - t.date "evaluation_end" - t.integer "evaluation_num" - t.integer "absence_penalty", :default => 1 - t.integer "homework_common_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "homework_detail_programings", :force => true do |t| - t.string "language" - t.text "standard_code", :limit => 2147483647 - t.integer "homework_common_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.float "ta_proportion", :default => 0.1 - t.integer "question_id" - end - - create_table "homework_evaluations", :force => true do |t| - t.string "user_id" - t.string "homework_attach_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "homework_for_courses", :force => true do |t| - t.integer "course_id" - t.integer "bid_id" - end - - add_index "homework_for_courses", ["bid_id"], :name => "index_homework_for_courses_on_bid_id" - add_index "homework_for_courses", ["course_id"], :name => "index_homework_for_courses_on_course_id" - - create_table "homework_tests", :force => true do |t| - t.text "input" - t.text "output" - t.integer "homework_common_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "result" - t.text "error_msg" - end - - create_table "homework_users", :force => true do |t| - t.string "homework_attach_id" - t.string "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "invite_lists", :force => true do |t| - t.integer "project_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "mail" - end - - create_table "issue_categories", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "name", :limit => 30, :default => "", :null => false - t.integer "assigned_to_id" - end - - add_index "issue_categories", ["assigned_to_id"], :name => "index_issue_categories_on_assigned_to_id" - add_index "issue_categories", ["project_id"], :name => "issue_categories_project_id" - - create_table "issue_relations", :force => true do |t| - t.integer "issue_from_id", :null => false - t.integer "issue_to_id", :null => false - t.string "relation_type", :default => "", :null => false - t.integer "delay" - end - - add_index "issue_relations", ["issue_from_id", "issue_to_id"], :name => "index_issue_relations_on_issue_from_id_and_issue_to_id", :unique => true - add_index "issue_relations", ["issue_from_id"], :name => "index_issue_relations_on_issue_from_id" - add_index "issue_relations", ["issue_to_id"], :name => "index_issue_relations_on_issue_to_id" - - create_table "issue_statuses", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.boolean "is_closed", :default => false, :null => false - t.boolean "is_default", :default => false, :null => false - t.integer "position", :default => 1 - t.integer "default_done_ratio" - end - - add_index "issue_statuses", ["is_closed"], :name => "index_issue_statuses_on_is_closed" - add_index "issue_statuses", ["is_default"], :name => "index_issue_statuses_on_is_default" - add_index "issue_statuses", ["position"], :name => "index_issue_statuses_on_position" - - create_table "issues", :force => true do |t| - t.integer "tracker_id", :null => false - t.integer "project_id", :null => false - t.string "subject", :default => "", :null => false - t.text "description" - t.date "due_date" - t.integer "category_id" - t.integer "status_id", :null => false - t.integer "assigned_to_id" - t.integer "priority_id", :null => false - t.integer "fixed_version_id" - t.integer "author_id", :null => false - t.integer "lock_version", :default => 0, :null => false - t.datetime "created_on" - t.datetime "updated_on" - t.date "start_date" - t.integer "done_ratio", :default => 0, :null => false - t.float "estimated_hours" - t.integer "parent_id" - t.integer "root_id" - t.integer "lft" - t.integer "rgt" - t.boolean "is_private", :default => false, :null => false - t.datetime "closed_on" - t.integer "project_issues_index" - end - - add_index "issues", ["assigned_to_id"], :name => "index_issues_on_assigned_to_id" - add_index "issues", ["author_id"], :name => "index_issues_on_author_id" - add_index "issues", ["category_id"], :name => "index_issues_on_category_id" - add_index "issues", ["created_on"], :name => "index_issues_on_created_on" - add_index "issues", ["fixed_version_id"], :name => "index_issues_on_fixed_version_id" - add_index "issues", ["priority_id"], :name => "index_issues_on_priority_id" - add_index "issues", ["project_id"], :name => "issues_project_id" - add_index "issues", ["root_id", "lft", "rgt"], :name => "index_issues_on_root_id_and_lft_and_rgt" - add_index "issues", ["status_id"], :name => "index_issues_on_status_id" - add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id" - - create_table "join_in_competitions", :force => true do |t| - t.integer "user_id" - t.integer "competition_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "join_in_contests", :force => true do |t| - t.integer "user_id" - t.integer "bid_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "journal_details", :force => true do |t| - t.integer "journal_id", :default => 0, :null => false - t.string "property", :limit => 30, :default => "", :null => false - t.string "prop_key", :limit => 30, :default => "", :null => false - t.text "old_value" - t.text "value" - end - - add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id" - - create_table "journal_replies", :id => false, :force => true do |t| - t.integer "journal_id" - t.integer "user_id" - t.integer "reply_id" - end - - add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id" - add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id" - add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id" - - create_table "journals", :force => true do |t| - t.integer "journalized_id", :default => 0, :null => false - t.string "journalized_type", :limit => 30, :default => "", :null => false - t.integer "user_id", :default => 0, :null => false - t.text "notes" - t.datetime "created_on", :null => false - t.boolean "private_notes", :default => false, :null => false - end - - add_index "journals", ["created_on"], :name => "index_journals_on_created_on" - add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id" - add_index "journals", ["journalized_id"], :name => "index_journals_on_journalized_id" - add_index "journals", ["user_id"], :name => "index_journals_on_user_id" - - create_table "journals_for_messages", :force => true do |t| - t.integer "jour_id" - t.string "jour_type" - t.integer "user_id" - t.text "notes" - t.integer "status" - t.integer "reply_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.string "m_parent_id" - t.boolean "is_readed" - t.integer "m_reply_count" - t.integer "m_reply_id" - t.integer "is_comprehensive_evaluation" - t.integer "private", :default => 0 - end - - create_table "kindeditor_assets", :force => true do |t| - t.string "asset" - t.integer "file_size" - t.string "file_type" - t.integer "owner_id" - t.string "asset_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "owner_type", :default => 0 - end - - create_table "member_roles", :force => true do |t| - t.integer "member_id", :null => false - t.integer "role_id", :null => false - t.integer "inherited_from" - end - - add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id" - add_index "member_roles", ["role_id"], :name => "index_member_roles_on_role_id" - - create_table "members", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.integer "project_id", :default => 0 - t.datetime "created_on" - t.boolean "mail_notification", :default => false, :null => false - t.integer "course_id", :default => -1 - t.integer "course_group_id", :default => 0 - end - - add_index "members", ["project_id"], :name => "index_members_on_project_id" - add_index "members", ["user_id", "project_id", "course_id"], :name => "index_members_on_user_id_and_project_id", :unique => true - add_index "members", ["user_id"], :name => "index_members_on_user_id" - - create_table "memo_messages", :force => true do |t| - t.integer "user_id" - t.integer "forum_id" - t.integer "memo_id" - t.string "memo_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "memos", :force => true do |t| - t.integer "forum_id", :null => false - t.integer "parent_id" - t.string "subject", :null => false - t.text "content", :null => false - t.integer "author_id", :null => false - t.integer "replies_count", :default => 0 - t.integer "last_reply_id" - t.boolean "lock", :default => false - t.boolean "sticky", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "viewed_count", :default => 0 - end - - create_table "message_alls", :force => true do |t| - t.integer "user_id" - t.integer "message_id" - t.string "message_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "messages", :force => true do |t| - t.integer "board_id", :null => false - t.integer "parent_id" - t.string "subject", :default => "", :null => false - t.text "content" - t.integer "author_id" - t.integer "replies_count", :default => 0, :null => false - t.integer "last_reply_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.boolean "locked", :default => false - t.integer "sticky", :default => 0 - t.integer "reply_id" - t.integer "quotes" - t.integer "status", :default => 0 - end - - add_index "messages", ["author_id"], :name => "index_messages_on_author_id" - add_index "messages", ["board_id"], :name => "messages_board_id" - add_index "messages", ["created_on"], :name => "index_messages_on_created_on" - add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id" - add_index "messages", ["parent_id"], :name => "messages_parent_id" - - create_table "news", :force => true do |t| - t.integer "project_id" - t.string "title", :limit => 60, :default => "", :null => false - t.string "summary", :default => "" - t.text "description" - t.integer "author_id", :default => 0, :null => false - t.datetime "created_on" - t.integer "comments_count", :default => 0, :null => false - t.integer "course_id" - t.integer "sticky", :default => 0 - t.integer "org_subfield_id" - end - - add_index "news", ["author_id"], :name => "index_news_on_author_id" - add_index "news", ["created_on"], :name => "index_news_on_created_on" - add_index "news", ["project_id"], :name => "news_project_id" - - create_table "no_uses", :force => true do |t| - t.integer "user_id", :null => false - t.string "no_use_type" - t.integer "no_use_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "notificationcomments", :force => true do |t| - t.string "notificationcommented_type" - t.integer "notificationcommented_id" - t.integer "author_id" - t.text "notificationcomments" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "onclick_times", :force => true do |t| - t.integer "user_id" - t.datetime "onclick_time" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "open_id_authentication_associations", :force => true do |t| - t.integer "issued" - t.integer "lifetime" - t.string "handle" - t.string "assoc_type" - t.binary "server_url" - t.binary "secret" - end - - create_table "open_id_authentication_nonces", :force => true do |t| - t.integer "timestamp", :null => false - t.string "server_url" - t.string "salt", :null => false - end - - create_table "open_source_projects", :force => true do |t| - t.string "name" - t.text "description" - t.integer "commit_count", :default => 0 - t.integer "code_line", :default => 0 - t.integer "users_count", :default => 0 - t.date "last_commit_time" - t.string "url" - t.date "date_collected" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "option_numbers", :force => true do |t| - t.integer "user_id" - t.integer "memo" - t.integer "messages_for_issues" - t.integer "issues_status" - t.integer "replay_for_message" - t.integer "replay_for_memo" - t.integer "follow" - t.integer "tread" - t.integer "praise_by_one" - t.integer "praise_by_two" - t.integer "praise_by_three" - t.integer "tread_by_one" - t.integer "tread_by_two" - t.integer "tread_by_three" - t.integer "changeset" - t.integer "document" - t.integer "attachment" - t.integer "issue_done_ratio" - t.integer "post_issue" - t.integer "score_type" - t.integer "total_score" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "project_id" - end - - create_table "org_activities", :force => true do |t| - t.integer "user_id" - t.integer "org_act_id" - t.string "org_act_type" - t.integer "container_id" - t.string "container_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "org_courses", :force => true do |t| - t.integer "organization_id" - t.integer "course_id" - t.datetime "created_at" - end - - create_table "org_document_comments", :force => true do |t| - t.text "title" - t.text "content" - t.integer "organization_id" - t.integer "creator_id" - t.integer "parent_id" - t.integer "reply_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.boolean "locked", :default => false - t.integer "sticky", :default => 0 - t.integer "org_subfield_id" - end - - create_table "org_member_roles", :force => true do |t| - t.integer "org_member_id" - t.integer "role_id" - end - - create_table "org_members", :force => true do |t| - t.integer "user_id" - t.integer "organization_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "org_messages", :force => true do |t| - t.integer "user_id" - t.integer "sender_id" - t.integer "organization_id" - t.string "message_type" - t.integer "message_id" - t.integer "viewed" - t.string "content" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "status", :default => 0 - end - - create_table "org_projects", :force => true do |t| - t.integer "organization_id" - t.integer "project_id" - t.datetime "created_at" - end - - create_table "org_subfield_messages", :force => true do |t| - t.integer "org_subfield_id" - t.integer "message_id" - t.string "message_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "org_subfields", :force => true do |t| - t.integer "organization_id" - t.integer "priority" - t.string "name" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "field_type" - t.integer "hide", :default => 0 - end - - create_table "organizations", :force => true do |t| - t.string "name" - t.text "description" - t.integer "creator_id" - t.integer "home_id" - t.boolean "is_public" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.boolean "allow_guest_download", :default => true - end - - create_table "phone_app_versions", :force => true do |t| - t.string "version" - t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_answers", :force => true do |t| - t.integer "poll_question_id" - t.text "answer_text" - t.integer "answer_position" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_questions", :force => true do |t| - t.string "question_title" - t.integer "question_type" - t.integer "is_necessary" - t.integer "poll_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "question_number" - end - - create_table "poll_users", :force => true do |t| - t.integer "user_id" - t.integer "poll_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_votes", :force => true do |t| - t.integer "user_id" - t.integer "poll_question_id" - t.integer "poll_answer_id" - t.text "vote_text" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "polls", :force => true do |t| - t.string "polls_name" - t.string "polls_type" - t.integer "polls_group_id" - t.integer "polls_status" - t.integer "user_id" - t.datetime "published_at" - t.datetime "closed_at" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.text "polls_description" - t.integer "show_result", :default => 1 - end - - create_table "praise_tread_caches", :force => true do |t| - t.integer "object_id", :null => false - t.string "object_type" - t.integer "praise_num" - t.integer "tread_num" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "praise_treads", :force => true do |t| - t.integer "user_id", :null => false - t.integer "praise_tread_object_id" - t.string "praise_tread_object_type" - t.integer "praise_or_tread" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "principal_activities", :force => true do |t| - t.integer "user_id" - t.integer "principal_id" - t.integer "principal_act_id" - t.string "principal_act_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "project_infos", :force => true do |t| - t.integer "project_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "project_scores", :force => true do |t| - t.string "project_id" - t.integer "score" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "issue_num", :default => 0 - t.integer "issue_journal_num", :default => 0 - t.integer "news_num", :default => 0 - t.integer "documents_num", :default => 0 - t.integer "changeset_num", :default => 0 - t.integer "board_message_num", :default => 0 - t.integer "board_num", :default => 0 - t.integer "attach_num", :default => 0 - t.datetime "commit_time" - end - - create_table "project_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "project_id" - t.integer "project_type" - t.float "grade", :default => 0.0 - t.integer "course_ac_para", :default => 0 - end - - add_index "project_statuses", ["grade"], :name => "index_project_statuses_on_grade" - - create_table "projecting_softapplictions", :force => true do |t| - t.integer "user_id" - t.integer "softapplication_id" - t.integer "project_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "projects", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "description" - t.string "homepage", :default => "" - t.boolean "is_public", :default => true, :null => false - t.integer "parent_id" - t.datetime "created_on" - t.datetime "updated_on" - t.string "identifier" - t.integer "status", :default => 1, :null => false - t.integer "lft" - t.integer "rgt" - t.boolean "inherit_members", :default => false, :null => false - t.integer "project_type" - t.boolean "hidden_repo", :default => false, :null => false - t.integer "attachmenttype", :default => 1 - t.integer "user_id" - t.integer "dts_test", :default => 0 - t.string "enterprise_name" - t.integer "organization_id" - t.integer "project_new_type" - t.integer "gpid" - t.integer "forked_from_project_id" - t.integer "forked_count" - t.integer "commits_count", :default => 0 - t.integer "publish_resource", :default => 0 - t.integer "issues_count", :default => 0 - t.integer "attachments_count", :default => 0 - t.integer "boards_count", :default => 0 - t.integer "news_count", :default => 0 - t.integer "acts_count", :default => 0 - t.integer "journals_count", :default => 0 - t.integer "boards_reply_count", :default => 0 - end - - add_index "projects", ["lft"], :name => "index_projects_on_lft" - add_index "projects", ["rgt"], :name => "index_projects_on_rgt" - - create_table "projects_trackers", :id => false, :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.integer "tracker_id", :default => 0, :null => false - end - - add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true - add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id" - - create_table "queries", :force => true do |t| - t.integer "project_id" - t.string "name", :default => "", :null => false - t.text "filters" - t.integer "user_id", :default => 0, :null => false - t.boolean "is_public", :default => false, :null => false - t.text "column_names" - t.text "sort_criteria" - t.string "group_by" - t.string "type" - end - - add_index "queries", ["project_id"], :name => "index_queries_on_project_id" - add_index "queries", ["user_id"], :name => "index_queries_on_user_id" - - create_table "relative_memo_to_open_source_projects", :force => true do |t| - t.integer "osp_id" - t.integer "relative_memo_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "relative_memos", :force => true do |t| - t.integer "osp_id" - t.integer "parent_id" - t.string "subject", :null => false - t.text "content", :limit => 16777215, :null => false - t.integer "author_id" - t.integer "replies_count", :default => 0 - t.integer "last_reply_id" - t.boolean "lock", :default => false - t.boolean "sticky", :default => false - t.boolean "is_quote", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "viewed_count_crawl", :default => 0 - t.integer "viewed_count_local", :default => 0 - t.string "url" - t.string "username" - t.string "userhomeurl" - t.date "date_collected" - t.string "topic_resource" - end - - create_table "repositories", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "url", :default => "", :null => false - t.string "login", :limit => 60, :default => "" - t.string "password", :default => "" - t.string "root_url", :default => "" - t.string "type" - t.string "path_encoding", :limit => 64 - t.string "log_encoding", :limit => 64 - t.text "extra_info" - t.string "identifier" - t.boolean "is_default", :default => false - t.boolean "hidden", :default => false - end - - add_index "repositories", ["project_id"], :name => "index_repositories_on_project_id" - - create_table "rich_rich_files", :force => true do |t| - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "rich_file_file_name" - t.string "rich_file_content_type" - t.integer "rich_file_file_size" - t.datetime "rich_file_updated_at" - t.string "owner_type" - t.integer "owner_id" - t.text "uri_cache" - t.string "simplified_type", :default => "file" - end - - create_table "roles", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.integer "position", :default => 1 - t.boolean "assignable", :default => true - t.integer "builtin", :default => 0, :null => false - t.text "permissions" - t.string "issues_visibility", :limit => 30, :default => "default", :null => false - end - - create_table "schools", :force => true do |t| - t.string "name" - t.string "province" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "logo_link" - t.string "pinyin" - end - - create_table "secdomains", :force => true do |t| - t.integer "sub_type" - t.string "subname" - t.integer "pid", :default => 0 - t.string "desc" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "seems_rateable_cached_ratings", :force => true do |t| - t.integer "cacheable_id", :limit => 8 - t.string "cacheable_type" - t.float "avg", :null => false - t.integer "cnt", :null => false - t.string "dimension" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "seems_rateable_rates", :force => true do |t| - t.integer "rater_id", :limit => 8 - t.integer "rateable_id" - t.string "rateable_type" - t.float "stars", :null => false - t.string "dimension" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "is_teacher_score", :default => 0 - end - - create_table "settings", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "value" - t.datetime "updated_on" - end - - add_index "settings", ["name"], :name => "index_settings_on_name" - - create_table "shares", :force => true do |t| - t.date "created_on" - t.string "url" - t.string "title" - t.integer "share_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "project_id" - t.integer "user_id" - t.string "description" - end - - create_table "shield_activities", :force => true do |t| - t.string "container_type" - t.integer "container_id" - t.string "shield_type" - t.integer "shield_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "softapplications", :force => true do |t| - t.string "name" - t.text "description" - t.integer "app_type_id" - t.string "app_type_name" - t.string "android_min_version_available" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "contest_id" - t.integer "softapplication_id" - t.integer "is_public" - t.string "application_developers" - t.string "deposit_project_url" - t.string "deposit_project" - t.integer "project_id" - end - - create_table "student_work_projects", :force => true do |t| - t.integer "homework_common_id" - t.integer "student_work_id" - t.integer "project_id" - t.integer "user_id" - t.integer "is_leader" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "student_work_projects", ["homework_common_id"], :name => "index_student_work_projects_on_homework_common_id" - add_index "student_work_projects", ["project_id"], :name => "index_student_work_projects_on_project_id" - add_index "student_work_projects", ["student_work_id"], :name => "index_student_work_projects_on_student_work_id" - add_index "student_work_projects", ["user_id"], :name => "index_student_work_projects_on_user_id" - - create_table "student_work_tests", :force => true do |t| - t.integer "student_work_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "status", :default => 9 - t.text "results" - t.text "src" - end - - create_table "student_works", :force => true do |t| - t.string "name" - t.text "description", :limit => 2147483647 - t.integer "homework_common_id" - t.integer "user_id" - t.float "final_score" - t.float "teacher_score" - t.float "student_score" - t.float "teaching_asistant_score" - t.integer "project_id", :default => 0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "late_penalty", :default => 0 - t.integer "absence_penalty", :default => 0 - t.float "system_score", :default => 0.0 - t.boolean "is_test", :default => false - end - - add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id" - - create_table "student_works_evaluation_distributions", :force => true do |t| - t.integer "student_work_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "student_works_scores", :force => true do |t| - t.integer "student_work_id" - t.integer "user_id" - t.integer "score" - t.text "comment" - t.integer "reviewer_role" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "students_for_courses", :force => true do |t| - t.integer "student_id" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "students_for_courses", ["course_id"], :name => "index_students_for_courses_on_course_id" - add_index "students_for_courses", ["student_id"], :name => "index_students_for_courses_on_student_id" - - create_table "subfield_subdomain_dirs", :force => true do |t| - t.integer "org_subfield_id" - t.string "name" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "system_messages", :force => true do |t| - t.integer "user_id" - t.string "content" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.text "description" - t.string "subject" - end - - create_table "taggings", :force => true do |t| - t.integer "tag_id" - t.integer "taggable_id" - t.string "taggable_type" - t.integer "tagger_id" - t.string "tagger_type" - t.string "context", :limit => 128 - t.datetime "created_at" - end - - add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id" - add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context" - add_index "taggings", ["taggable_type"], :name => "index_taggings_on_taggable_type" - - create_table "tags", :force => true do |t| - t.string "name" - end - - create_table "teachers", :force => true do |t| - t.string "tea_name" - t.string "location" - t.integer "couurse_time" - t.integer "course_code" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "extra" - end - - create_table "time_entries", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false - t.integer "issue_id" - t.float "hours", :null => false - t.string "comments" - t.integer "activity_id", :null => false - t.date "spent_on", :null => false - t.integer "tyear", :null => false - t.integer "tmonth", :null => false - t.integer "tweek", :null => false - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - add_index "time_entries", ["activity_id"], :name => "index_time_entries_on_activity_id" - add_index "time_entries", ["created_on"], :name => "index_time_entries_on_created_on" - add_index "time_entries", ["issue_id"], :name => "time_entries_issue_id" - add_index "time_entries", ["project_id"], :name => "time_entries_project_id" - add_index "time_entries", ["user_id"], :name => "index_time_entries_on_user_id" - - create_table "tokens", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.string "action", :limit => 30, :default => "", :null => false - t.string "value", :limit => 40, :default => "", :null => false - t.datetime "created_on", :null => false - end - - add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id" - add_index "tokens", ["value"], :name => "tokens_value", :unique => true - - create_table "trackers", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.boolean "is_in_chlog", :default => false, :null => false - t.integer "position", :default => 1 - t.boolean "is_in_roadmap", :default => true, :null => false - t.integer "fields_bits", :default => 0 - end - - create_table "user_activities", :force => true do |t| - t.string "act_type" - t.integer "act_id" - t.string "container_type" - t.integer "container_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "user_id" - end - - create_table "user_extensions", :force => true do |t| - t.integer "user_id", :null => false - t.date "birthday" - t.string "brief_introduction" - t.integer "gender" - t.string "location" - t.string "occupation" - t.integer "work_experience" - t.integer "zip_code" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "technical_title" - t.integer "identity" - t.string "student_id" - t.string "teacher_realname" - t.string "student_realname" - t.string "location_city" - t.integer "school_id" - t.string "description", :default => "" - end - - create_table "user_feedback_messages", :force => true do |t| - t.integer "user_id" - t.integer "journals_for_message_id" - t.string "journals_for_message_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_grades", :force => true do |t| - t.integer "user_id", :null => false - t.integer "project_id", :null => false - t.float "grade", :default => 0.0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "user_grades", ["grade"], :name => "index_user_grades_on_grade" - add_index "user_grades", ["project_id"], :name => "index_user_grades_on_project_id" - add_index "user_grades", ["user_id"], :name => "index_user_grades_on_user_id" - - create_table "user_levels", :force => true do |t| - t.integer "user_id" - t.integer "level" - end - - create_table "user_preferences", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.text "others" - t.boolean "hide_mail", :default => false - t.string "time_zone" - end - - add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id" - - create_table "user_score_details", :force => true do |t| - t.integer "current_user_id" - t.integer "target_user_id" - t.string "score_type" - t.string "score_action" - t.integer "user_id" - t.integer "old_score" - t.integer "new_score" - t.integer "current_user_level" - t.integer "target_user_level" - t.integer "score_changeable_obj_id" - t.string "score_changeable_obj_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_scores", :force => true do |t| - t.integer "user_id", :null => false - t.integer "collaboration" - t.integer "influence" - t.integer "skill" - t.integer "active" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.float "grade", :default => 0.0 - end - - add_index "user_statuses", ["changesets_count"], :name => "index_user_statuses_on_changesets_count" - add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade" - add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count" - - create_table "users", :force => true do |t| - t.string "login", :default => "", :null => false - t.string "hashed_password", :limit => 40, :default => "", :null => false - t.string "firstname", :limit => 30, :default => "", :null => false - t.string "lastname", :default => "", :null => false - t.string "mail", :limit => 60, :default => "", :null => false - t.boolean "admin", :default => false, :null => false - t.integer "status", :default => 1, :null => false - t.datetime "last_login_on" - t.string "language", :limit => 5, :default => "" - t.integer "auth_source_id" - t.datetime "created_on" - t.datetime "updated_on" - t.string "type" - t.string "identity_url" - t.string "mail_notification", :default => "", :null => false - t.string "salt", :limit => 64 - t.integer "gid" - end - - add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id" - add_index "users", ["id", "type"], :name => "index_users_on_id_and_type" - add_index "users", ["type"], :name => "index_users_on_type" - - create_table "versions", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "name", :default => "", :null => false - t.string "description", :default => "" - t.date "effective_date" - t.datetime "created_on" - t.datetime "updated_on" - t.string "wiki_page_title" - t.string "status", :default => "open" - t.string "sharing", :default => "none", :null => false - end - - add_index "versions", ["project_id"], :name => "versions_project_id" - add_index "versions", ["sharing"], :name => "index_versions_on_sharing" - - create_table "visitors", :force => true do |t| - t.integer "user_id" - t.integer "master_id" - t.datetime "updated_on" - t.datetime "created_on" - end - - add_index "visitors", ["master_id"], :name => "index_visitors_master_id" - add_index "visitors", ["updated_on"], :name => "index_visitors_updated_on" - add_index "visitors", ["user_id"], :name => "index_visitors_user_id" - - create_table "watchers", :force => true do |t| - t.string "watchable_type", :default => "", :null => false - t.integer "watchable_id", :default => 0, :null => false - t.integer "user_id" - end - - add_index "watchers", ["user_id", "watchable_type"], :name => "watchers_user_id_type" - add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id" - add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type" - - create_table "web_footer_companies", :force => true do |t| - t.string "name" - t.string "logo_size" - t.string "url" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "web_footer_oranizers", :force => true do |t| - t.string "name" - t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - create_table "wiki_content_versions", :force => true do |t| t.integer "wiki_content_id", :null => false t.integer "page_id", :null => false @@ -4163,4 +2076,3 @@ ActiveRecord::Schema.define(:version => 20160225024759) do end end ->>>>>>> origin/szzh From 509d4a3df7e56893c0ca00f9f16564b58d96c853 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 16:56:37 +0800 Subject: [PATCH 066/423] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=94=B9=E4=B8=BAajax?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 6 +++--- .../base_wechat.html.erb} | 1 + app/views/wechats/login.html.erb | 14 +++++++++++--- public/javascripts/wechat/alert.js | 5 +++++ 4 files changed, 20 insertions(+), 6 deletions(-) rename app/views/{wechats/layout.html.erb => layouts/base_wechat.html.erb} (96%) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 1c14aece0..01dd135be 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -1,5 +1,5 @@ class WechatsController < ActionController::Base - layout 'wechat/layout' + layout 'base_wechat' wechat_responder @@ -179,9 +179,9 @@ class WechatsController < ActionController::Base uw = UserWechat.find_by_id(params[:state]) uw.user_id = user.id uw.save! - render :text => {status:0, msg: "绑定成功"} + render :text => {status:0, msg: "绑定成功"}.to_json rescue Exception=>e - render :text => {status: -1, msg: e.message} + render :text => {status: -1, msg: e.message}.to_json end end diff --git a/app/views/wechats/layout.html.erb b/app/views/layouts/base_wechat.html.erb similarity index 96% rename from app/views/wechats/layout.html.erb rename to app/views/layouts/base_wechat.html.erb index 8f93ac9a1..729f762ac 100644 --- a/app/views/wechats/layout.html.erb +++ b/app/views/layouts/base_wechat.html.erb @@ -7,6 +7,7 @@ 绑定用户 + <%= yield %> diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index d0cecb5f9..3d8037c7c 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -50,9 +50,17 @@ type: "POST", url: $("#main_login_form").attr("action"), data:data, - dataType: "json" - }).done(function(data){ - + dataType: 'json', + success: function(data){ + console.log(data); + if(data.status == 0){ + byConfirm(data.msg, function(){ + window.closeWindow(); + }); + } else { + byAlert(data.msg, "绑定失败"); + } + } }); }) diff --git a/public/javascripts/wechat/alert.js b/public/javascripts/wechat/alert.js index bda0150a9..e41718fc2 100644 --- a/public/javascripts/wechat/alert.js +++ b/public/javascripts/wechat/alert.js @@ -35,4 +35,9 @@ $(function(){ $dialog.hide(); }); } + + + window.closeWindow = function(){ + WeixinJSBridge.call('closeWindow'); + } }); \ No newline at end of file From d5e894561965121d6ab4cd91e9f3002d23ec6822 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 17:06:40 +0800 Subject: [PATCH 067/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 6 +++++- config/menu.yml | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 01dd135be..beee86472 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -7,7 +7,7 @@ class WechatsController < ActionController::Base # default text responder when no other match on :text do |request, content| - request.reply.text "echo: #{content}" # Just echo + request.reply.text "您的意见已收到" # Just echo end # When receive 'help', will trigger this responder @@ -121,6 +121,10 @@ class WechatsController < ActionController::Base # Any not match above will fail to below on :fallback, respond: 'fallback message' + on :click, with: 'FEEDBACK' do |request, key| + request.reply.text "如有反馈问题,请直接切入至输入框,发微信给我们即可" + end + on :click, with: 'MY_NEWS' do |request, key| uw = user_binded?(request[:FromUserName]) if uw && uw.user diff --git a/config/menu.yml b/config/menu.yml index 1a4927fbd..2f38a48a9 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -6,4 +6,8 @@ button: - type: "view" name: "进入网站" - url: "http://www.trustie.net/" \ No newline at end of file + url: "http://www.trustie.net/" + - + type: "click" + name: "意见返馈" + url: "FEEDBACK" \ No newline at end of file From c33b35383ddbb8e5148896d678ab345dcf7e7499 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 17:13:06 +0800 Subject: [PATCH 068/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- config/menu.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index beee86472..211979318 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -1,3 +1,4 @@ +#coding=utf-8 class WechatsController < ActionController::Base layout 'base_wechat' @@ -158,7 +159,6 @@ class WechatsController < ActionController::Base end def sendBind(request) - logger.deb openid = request[:FromUserName] attrs = wechat.user(openid) UserWechat.delete_all(openid: openid) diff --git a/config/menu.yml b/config/menu.yml index 2f38a48a9..95bc50cc5 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -10,4 +10,4 @@ button: - type: "click" name: "意见返馈" - url: "FEEDBACK" \ No newline at end of file + key: "FEEDBACK" \ No newline at end of file From b82341326752016d7855dfe16cb962a4b6d2cd40 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 17:16:48 +0800 Subject: [PATCH 069/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 211979318..b05099139 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -1,7 +1,5 @@ #coding=utf-8 class WechatsController < ActionController::Base - layout 'base_wechat' - wechat_responder include ApplicationHelper @@ -191,6 +189,7 @@ class WechatsController < ActionController::Base def login @openid = params[:openid] #TODO 安全性 + render 'wechats/login', layout: 'base_wechat' end private From 1b171e414c9d679fdd38a8fda9d61f71c94bd0ec Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 17:31:44 +0800 Subject: [PATCH 070/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index b05099139..937b6af5f 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -157,10 +157,6 @@ class WechatsController < ActionController::Base end def sendBind(request) - openid = request[:FromUserName] - attrs = wechat.user(openid) - UserWechat.delete_all(openid: openid) - uw = UserWechat.create!(attrs) news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } request.reply.news(news) do |article, n, index| # article is return object url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{login_wechat_url}&response_type=code&scope=snsapi_base&state=#{uw.id}#wechat_redirect" @@ -173,14 +169,21 @@ class WechatsController < ActionController::Base def bind begin - raise "非法操作, 微信ID不存在" unless params[:state] + raise "非法操作, 用户ID不存在" unless params[:state] + raise "非法操作, code不存在" unless params[:code] + openid = get_openid(params[:code]) + raise "无法获取到openid" unless openid + user, last_login_on = User.try_to_login(params[:username], params[:password]) raise "用户名或密码错误,请重新登录" unless user #补全用户信息 - uw = UserWechat.find_by_id(params[:state]) - uw.user_id = user.id - uw.save! + raise "此用户已经绑定了公众号" if user.user_wechat + + UserWechat.create!( + openid: openid, + user: user + ) render :text => {status:0, msg: "绑定成功"}.to_json rescue Exception=>e render :text => {status: -1, msg: e.message}.to_json @@ -193,6 +196,12 @@ class WechatsController < ActionController::Base end private + def get_openid(code) + url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=#{Wechat.config.appid}&secret=#{Wechat.config.secret}&code=#{code}&grant_type=authorization_code" + JSON.parse(URI.parse(url).read)["openid"] + end + + def user_binded?(openid) uw = UserWechat.where(openid: openid).first end From 8e1624fafe4ca21f7b0172c5d5f9567d24639b28 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 17:33:48 +0800 Subject: [PATCH 071/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 937b6af5f..4caf5668f 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -159,7 +159,7 @@ class WechatsController < ActionController::Base def sendBind(request) news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "您还未绑定确实的用户,请先绑定." } } request.reply.news(news) do |article, n, index| # article is return object - url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{login_wechat_url}&response_type=code&scope=snsapi_base&state=#{uw.id}#wechat_redirect" + url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{login_wechat_url}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect" article.item title: "#{n[:title]}", description: n[:content], pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png', @@ -169,7 +169,6 @@ class WechatsController < ActionController::Base def bind begin - raise "非法操作, 用户ID不存在" unless params[:state] raise "非法操作, code不存在" unless params[:code] openid = get_openid(params[:code]) raise "无法获取到openid" unless openid From f53d9e19f79a512933b14bab50885fcbac796234 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 17:55:03 +0800 Subject: [PATCH 072/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- app/views/wechats/login.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 4caf5668f..ccb3e4bfb 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -190,7 +190,7 @@ class WechatsController < ActionController::Base end def login - @openid = params[:openid] #TODO 安全性 + @code = params[:code] #TODO 安全性 render 'wechats/login', layout: 'base_wechat' end diff --git a/app/views/wechats/login.html.erb b/app/views/wechats/login.html.erb index 3d8037c7c..27898b690 100644 --- a/app/views/wechats/login.html.erb +++ b/app/views/wechats/login.html.erb @@ -23,7 +23,7 @@
- +
确定 From 697906509b17ed3d7a01bcec0ae50cb387a3c87b Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Tue, 1 Mar 2016 17:58:54 +0800 Subject: [PATCH 073/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index ccb3e4bfb..77c737359 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -172,6 +172,7 @@ class WechatsController < ActionController::Base raise "非法操作, code不存在" unless params[:code] openid = get_openid(params[:code]) raise "无法获取到openid" unless openid + raise "此微信号已绑定用户, 不能得复绑定" if UserWechat.where(openid: openid).first user, last_login_on = User.try_to_login(params[:username], params[:password]) raise "用户名或密码错误,请重新登录" unless user From 79004e1328829288543d16ebb59752f55e708e3d Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Thu, 3 Mar 2016 23:27:05 +0800 Subject: [PATCH 074/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 14 +++++++++----- config/menu.yml | 10 +++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 77c737359..ac744106a 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -24,7 +24,7 @@ class WechatsController < ActionController::Base end on :event, with: 'subscribe' do |request| - sendBind(request) + default_msg(request) end # When unsubscribe user scan qrcode qrscene_xxxxxx to subscribe in public account @@ -125,6 +125,10 @@ class WechatsController < ActionController::Base end on :click, with: 'MY_NEWS' do |request, key| + default_msg(req) + end + + def default_msg(request) uw = user_binded?(request[:FromUserName]) if uw && uw.user @@ -137,9 +141,9 @@ class WechatsController < ActionController::Base activity = process_activity(a) if activity news << {title: activity[0], - content: activity[1], - picurl: "#{i == 1 ? logo : 'https://www.trustie.net/'+activity[2]}", - url: activity[3] + content: activity[1], + picurl: "#{i == 1 ? logo : 'https://www.trustie.net/'+activity[2]}", + url: activity[3] } end @@ -172,7 +176,7 @@ class WechatsController < ActionController::Base raise "非法操作, code不存在" unless params[:code] openid = get_openid(params[:code]) raise "无法获取到openid" unless openid - raise "此微信号已绑定用户, 不能得复绑定" if UserWechat.where(openid: openid).first + raise "此微信号已绑定用户, 不能得复绑定" if user_binded?(openid) user, last_login_on = User.try_to_login(params[:username], params[:password]) raise "用户名或密码错误,请重新登录" unless user diff --git a/config/menu.yml b/config/menu.yml index 95bc50cc5..c88e94ec4 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -3,11 +3,11 @@ button: type: "click" name: "最新动态" key: "MY_NEWS" - - - type: "view" - name: "进入网站" - url: "http://www.trustie.net/" - type: "click" name: "意见返馈" - key: "FEEDBACK" \ No newline at end of file + key: "FEEDBACK" + - + type: "view" + name: "进入网站" + url: "http://www.trustie.net/" \ No newline at end of file From 3c513085d2cf3a832911b812eca0744391717204 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Mon, 7 Mar 2016 21:43:18 +0800 Subject: [PATCH 075/423] =?UTF-8?q?request=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index ac744106a..131d08b1b 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -125,7 +125,7 @@ class WechatsController < ActionController::Base end on :click, with: 'MY_NEWS' do |request, key| - default_msg(req) + default_msg(request) end def default_msg(request) From fbe1b2dac261a3a8557c25bc4970db50c11a73ad Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Mon, 21 Mar 2016 18:17:39 +0800 Subject: [PATCH 076/423] Merge branch 'guange_dev' into weixin_guange # Conflicts: # Gemfile # db/schema.rb --- app/api/mobile/api.rb | 3 + app/api/mobile/apis/issues.rb | 17 + app/api/mobile/entities/issue.rb | 9 + app/controllers/wechats_controller.rb | 2 +- public/javascripts/wechat/CommentBox.jsx | 108 + public/javascripts/wechat/JSXTransformer.js | 15924 +++++++++++++ public/javascripts/wechat/browser.min.js | 44 + public/javascripts/wechat/jquery.min.js | 5 + public/javascripts/wechat/marked.min.js | 6 + public/javascripts/wechat/react-dom.js | 42 + public/javascripts/wechat/react.js | 19535 ++++++++++++++++ public/javascripts/wechat/react.min.js | 15 + public/javascripts/wechat/wechat.jsx | 81 + .../javascripts/code_review.js | 706 +- .../stylesheets/activity.css | 6 +- .../stylesheets/code_review.css | 192 +- .../stylesheets/window_js/MIT-LICENSE | 38 +- .../stylesheets/window_js/alert.css | 238 +- .../stylesheets/window_js/alert_lite.css | 176 +- .../stylesheets/window_js/alphacube.css | 300 +- .../stylesheets/window_js/behavior.htc | 100 +- .../stylesheets/window_js/darkX.css | 242 +- .../stylesheets/window_js/debug.css | 50 +- .../stylesheets/window_js/default.css | 310 +- .../stylesheets/window_js/iefix/iepngfix.css | 6 +- .../stylesheets/window_js/iefix/iepngfix.htc | 106 +- .../stylesheets/window_js/lighting.css | 1920 +- .../window_js/lighting/pngbehavior.htc | 134 +- .../stylesheets/window_js/mac_os_x.css | 666 +- .../stylesheets/window_js/mac_os_x_dialog.css | 320 +- .../stylesheets/window_js/nuncio.css | 328 +- .../stylesheets/window_js/spread.css | 216 +- public/stylesheets/weui/weixin.css | 41 + 33 files changed, 38858 insertions(+), 3028 deletions(-) create mode 100644 app/api/mobile/apis/issues.rb create mode 100644 app/api/mobile/entities/issue.rb create mode 100644 public/javascripts/wechat/CommentBox.jsx create mode 100644 public/javascripts/wechat/JSXTransformer.js create mode 100644 public/javascripts/wechat/browser.min.js create mode 100644 public/javascripts/wechat/jquery.min.js create mode 100644 public/javascripts/wechat/marked.min.js create mode 100644 public/javascripts/wechat/react-dom.js create mode 100644 public/javascripts/wechat/react.js create mode 100644 public/javascripts/wechat/react.min.js create mode 100644 public/javascripts/wechat/wechat.jsx create mode 100644 public/stylesheets/weui/weixin.css diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb index a59b01776..91cae64ef 100644 --- a/app/api/mobile/api.rb +++ b/app/api/mobile/api.rb @@ -7,6 +7,8 @@ module Mobile require_relative 'apis/upgrade' require_relative 'apis/homeworks' require_relative 'apis/comments' + require_relative 'apis/issues' + class API < Grape::API version 'v1', using: :path format :json @@ -39,6 +41,7 @@ module Mobile mount Apis::Upgrade mount Apis::Homeworks mount Apis::Comments + mount Apis::Issues #add_swagger_documentation ({api_version: 'v1', base_path: 'http://u06.shellinfo.cn/trustie/api'}) #add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) if Rails.env.development? diff --git a/app/api/mobile/apis/issues.rb b/app/api/mobile/apis/issues.rb new file mode 100644 index 000000000..212a505e7 --- /dev/null +++ b/app/api/mobile/apis/issues.rb @@ -0,0 +1,17 @@ +#coding=utf-8 + +module Mobile + module Apis + class Issues< Grape::API + resources :issues do + + desc "get special issuse" + get ':id' do + issue = Issue.find(params[:id]) + present :data, issue, with: Mobile::Entities::Issue + present :status, 0 + end + end + end + end +end diff --git a/app/api/mobile/entities/issue.rb b/app/api/mobile/entities/issue.rb new file mode 100644 index 000000000..08edae5e2 --- /dev/null +++ b/app/api/mobile/entities/issue.rb @@ -0,0 +1,9 @@ +module Mobile + module Entities + class Issue + + +
+ ); + } +}); + +var CommentList = React.createClass({ + render: function(){ + + var commentNodes = this.props.data.map(function(comment){ + return ( + + {comment.text} + + ) + }); + + return ( +
+ {commentNodes} +
+ ); + } +}); + +var CommentForm = React.createClass({ + handleSubmit: function(e){ + e.preventDefault(); + + var author = this.refs.author.value.trim(); + var text = this.refs.text.value.trim(); + if(!text || !author){ + return; + } + + this.props.onCommentSubmit({author: author, text: text}); + + this.refs.author.value = ''; + this.refs.text.value = ''; + return; + }, + render: function(){ + return ( +
+ + + +
+ ); + } +}); + + +var Comment = React.createClass({ + + rawMarkup: function() { + var rawMarkup = marked(this.props.children.toString(), {sanitize: true}); + return { __html: rawMarkup }; + }, + + render: function(){ + return ( +
+

+ {this.props.author} +

+ +
+ ) + } +}) + +React.render(, document.getElementById("example")); \ No newline at end of file diff --git a/public/javascripts/wechat/JSXTransformer.js b/public/javascripts/wechat/JSXTransformer.js new file mode 100644 index 000000000..63608d408 --- /dev/null +++ b/public/javascripts/wechat/JSXTransformer.js @@ -0,0 +1,15924 @@ +/** + * JSXTransformer v0.13.0 + */ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSXTransformer = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + * @license MIT + */ + +var base64 = _dereq_('base64-js') +var ieee754 = _dereq_('ieee754') +var isArray = _dereq_('is-array') + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 +Buffer.poolSize = 8192 // not used by this implementation + +var kMaxLength = 0x3fffffff +var rootParent = {} + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Note: + * + * - Implementation must support adding new properties to `Uint8Array` instances. + * Firefox 4-29 lacked support, fixed in Firefox 30+. + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + * + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will + * get the Object implementation, which is slower but will work correctly. + */ +Buffer.TYPED_ARRAY_SUPPORT = (function () { + try { + var buf = new ArrayBuffer(0) + var arr = new Uint8Array(buf) + arr.foo = function () { return 42 } + return arr.foo() === 42 && // typed array instances can be augmented + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } +})() + +/** + * Class: Buffer + * ============= + * + * The Buffer constructor returns instances of `Uint8Array` that are augmented + * with function properties for all the node `Buffer` API functions. We use + * `Uint8Array` so that square bracket notation works as expected -- it returns + * a single octet. + * + * By augmenting the instances, we can avoid modifying the `Uint8Array` + * prototype. + */ +function Buffer (subject, encoding, noZero) { + if (!(this instanceof Buffer)) return new Buffer(subject, encoding, noZero) + + var type = typeof subject + var length + + if (type === 'number') { + length = +subject + } else if (type === 'string') { + length = Buffer.byteLength(subject, encoding) + } else if (type === 'object' && subject !== null) { + // assume object is array-like + if (subject.type === 'Buffer' && isArray(subject.data)) subject = subject.data + length = +subject.length + } else { + throw new TypeError('must start with number, buffer, array or string') + } + + if (length > kMaxLength) { + throw new RangeError('Attempt to allocate Buffer larger than maximum size: 0x' + + kMaxLength.toString(16) + ' bytes') + } + + if (length < 0) length = 0 + else length >>>= 0 // coerce to uint32 + + var self = this + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Preferred: Return an augmented `Uint8Array` instance for best performance + /*eslint-disable consistent-this */ + self = Buffer._augment(new Uint8Array(length)) + /*eslint-enable consistent-this */ + } else { + // Fallback: Return THIS instance of Buffer (created by `new`) + self.length = length + self._isBuffer = true + } + + var i + if (Buffer.TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') { + // Speed optimization -- use set if we're copying from a typed array + self._set(subject) + } else if (isArrayish(subject)) { + // Treat array-ish objects as a byte array + if (Buffer.isBuffer(subject)) { + for (i = 0; i < length; i++) { + self[i] = subject.readUInt8(i) + } + } else { + for (i = 0; i < length; i++) { + self[i] = ((subject[i] % 256) + 256) % 256 + } + } + } else if (type === 'string') { + self.write(subject, 0, encoding) + } else if (type === 'number' && !Buffer.TYPED_ARRAY_SUPPORT && !noZero) { + for (i = 0; i < length; i++) { + self[i] = 0 + } + } + + if (length > 0 && length <= Buffer.poolSize) self.parent = rootParent + + return self +} + +function SlowBuffer (subject, encoding, noZero) { + if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding, noZero) + + var buf = new Buffer(subject, encoding, noZero) + delete buf.parent + return buf +} + +Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) +} + +Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {} + if (i !== len) { + x = a[i] + y = b[i] + } + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'raw': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, totalLength) { + if (!isArray(list)) throw new TypeError('Usage: Buffer.concat(list[, length])') + + if (list.length === 0) { + return new Buffer(0) + } else if (list.length === 1) { + return list[0] + } + + var i + if (totalLength === undefined) { + totalLength = 0 + for (i = 0; i < list.length; i++) { + totalLength += list[i].length + } + } + + var buf = new Buffer(totalLength) + var pos = 0 + for (i = 0; i < list.length; i++) { + var item = list[i] + item.copy(buf, pos) + pos += item.length + } + return buf +} + +Buffer.byteLength = function byteLength (str, encoding) { + var ret + str = str + '' + switch (encoding || 'utf8') { + case 'ascii': + case 'binary': + case 'raw': + ret = str.length + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = str.length * 2 + break + case 'hex': + ret = str.length >>> 1 + break + case 'utf8': + case 'utf-8': + ret = utf8ToBytes(str).length + break + case 'base64': + ret = base64ToBytes(str).length + break + default: + ret = str.length + } + return ret +} + +// pre-set for values that may exist in the future +Buffer.prototype.length = undefined +Buffer.prototype.parent = undefined + +// toString(encoding, start=0, end=buffer.length) +Buffer.prototype.toString = function toString (encoding, start, end) { + var loweredCase = false + + start = start >>> 0 + end = end === undefined || end === Infinity ? this.length : end >>> 0 + + if (!encoding) encoding = 'utf8' + if (start < 0) start = 0 + if (end > this.length) end = this.length + if (end <= start) return '' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'binary': + return binarySlice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' + } + return '' +} + +Buffer.prototype.compare = function compare (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return 0 + return Buffer.compare(this, b) +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset) { + if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff + else if (byteOffset < -0x80000000) byteOffset = -0x80000000 + byteOffset >>= 0 + + if (this.length === 0) return -1 + if (byteOffset >= this.length) return -1 + + // Negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0) + + if (typeof val === 'string') { + if (val.length === 0) return -1 // special case: looking for empty string always fails + return String.prototype.indexOf.call(this, val, byteOffset) + } + if (Buffer.isBuffer(val)) { + return arrayIndexOf(this, val, byteOffset) + } + if (typeof val === 'number') { + if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') { + return Uint8Array.prototype.indexOf.call(this, val, byteOffset) + } + return arrayIndexOf(this, [ val ], byteOffset) + } + + function arrayIndexOf (arr, val, byteOffset) { + var foundIndex = -1 + for (var i = 0; byteOffset + i < arr.length; i++) { + if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex + } else { + foundIndex = -1 + } + } + return -1 + } + + throw new TypeError('val must be string, number or Buffer') +} + +// `get` will be removed in Node 0.13+ +Buffer.prototype.get = function get (offset) { + console.log('.get() is deprecated. Access using array indexes instead.') + return this.readUInt8(offset) +} + +// `set` will be removed in Node 0.13+ +Buffer.prototype.set = function set (v, offset) { + console.log('.set() is deprecated. Access using array indexes instead.') + return this.writeUInt8(v, offset) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new Error('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; i++) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) throw new Error('Invalid hex string') + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + var charsWritten = blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) + return charsWritten +} + +function asciiWrite (buf, string, offset, length) { + var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length) + return charsWritten +} + +function binaryWrite (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length) + return charsWritten +} + +function utf16leWrite (buf, string, offset, length) { + var charsWritten = blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) + return charsWritten +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length + length = undefined + } + } else { // legacy + var swap = encoding + encoding = offset + offset = length + length = swap + } + + offset = Number(offset) || 0 + + if (length < 0 || offset < 0 || offset > this.length) { + throw new RangeError('attempt to write outside buffer bounds') + } + + var remaining = this.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + encoding = String(encoding || 'utf8').toLowerCase() + + var ret + switch (encoding) { + case 'hex': + ret = hexWrite(this, string, offset, length) + break + case 'utf8': + case 'utf-8': + ret = utf8Write(this, string, offset, length) + break + case 'ascii': + ret = asciiWrite(this, string, offset, length) + break + case 'binary': + ret = binaryWrite(this, string, offset, length) + break + case 'base64': + ret = base64Write(this, string, offset, length) + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = utf16leWrite(this, string, offset, length) + break + default: + throw new TypeError('Unknown encoding: ' + encoding) + } + return ret +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + var res = '' + var tmp = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + if (buf[i] <= 0x7F) { + res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i]) + tmp = '' + } else { + tmp += '%' + buf[i].toString(16) + } + } + + return res + decodeUtf8Char(tmp) +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function binarySlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; i++) { + out += toHex(buf[i]) + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = Buffer._augment(this.subarray(start, end)) + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined, true) + for (var i = 0; i < sliceLen; i++) { + newBuf[i] = this[i + start] + } + } + + if (newBuf.length) newBuf.parent = this.parent || this + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) >>> 0 & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) >>> 0 & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = value + return offset + 1 +} + +function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = value + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = value + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = value + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkInt( + this, value, offset, byteLength, + Math.pow(2, 8 * byteLength - 1) - 1, + -Math.pow(2, 8 * byteLength - 1) + ) + } + + var i = 0 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkInt( + this, value, offset, byteLength, + Math.pow(2, 8 * byteLength - 1) - 1, + -Math.pow(2, 8 * byteLength - 1) + ) + } + + var i = byteLength - 1 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = value + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = value + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = value + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') + if (offset < 0) throw new RangeError('index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, target_start, start, end) { + var self = this // source + + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (target_start >= target.length) target_start = target.length + if (!target_start) target_start = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || self.length === 0) return 0 + + // Fatal error conditions + if (target_start < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= self.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - target_start < end - start) { + end = target.length - target_start + start + } + + var len = end - start + + if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < len; i++) { + target[i + target_start] = this[i + start] + } + } else { + target._set(this.subarray(start, start + len), target_start) + } + + return len +} + +// fill(value, start=0, end=buffer.length) +Buffer.prototype.fill = function fill (value, start, end) { + if (!value) value = 0 + if (!start) start = 0 + if (!end) end = this.length + + if (end < start) throw new RangeError('end < start') + + // Fill 0 bytes; we're done + if (end === start) return + if (this.length === 0) return + + if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') + if (end < 0 || end > this.length) throw new RangeError('end out of bounds') + + var i + if (typeof value === 'number') { + for (i = start; i < end; i++) { + this[i] = value + } + } else { + var bytes = utf8ToBytes(value.toString()) + var len = bytes.length + for (i = start; i < end; i++) { + this[i] = bytes[i % len] + } + } + + return this +} + +/** + * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. + * Added in Node 0.12. Only available in browsers that support ArrayBuffer. + */ +Buffer.prototype.toArrayBuffer = function toArrayBuffer () { + if (typeof Uint8Array !== 'undefined') { + if (Buffer.TYPED_ARRAY_SUPPORT) { + return (new Buffer(this)).buffer + } else { + var buf = new Uint8Array(this.length) + for (var i = 0, len = buf.length; i < len; i += 1) { + buf[i] = this[i] + } + return buf.buffer + } + } else { + throw new TypeError('Buffer.toArrayBuffer not supported in this browser') + } +} + +// HELPER FUNCTIONS +// ================ + +var BP = Buffer.prototype + +/** + * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods + */ +Buffer._augment = function _augment (arr) { + arr.constructor = Buffer + arr._isBuffer = true + + // save reference to original Uint8Array get/set methods before overwriting + arr._get = arr.get + arr._set = arr.set + + // deprecated, will be removed in node 0.13+ + arr.get = BP.get + arr.set = BP.set + + arr.write = BP.write + arr.toString = BP.toString + arr.toLocaleString = BP.toString + arr.toJSON = BP.toJSON + arr.equals = BP.equals + arr.compare = BP.compare + arr.indexOf = BP.indexOf + arr.copy = BP.copy + arr.slice = BP.slice + arr.readUIntLE = BP.readUIntLE + arr.readUIntBE = BP.readUIntBE + arr.readUInt8 = BP.readUInt8 + arr.readUInt16LE = BP.readUInt16LE + arr.readUInt16BE = BP.readUInt16BE + arr.readUInt32LE = BP.readUInt32LE + arr.readUInt32BE = BP.readUInt32BE + arr.readIntLE = BP.readIntLE + arr.readIntBE = BP.readIntBE + arr.readInt8 = BP.readInt8 + arr.readInt16LE = BP.readInt16LE + arr.readInt16BE = BP.readInt16BE + arr.readInt32LE = BP.readInt32LE + arr.readInt32BE = BP.readInt32BE + arr.readFloatLE = BP.readFloatLE + arr.readFloatBE = BP.readFloatBE + arr.readDoubleLE = BP.readDoubleLE + arr.readDoubleBE = BP.readDoubleBE + arr.writeUInt8 = BP.writeUInt8 + arr.writeUIntLE = BP.writeUIntLE + arr.writeUIntBE = BP.writeUIntBE + arr.writeUInt16LE = BP.writeUInt16LE + arr.writeUInt16BE = BP.writeUInt16BE + arr.writeUInt32LE = BP.writeUInt32LE + arr.writeUInt32BE = BP.writeUInt32BE + arr.writeIntLE = BP.writeIntLE + arr.writeIntBE = BP.writeIntBE + arr.writeInt8 = BP.writeInt8 + arr.writeInt16LE = BP.writeInt16LE + arr.writeInt16BE = BP.writeInt16BE + arr.writeInt32LE = BP.writeInt32LE + arr.writeInt32BE = BP.writeInt32BE + arr.writeFloatLE = BP.writeFloatLE + arr.writeFloatBE = BP.writeFloatBE + arr.writeDoubleLE = BP.writeDoubleLE + arr.writeDoubleBE = BP.writeDoubleBE + arr.fill = BP.fill + arr.inspect = BP.inspect + arr.toArrayBuffer = BP.toArrayBuffer + + return arr +} + +var INVALID_BASE64_RE = /[^+\/0-9A-z\-]/g + +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') +} + +function isArrayish (subject) { + return isArray(subject) || Buffer.isBuffer(subject) || + subject && typeof subject === 'object' && + typeof subject.length === 'number' +} + +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + var i = 0 + + for (; i < length; i++) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (leadSurrogate) { + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } else { + // valid surrogate pair + codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000 + leadSurrogate = null + } + } else { + // no lead yet + + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else { + // valid lead + leadSurrogate = codePoint + continue + } + } + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = null + } + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x200000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; i++) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; i++) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; i++) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +function decodeUtf8Char (str) { + try { + return decodeURIComponent(str) + } catch (err) { + return String.fromCharCode(0xFFFD) // UTF 8 invalid char + } +} + +},{"base64-js":4,"ieee754":5,"is-array":6}],4:[function(_dereq_,module,exports){ +var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +;(function (exports) { + 'use strict'; + + var Arr = (typeof Uint8Array !== 'undefined') + ? Uint8Array + : Array + + var PLUS = '+'.charCodeAt(0) + var SLASH = '/'.charCodeAt(0) + var NUMBER = '0'.charCodeAt(0) + var LOWER = 'a'.charCodeAt(0) + var UPPER = 'A'.charCodeAt(0) + var PLUS_URL_SAFE = '-'.charCodeAt(0) + var SLASH_URL_SAFE = '_'.charCodeAt(0) + + function decode (elt) { + var code = elt.charCodeAt(0) + if (code === PLUS || + code === PLUS_URL_SAFE) + return 62 // '+' + if (code === SLASH || + code === SLASH_URL_SAFE) + return 63 // '/' + if (code < NUMBER) + return -1 //no match + if (code < NUMBER + 10) + return code - NUMBER + 26 + 26 + if (code < UPPER + 26) + return code - UPPER + if (code < LOWER + 26) + return code - LOWER + 26 + } + + function b64ToByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + + if (b64.length % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + var len = b64.length + placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(b64.length * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length + + var L = 0 + + function push (v) { + arr[L++] = v + } + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) + push((tmp & 0xFF0000) >> 16) + push((tmp & 0xFF00) >> 8) + push(tmp & 0xFF) + } + + if (placeHolders === 2) { + tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) + push(tmp & 0xFF) + } else if (placeHolders === 1) { + tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) + push((tmp >> 8) & 0xFF) + push(tmp & 0xFF) + } + + return arr + } + + function uint8ToBase64 (uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length + + function encode (num) { + return lookup.charAt(num) + } + + function tripletToBase64 (num) { + return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) + } + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output += tripletToBase64(temp) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1] + output += encode(temp >> 2) + output += encode((temp << 4) & 0x3F) + output += '==' + break + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) + output += encode(temp >> 10) + output += encode((temp >> 4) & 0x3F) + output += encode((temp << 2) & 0x3F) + output += '=' + break + } + + return output + } + + exports.toByteArray = b64ToByteArray + exports.fromByteArray = uint8ToBase64 +}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) + +},{}],5:[function(_dereq_,module,exports){ +exports.read = function(buffer, offset, isLE, mLen, nBytes) { + var e, m, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + nBits = -7, + i = isLE ? (nBytes - 1) : 0, + d = isLE ? -1 : 1, + s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity); + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; + +exports.write = function(buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), + i = isLE ? 0 : (nBytes - 1), + d = isLE ? 1 : -1, + s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); + + buffer[offset + i - d] |= s * 128; +}; + +},{}],6:[function(_dereq_,module,exports){ + +/** + * isArray + */ + +var isArray = Array.isArray; + +/** + * toString + */ + +var str = Object.prototype.toString; + +/** + * Whether or not the given `val` + * is an array. + * + * example: + * + * isArray([]); + * // > true + * isArray(arguments); + * // > false + * isArray(''); + * // > false + * + * @param {mixed} val + * @return {bool} + */ + +module.exports = isArray || function (val) { + return !! val && '[object Array]' == str.call(val); +}; + +},{}],7:[function(_dereq_,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,_dereq_('_process')) +},{"_process":8}],8:[function(_dereq_,module,exports){ +// shim for using process in browser + +var process = module.exports = {}; +var queue = []; +var draining = false; + +function drainQueue() { + if (draining) { + return; + } + draining = true; + var currentQueue; + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + var i = -1; + while (++i < len) { + currentQueue[i](); + } + len = queue.length; + } + draining = false; +} +process.nextTick = function (fun) { + queue.push(fun); + if (!draining) { + setTimeout(drainQueue, 0); + } +}; + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],9:[function(_dereq_,module,exports){ +/* + Copyright (C) 2013 Ariya Hidayat + Copyright (C) 2013 Thaddee Tyl + Copyright (C) 2012 Ariya Hidayat + Copyright (C) 2012 Mathias Bynens + Copyright (C) 2012 Joost-Wim Boekesteijn + Copyright (C) 2012 Kris Kowal + Copyright (C) 2012 Yusuke Suzuki + Copyright (C) 2012 Arpad Borsos + Copyright (C) 2011 Ariya Hidayat + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +(function (root, factory) { + 'use strict'; + + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, + // Rhino, and plain browser loading. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define(['exports'], factory); + } else if (typeof exports !== 'undefined') { + factory(exports); + } else { + factory((root.esprima = {})); + } +}(this, function (exports) { + 'use strict'; + + var Token, + TokenName, + FnExprTokens, + Syntax, + PropertyKind, + Messages, + Regex, + SyntaxTreeDelegate, + XHTMLEntities, + ClassPropertyType, + source, + strict, + index, + lineNumber, + lineStart, + length, + delegate, + lookahead, + state, + extra; + + Token = { + BooleanLiteral: 1, + EOF: 2, + Identifier: 3, + Keyword: 4, + NullLiteral: 5, + NumericLiteral: 6, + Punctuator: 7, + StringLiteral: 8, + RegularExpression: 9, + Template: 10, + JSXIdentifier: 11, + JSXText: 12 + }; + + TokenName = {}; + TokenName[Token.BooleanLiteral] = 'Boolean'; + TokenName[Token.EOF] = ''; + TokenName[Token.Identifier] = 'Identifier'; + TokenName[Token.Keyword] = 'Keyword'; + TokenName[Token.NullLiteral] = 'Null'; + TokenName[Token.NumericLiteral] = 'Numeric'; + TokenName[Token.Punctuator] = 'Punctuator'; + TokenName[Token.StringLiteral] = 'String'; + TokenName[Token.JSXIdentifier] = 'JSXIdentifier'; + TokenName[Token.JSXText] = 'JSXText'; + TokenName[Token.RegularExpression] = 'RegularExpression'; + + // A function following one of those tokens is an expression. + FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new', + 'return', 'case', 'delete', 'throw', 'void', + // assignment operators + '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=', + '&=', '|=', '^=', ',', + // binary/unary operators + '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&', + '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=', + '<=', '<', '>', '!=', '!==']; + + Syntax = { + AnyTypeAnnotation: 'AnyTypeAnnotation', + ArrayExpression: 'ArrayExpression', + ArrayPattern: 'ArrayPattern', + ArrayTypeAnnotation: 'ArrayTypeAnnotation', + ArrowFunctionExpression: 'ArrowFunctionExpression', + AssignmentExpression: 'AssignmentExpression', + BinaryExpression: 'BinaryExpression', + BlockStatement: 'BlockStatement', + BooleanTypeAnnotation: 'BooleanTypeAnnotation', + BreakStatement: 'BreakStatement', + CallExpression: 'CallExpression', + CatchClause: 'CatchClause', + ClassBody: 'ClassBody', + ClassDeclaration: 'ClassDeclaration', + ClassExpression: 'ClassExpression', + ClassImplements: 'ClassImplements', + ClassProperty: 'ClassProperty', + ComprehensionBlock: 'ComprehensionBlock', + ComprehensionExpression: 'ComprehensionExpression', + ConditionalExpression: 'ConditionalExpression', + ContinueStatement: 'ContinueStatement', + DebuggerStatement: 'DebuggerStatement', + DeclareClass: 'DeclareClass', + DeclareFunction: 'DeclareFunction', + DeclareModule: 'DeclareModule', + DeclareVariable: 'DeclareVariable', + DoWhileStatement: 'DoWhileStatement', + EmptyStatement: 'EmptyStatement', + ExportDeclaration: 'ExportDeclaration', + ExportBatchSpecifier: 'ExportBatchSpecifier', + ExportSpecifier: 'ExportSpecifier', + ExpressionStatement: 'ExpressionStatement', + ForInStatement: 'ForInStatement', + ForOfStatement: 'ForOfStatement', + ForStatement: 'ForStatement', + FunctionDeclaration: 'FunctionDeclaration', + FunctionExpression: 'FunctionExpression', + FunctionTypeAnnotation: 'FunctionTypeAnnotation', + FunctionTypeParam: 'FunctionTypeParam', + GenericTypeAnnotation: 'GenericTypeAnnotation', + Identifier: 'Identifier', + IfStatement: 'IfStatement', + ImportDeclaration: 'ImportDeclaration', + ImportDefaultSpecifier: 'ImportDefaultSpecifier', + ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', + ImportSpecifier: 'ImportSpecifier', + InterfaceDeclaration: 'InterfaceDeclaration', + InterfaceExtends: 'InterfaceExtends', + IntersectionTypeAnnotation: 'IntersectionTypeAnnotation', + LabeledStatement: 'LabeledStatement', + Literal: 'Literal', + LogicalExpression: 'LogicalExpression', + MemberExpression: 'MemberExpression', + MethodDefinition: 'MethodDefinition', + ModuleSpecifier: 'ModuleSpecifier', + NewExpression: 'NewExpression', + NullableTypeAnnotation: 'NullableTypeAnnotation', + NumberTypeAnnotation: 'NumberTypeAnnotation', + ObjectExpression: 'ObjectExpression', + ObjectPattern: 'ObjectPattern', + ObjectTypeAnnotation: 'ObjectTypeAnnotation', + ObjectTypeCallProperty: 'ObjectTypeCallProperty', + ObjectTypeIndexer: 'ObjectTypeIndexer', + ObjectTypeProperty: 'ObjectTypeProperty', + Program: 'Program', + Property: 'Property', + QualifiedTypeIdentifier: 'QualifiedTypeIdentifier', + ReturnStatement: 'ReturnStatement', + SequenceExpression: 'SequenceExpression', + SpreadElement: 'SpreadElement', + SpreadProperty: 'SpreadProperty', + StringLiteralTypeAnnotation: 'StringLiteralTypeAnnotation', + StringTypeAnnotation: 'StringTypeAnnotation', + SwitchCase: 'SwitchCase', + SwitchStatement: 'SwitchStatement', + TaggedTemplateExpression: 'TaggedTemplateExpression', + TemplateElement: 'TemplateElement', + TemplateLiteral: 'TemplateLiteral', + ThisExpression: 'ThisExpression', + ThrowStatement: 'ThrowStatement', + TupleTypeAnnotation: 'TupleTypeAnnotation', + TryStatement: 'TryStatement', + TypeAlias: 'TypeAlias', + TypeAnnotation: 'TypeAnnotation', + TypeCastExpression: 'TypeCastExpression', + TypeofTypeAnnotation: 'TypeofTypeAnnotation', + TypeParameterDeclaration: 'TypeParameterDeclaration', + TypeParameterInstantiation: 'TypeParameterInstantiation', + UnaryExpression: 'UnaryExpression', + UnionTypeAnnotation: 'UnionTypeAnnotation', + UpdateExpression: 'UpdateExpression', + VariableDeclaration: 'VariableDeclaration', + VariableDeclarator: 'VariableDeclarator', + VoidTypeAnnotation: 'VoidTypeAnnotation', + WhileStatement: 'WhileStatement', + WithStatement: 'WithStatement', + JSXIdentifier: 'JSXIdentifier', + JSXNamespacedName: 'JSXNamespacedName', + JSXMemberExpression: 'JSXMemberExpression', + JSXEmptyExpression: 'JSXEmptyExpression', + JSXExpressionContainer: 'JSXExpressionContainer', + JSXElement: 'JSXElement', + JSXClosingElement: 'JSXClosingElement', + JSXOpeningElement: 'JSXOpeningElement', + JSXAttribute: 'JSXAttribute', + JSXSpreadAttribute: 'JSXSpreadAttribute', + JSXText: 'JSXText', + YieldExpression: 'YieldExpression', + AwaitExpression: 'AwaitExpression' + }; + + PropertyKind = { + Data: 1, + Get: 2, + Set: 4 + }; + + ClassPropertyType = { + 'static': 'static', + prototype: 'prototype' + }; + + // Error messages should be identical to V8. + Messages = { + UnexpectedToken: 'Unexpected token %0', + UnexpectedNumber: 'Unexpected number', + UnexpectedString: 'Unexpected string', + UnexpectedIdentifier: 'Unexpected identifier', + UnexpectedReserved: 'Unexpected reserved word', + UnexpectedTemplate: 'Unexpected quasi %0', + UnexpectedEOS: 'Unexpected end of input', + NewlineAfterThrow: 'Illegal newline after throw', + InvalidRegExp: 'Invalid regular expression', + UnterminatedRegExp: 'Invalid regular expression: missing /', + InvalidLHSInAssignment: 'Invalid left-hand side in assignment', + InvalidLHSInFormalsList: 'Invalid left-hand side in formals list', + InvalidLHSInForIn: 'Invalid left-hand side in for-in', + MultipleDefaultsInSwitch: 'More than one default clause in switch statement', + NoCatchOrFinally: 'Missing catch or finally after try', + UnknownLabel: 'Undefined label \'%0\'', + Redeclaration: '%0 \'%1\' has already been declared', + IllegalContinue: 'Illegal continue statement', + IllegalBreak: 'Illegal break statement', + IllegalDuplicateClassProperty: 'Illegal duplicate property in class definition', + IllegalClassConstructorProperty: 'Illegal constructor property in class definition', + IllegalReturn: 'Illegal return statement', + IllegalSpread: 'Illegal spread element', + StrictModeWith: 'Strict mode code may not include a with statement', + StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', + StrictVarName: 'Variable name may not be eval or arguments in strict mode', + StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', + StrictParamDupe: 'Strict mode function may not have duplicate parameter names', + ParameterAfterRestParameter: 'Rest parameter must be final parameter of an argument list', + DefaultRestParameter: 'Rest parameter can not have a default value', + ElementAfterSpreadElement: 'Spread must be the final element of an element list', + PropertyAfterSpreadProperty: 'A rest property must be the final property of an object literal', + ObjectPatternAsRestParameter: 'Invalid rest parameter', + ObjectPatternAsSpread: 'Invalid spread argument', + StrictFunctionName: 'Function name may not be eval or arguments in strict mode', + StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', + StrictDelete: 'Delete of an unqualified identifier in strict mode.', + StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode', + AccessorDataProperty: 'Object literal may not have data and accessor property with the same name', + AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name', + StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', + StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', + StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', + StrictReservedWord: 'Use of future reserved word in strict mode', + MissingFromClause: 'Missing from clause', + NoAsAfterImportNamespace: 'Missing as after import *', + InvalidModuleSpecifier: 'Invalid module specifier', + IllegalImportDeclaration: 'Illegal import declaration', + IllegalExportDeclaration: 'Illegal export declaration', + NoUninitializedConst: 'Const must be initialized', + ComprehensionRequiresBlock: 'Comprehension must have at least one block', + ComprehensionError: 'Comprehension Error', + EachNotAllowed: 'Each is not supported', + InvalidJSXAttributeValue: 'JSX value should be either an expression or a quoted JSX text', + ExpectedJSXClosingTag: 'Expected corresponding JSX closing tag for %0', + AdjacentJSXElements: 'Adjacent JSX elements must be wrapped in an enclosing tag', + ConfusedAboutFunctionType: 'Unexpected token =>. It looks like ' + + 'you are trying to write a function type, but you ended up ' + + 'writing a grouped type followed by an =>, which is a syntax ' + + 'error. Remember, function type parameters are named so function ' + + 'types look like (name1: type1, name2: type2) => returnType. You ' + + 'probably wrote (type1) => returnType' + }; + + // See also tools/generate-unicode-regex.py. + Regex = { + NonAsciiIdentifierStart: new RegExp('[\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]'), + NonAsciiIdentifierPart: new RegExp('[\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u0800-\u082d\u0840-\u085b\u08a0\u08a2-\u08ac\u08e4-\u08fe\u0900-\u0963\u0966-\u096f\u0971-\u0977\u0979-\u097f\u0981-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58\u0c59\u0c60-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2\u0d02\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d57\u0d60-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17d3\u17d7\u17dc\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191c\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19d9\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1cd0-\u1cd2\u1cd4-\u1cf6\u1d00-\u1de6\u1dfc-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u200c\u200d\u203f\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099\u309a\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua697\ua69f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua827\ua840-\ua873\ua880-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua900-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a\uaa7b\uaa80-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabea\uabec\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\ufe70-\ufe74\ufe76-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]'), + LeadingZeros: new RegExp('^0+(?!$)') + }; + + // Ensure the condition is true, otherwise throw an error. + // This is only to have a better contract semantic, i.e. another safety net + // to catch a logic error. The condition shall be fulfilled in normal case. + // Do NOT use this to enforce a certain condition on any user input. + + function assert(condition, message) { + /* istanbul ignore if */ + if (!condition) { + throw new Error('ASSERT: ' + message); + } + } + + function StringMap() { + this.$data = {}; + } + + StringMap.prototype.get = function (key) { + key = '$' + key; + return this.$data[key]; + }; + + StringMap.prototype.set = function (key, value) { + key = '$' + key; + this.$data[key] = value; + return this; + }; + + StringMap.prototype.has = function (key) { + key = '$' + key; + return Object.prototype.hasOwnProperty.call(this.$data, key); + }; + + StringMap.prototype["delete"] = function (key) { + key = '$' + key; + return delete this.$data[key]; + }; + + function isDecimalDigit(ch) { + return (ch >= 48 && ch <= 57); // 0..9 + } + + function isHexDigit(ch) { + return '0123456789abcdefABCDEF'.indexOf(ch) >= 0; + } + + function isOctalDigit(ch) { + return '01234567'.indexOf(ch) >= 0; + } + + + // 7.2 White Space + + function isWhiteSpace(ch) { + return (ch === 32) || // space + (ch === 9) || // tab + (ch === 0xB) || + (ch === 0xC) || + (ch === 0xA0) || + (ch >= 0x1680 && '\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\uFEFF'.indexOf(String.fromCharCode(ch)) > 0); + } + + // 7.3 Line Terminators + + function isLineTerminator(ch) { + return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029); + } + + // 7.6 Identifier Names and Identifiers + + function isIdentifierStart(ch) { + return (ch === 36) || (ch === 95) || // $ (dollar) and _ (underscore) + (ch >= 65 && ch <= 90) || // A..Z + (ch >= 97 && ch <= 122) || // a..z + (ch === 92) || // \ (backslash) + ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch))); + } + + function isIdentifierPart(ch) { + return (ch === 36) || (ch === 95) || // $ (dollar) and _ (underscore) + (ch >= 65 && ch <= 90) || // A..Z + (ch >= 97 && ch <= 122) || // a..z + (ch >= 48 && ch <= 57) || // 0..9 + (ch === 92) || // \ (backslash) + ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch))); + } + + // 7.6.1.2 Future Reserved Words + + function isFutureReservedWord(id) { + switch (id) { + case 'class': + case 'enum': + case 'export': + case 'extends': + case 'import': + case 'super': + return true; + default: + return false; + } + } + + function isStrictModeReservedWord(id) { + switch (id) { + case 'implements': + case 'interface': + case 'package': + case 'private': + case 'protected': + case 'public': + case 'static': + case 'yield': + case 'let': + return true; + default: + return false; + } + } + + function isRestrictedWord(id) { + return id === 'eval' || id === 'arguments'; + } + + // 7.6.1.1 Keywords + + function isKeyword(id) { + if (strict && isStrictModeReservedWord(id)) { + return true; + } + + // 'const' is specialized as Keyword in V8. + // 'yield' is only treated as a keyword in strict mode. + // 'let' is for compatiblity with SpiderMonkey and ES.next. + // Some others are from future reserved words. + + switch (id.length) { + case 2: + return (id === 'if') || (id === 'in') || (id === 'do'); + case 3: + return (id === 'var') || (id === 'for') || (id === 'new') || + (id === 'try') || (id === 'let'); + case 4: + return (id === 'this') || (id === 'else') || (id === 'case') || + (id === 'void') || (id === 'with') || (id === 'enum'); + case 5: + return (id === 'while') || (id === 'break') || (id === 'catch') || + (id === 'throw') || (id === 'const') || + (id === 'class') || (id === 'super'); + case 6: + return (id === 'return') || (id === 'typeof') || (id === 'delete') || + (id === 'switch') || (id === 'export') || (id === 'import'); + case 7: + return (id === 'default') || (id === 'finally') || (id === 'extends'); + case 8: + return (id === 'function') || (id === 'continue') || (id === 'debugger'); + case 10: + return (id === 'instanceof'); + default: + return false; + } + } + + // 7.4 Comments + + function addComment(type, value, start, end, loc) { + var comment; + assert(typeof start === 'number', 'Comment must have valid position'); + + // Because the way the actual token is scanned, often the comments + // (if any) are skipped twice during the lexical analysis. + // Thus, we need to skip adding a comment if the comment array already + // handled it. + if (state.lastCommentStart >= start) { + return; + } + state.lastCommentStart = start; + + comment = { + type: type, + value: value + }; + if (extra.range) { + comment.range = [start, end]; + } + if (extra.loc) { + comment.loc = loc; + } + extra.comments.push(comment); + if (extra.attachComment) { + extra.leadingComments.push(comment); + extra.trailingComments.push(comment); + } + } + + function skipSingleLineComment() { + var start, loc, ch, comment; + + start = index - 2; + loc = { + start: { + line: lineNumber, + column: index - lineStart - 2 + } + }; + + while (index < length) { + ch = source.charCodeAt(index); + ++index; + if (isLineTerminator(ch)) { + if (extra.comments) { + comment = source.slice(start + 2, index - 1); + loc.end = { + line: lineNumber, + column: index - lineStart - 1 + }; + addComment('Line', comment, start, index - 1, loc); + } + if (ch === 13 && source.charCodeAt(index) === 10) { + ++index; + } + ++lineNumber; + lineStart = index; + return; + } + } + + if (extra.comments) { + comment = source.slice(start + 2, index); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + addComment('Line', comment, start, index, loc); + } + } + + function skipMultiLineComment() { + var start, loc, ch, comment; + + if (extra.comments) { + start = index - 2; + loc = { + start: { + line: lineNumber, + column: index - lineStart - 2 + } + }; + } + + while (index < length) { + ch = source.charCodeAt(index); + if (isLineTerminator(ch)) { + if (ch === 13 && source.charCodeAt(index + 1) === 10) { + ++index; + } + ++lineNumber; + ++index; + lineStart = index; + if (index >= length) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } else if (ch === 42) { + // Block comment ends with '*/' (char #42, char #47). + if (source.charCodeAt(index + 1) === 47) { + ++index; + ++index; + if (extra.comments) { + comment = source.slice(start + 2, index - 2); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + addComment('Block', comment, start, index, loc); + } + return; + } + ++index; + } else { + ++index; + } + } + + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + function skipComment() { + var ch; + + while (index < length) { + ch = source.charCodeAt(index); + + if (isWhiteSpace(ch)) { + ++index; + } else if (isLineTerminator(ch)) { + ++index; + if (ch === 13 && source.charCodeAt(index) === 10) { + ++index; + } + ++lineNumber; + lineStart = index; + } else if (ch === 47) { // 47 is '/' + ch = source.charCodeAt(index + 1); + if (ch === 47) { + ++index; + ++index; + skipSingleLineComment(); + } else if (ch === 42) { // 42 is '*' + ++index; + ++index; + skipMultiLineComment(); + } else { + break; + } + } else { + break; + } + } + } + + function scanHexEscape(prefix) { + var i, len, ch, code = 0; + + len = (prefix === 'u') ? 4 : 2; + for (i = 0; i < len; ++i) { + if (index < length && isHexDigit(source[index])) { + ch = source[index++]; + code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); + } else { + return ''; + } + } + return String.fromCharCode(code); + } + + function scanUnicodeCodePointEscape() { + var ch, code, cu1, cu2; + + ch = source[index]; + code = 0; + + // At least, one hex digit is required. + if (ch === '}') { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + while (index < length) { + ch = source[index++]; + if (!isHexDigit(ch)) { + break; + } + code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); + } + + if (code > 0x10FFFF || ch !== '}') { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + // UTF-16 Encoding + if (code <= 0xFFFF) { + return String.fromCharCode(code); + } + cu1 = ((code - 0x10000) >> 10) + 0xD800; + cu2 = ((code - 0x10000) & 1023) + 0xDC00; + return String.fromCharCode(cu1, cu2); + } + + function getEscapedIdentifier() { + var ch, id; + + ch = source.charCodeAt(index++); + id = String.fromCharCode(ch); + + // '\u' (char #92, char #117) denotes an escaped character. + if (ch === 92) { + if (source.charCodeAt(index) !== 117) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + ++index; + ch = scanHexEscape('u'); + if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + id = ch; + } + + while (index < length) { + ch = source.charCodeAt(index); + if (!isIdentifierPart(ch)) { + break; + } + ++index; + id += String.fromCharCode(ch); + + // '\u' (char #92, char #117) denotes an escaped character. + if (ch === 92) { + id = id.substr(0, id.length - 1); + if (source.charCodeAt(index) !== 117) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + ++index; + ch = scanHexEscape('u'); + if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + id += ch; + } + } + + return id; + } + + function getIdentifier() { + var start, ch; + + start = index++; + while (index < length) { + ch = source.charCodeAt(index); + if (ch === 92) { + // Blackslash (char #92) marks Unicode escape sequence. + index = start; + return getEscapedIdentifier(); + } + if (isIdentifierPart(ch)) { + ++index; + } else { + break; + } + } + + return source.slice(start, index); + } + + function scanIdentifier() { + var start, id, type; + + start = index; + + // Backslash (char #92) starts an escaped character. + id = (source.charCodeAt(index) === 92) ? getEscapedIdentifier() : getIdentifier(); + + // There is no keyword or literal with only one character. + // Thus, it must be an identifier. + if (id.length === 1) { + type = Token.Identifier; + } else if (isKeyword(id)) { + type = Token.Keyword; + } else if (id === 'null') { + type = Token.NullLiteral; + } else if (id === 'true' || id === 'false') { + type = Token.BooleanLiteral; + } else { + type = Token.Identifier; + } + + return { + type: type, + value: id, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + + // 7.7 Punctuators + + function scanPunctuator() { + var start = index, + code = source.charCodeAt(index), + code2, + ch1 = source[index], + ch2, + ch3, + ch4; + + if (state.inJSXTag || state.inJSXChild) { + // Don't need to check for '{' and '}' as it's already handled + // correctly by default. + switch (code) { + case 60: // < + case 62: // > + ++index; + return { + type: Token.Punctuator, + value: String.fromCharCode(code), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + } + + switch (code) { + // Check for most common single-character punctuators. + case 40: // ( open bracket + case 41: // ) close bracket + case 59: // ; semicolon + case 44: // , comma + case 123: // { open curly brace + case 125: // } close curly brace + case 91: // [ + case 93: // ] + case 58: // : + case 63: // ? + case 126: // ~ + ++index; + if (extra.tokenize) { + if (code === 40) { + extra.openParenToken = extra.tokens.length; + } else if (code === 123) { + extra.openCurlyToken = extra.tokens.length; + } + } + return { + type: Token.Punctuator, + value: String.fromCharCode(code), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + + default: + code2 = source.charCodeAt(index + 1); + + // '=' (char #61) marks an assignment or comparison operator. + if (code2 === 61) { + switch (code) { + case 37: // % + case 38: // & + case 42: // *: + case 43: // + + case 45: // - + case 47: // / + case 60: // < + case 62: // > + case 94: // ^ + case 124: // | + index += 2; + return { + type: Token.Punctuator, + value: String.fromCharCode(code) + String.fromCharCode(code2), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + + case 33: // ! + case 61: // = + index += 2; + + // !== and === + if (source.charCodeAt(index) === 61) { + ++index; + } + return { + type: Token.Punctuator, + value: source.slice(start, index), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + default: + break; + } + } + break; + } + + // Peek more characters. + + ch2 = source[index + 1]; + ch3 = source[index + 2]; + ch4 = source[index + 3]; + + // 4-character punctuator: >>>= + + if (ch1 === '>' && ch2 === '>' && ch3 === '>') { + if (ch4 === '=') { + index += 4; + return { + type: Token.Punctuator, + value: '>>>=', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + } + + // 3-character punctuators: === !== >>> <<= >>= + + if (ch1 === '>' && ch2 === '>' && ch3 === '>' && !state.inType) { + index += 3; + return { + type: Token.Punctuator, + value: '>>>', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '<' && ch2 === '<' && ch3 === '=') { + index += 3; + return { + type: Token.Punctuator, + value: '<<=', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '>' && ch2 === '>' && ch3 === '=') { + index += 3; + return { + type: Token.Punctuator, + value: '>>=', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '.' && ch2 === '.' && ch3 === '.') { + index += 3; + return { + type: Token.Punctuator, + value: '...', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // Other 2-character punctuators: ++ -- << >> && || + + // Don't match these tokens if we're in a type, since they never can + // occur and can mess up types like Map> + if (ch1 === ch2 && ('+-<>&|'.indexOf(ch1) >= 0) && !state.inType) { + index += 2; + return { + type: Token.Punctuator, + value: ch1 + ch2, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '=' && ch2 === '>') { + index += 2; + return { + type: Token.Punctuator, + value: '=>', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) { + ++index; + return { + type: Token.Punctuator, + value: ch1, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '.') { + ++index; + return { + type: Token.Punctuator, + value: ch1, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + // 7.8.3 Numeric Literals + + function scanHexLiteral(start) { + var number = ''; + + while (index < length) { + if (!isHexDigit(source[index])) { + break; + } + number += source[index++]; + } + + if (number.length === 0) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + if (isIdentifierStart(source.charCodeAt(index))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.NumericLiteral, + value: parseInt('0x' + number, 16), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanBinaryLiteral(start) { + var ch, number; + + number = ''; + + while (index < length) { + ch = source[index]; + if (ch !== '0' && ch !== '1') { + break; + } + number += source[index++]; + } + + if (number.length === 0) { + // only 0b or 0B + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + if (index < length) { + ch = source.charCodeAt(index); + /* istanbul ignore else */ + if (isIdentifierStart(ch) || isDecimalDigit(ch)) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + + return { + type: Token.NumericLiteral, + value: parseInt(number, 2), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanOctalLiteral(prefix, start) { + var number, octal; + + if (isOctalDigit(prefix)) { + octal = true; + number = '0' + source[index++]; + } else { + octal = false; + ++index; + number = ''; + } + + while (index < length) { + if (!isOctalDigit(source[index])) { + break; + } + number += source[index++]; + } + + if (!octal && number.length === 0) { + // only 0o or 0O + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.NumericLiteral, + value: parseInt(number, 8), + octal: octal, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanNumericLiteral() { + var number, start, ch; + + ch = source[index]; + assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), + 'Numeric literal must start with a decimal digit or a decimal point'); + + start = index; + number = ''; + if (ch !== '.') { + number = source[index++]; + ch = source[index]; + + // Hex number starts with '0x'. + // Octal number starts with '0'. + // Octal number in ES6 starts with '0o'. + // Binary number in ES6 starts with '0b'. + if (number === '0') { + if (ch === 'x' || ch === 'X') { + ++index; + return scanHexLiteral(start); + } + if (ch === 'b' || ch === 'B') { + ++index; + return scanBinaryLiteral(start); + } + if (ch === 'o' || ch === 'O' || isOctalDigit(ch)) { + return scanOctalLiteral(ch, start); + } + // decimal number starts with '0' such as '09' is illegal. + if (ch && isDecimalDigit(ch.charCodeAt(0))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + + while (isDecimalDigit(source.charCodeAt(index))) { + number += source[index++]; + } + ch = source[index]; + } + + if (ch === '.') { + number += source[index++]; + while (isDecimalDigit(source.charCodeAt(index))) { + number += source[index++]; + } + ch = source[index]; + } + + if (ch === 'e' || ch === 'E') { + number += source[index++]; + + ch = source[index]; + if (ch === '+' || ch === '-') { + number += source[index++]; + } + if (isDecimalDigit(source.charCodeAt(index))) { + while (isDecimalDigit(source.charCodeAt(index))) { + number += source[index++]; + } + } else { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + + if (isIdentifierStart(source.charCodeAt(index))) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.NumericLiteral, + value: parseFloat(number), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // 7.8.4 String Literals + + function scanStringLiteral() { + var str = '', quote, start, ch, code, unescaped, restore, octal = false; + + quote = source[index]; + assert((quote === '\'' || quote === '"'), + 'String literal must starts with a quote'); + + start = index; + ++index; + + while (index < length) { + ch = source[index++]; + + if (ch === quote) { + quote = ''; + break; + } else if (ch === '\\') { + ch = source[index++]; + if (!ch || !isLineTerminator(ch.charCodeAt(0))) { + switch (ch) { + case 'n': + str += '\n'; + break; + case 'r': + str += '\r'; + break; + case 't': + str += '\t'; + break; + case 'u': + case 'x': + if (source[index] === '{') { + ++index; + str += scanUnicodeCodePointEscape(); + } else { + restore = index; + unescaped = scanHexEscape(ch); + if (unescaped) { + str += unescaped; + } else { + index = restore; + str += ch; + } + } + break; + case 'b': + str += '\b'; + break; + case 'f': + str += '\f'; + break; + case 'v': + str += '\x0B'; + break; + + default: + if (isOctalDigit(ch)) { + code = '01234567'.indexOf(ch); + + // \0 is not octal escape sequence + if (code !== 0) { + octal = true; + } + + /* istanbul ignore else */ + if (index < length && isOctalDigit(source[index])) { + octal = true; + code = code * 8 + '01234567'.indexOf(source[index++]); + + // 3 digits are only allowed when string starts + // with 0, 1, 2, 3 + if ('0123'.indexOf(ch) >= 0 && + index < length && + isOctalDigit(source[index])) { + code = code * 8 + '01234567'.indexOf(source[index++]); + } + } + str += String.fromCharCode(code); + } else { + str += ch; + } + break; + } + } else { + ++lineNumber; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + lineStart = index; + } + } else if (isLineTerminator(ch.charCodeAt(0))) { + break; + } else { + str += ch; + } + } + + if (quote !== '') { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.StringLiteral, + value: str, + octal: octal, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanTemplate() { + var cooked = '', ch, start, terminated, tail, restore, unescaped, code, octal; + + terminated = false; + tail = false; + start = index; + + ++index; + + while (index < length) { + ch = source[index++]; + if (ch === '`') { + tail = true; + terminated = true; + break; + } else if (ch === '$') { + if (source[index] === '{') { + ++index; + terminated = true; + break; + } + cooked += ch; + } else if (ch === '\\') { + ch = source[index++]; + if (!isLineTerminator(ch.charCodeAt(0))) { + switch (ch) { + case 'n': + cooked += '\n'; + break; + case 'r': + cooked += '\r'; + break; + case 't': + cooked += '\t'; + break; + case 'u': + case 'x': + if (source[index] === '{') { + ++index; + cooked += scanUnicodeCodePointEscape(); + } else { + restore = index; + unescaped = scanHexEscape(ch); + if (unescaped) { + cooked += unescaped; + } else { + index = restore; + cooked += ch; + } + } + break; + case 'b': + cooked += '\b'; + break; + case 'f': + cooked += '\f'; + break; + case 'v': + cooked += '\v'; + break; + + default: + if (isOctalDigit(ch)) { + code = '01234567'.indexOf(ch); + + // \0 is not octal escape sequence + if (code !== 0) { + octal = true; + } + + /* istanbul ignore else */ + if (index < length && isOctalDigit(source[index])) { + octal = true; + code = code * 8 + '01234567'.indexOf(source[index++]); + + // 3 digits are only allowed when string starts + // with 0, 1, 2, 3 + if ('0123'.indexOf(ch) >= 0 && + index < length && + isOctalDigit(source[index])) { + code = code * 8 + '01234567'.indexOf(source[index++]); + } + } + cooked += String.fromCharCode(code); + } else { + cooked += ch; + } + break; + } + } else { + ++lineNumber; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + lineStart = index; + } + } else if (isLineTerminator(ch.charCodeAt(0))) { + ++lineNumber; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + lineStart = index; + cooked += '\n'; + } else { + cooked += ch; + } + } + + if (!terminated) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.Template, + value: { + cooked: cooked, + raw: source.slice(start + 1, index - ((tail) ? 1 : 2)) + }, + tail: tail, + octal: octal, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanTemplateElement(option) { + var startsWith, template; + + lookahead = null; + skipComment(); + + startsWith = (option.head) ? '`' : '}'; + + if (source[index] !== startsWith) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + template = scanTemplate(); + + peek(); + + return template; + } + + function testRegExp(pattern, flags) { + var tmp = pattern, + value; + + if (flags.indexOf('u') >= 0) { + // Replace each astral symbol and every Unicode code point + // escape sequence with a single ASCII symbol to avoid throwing on + // regular expressions that are only valid in combination with the + // `/u` flag. + // Note: replacing with the ASCII symbol `x` might cause false + // negatives in unlikely scenarios. For example, `[\u{61}-b]` is a + // perfectly valid pattern that is equivalent to `[a-b]`, but it + // would be replaced by `[x-b]` which throws an error. + tmp = tmp + .replace(/\\u\{([0-9a-fA-F]+)\}/g, function ($0, $1) { + if (parseInt($1, 16) <= 0x10FFFF) { + return 'x'; + } + throwError({}, Messages.InvalidRegExp); + }) + .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, 'x'); + } + + // First, detect invalid regular expressions. + try { + value = new RegExp(tmp); + } catch (e) { + throwError({}, Messages.InvalidRegExp); + } + + // Return a regular expression object for this pattern-flag pair, or + // `null` in case the current environment doesn't support the flags it + // uses. + try { + return new RegExp(pattern, flags); + } catch (exception) { + return null; + } + } + + function scanRegExpBody() { + var ch, str, classMarker, terminated, body; + + ch = source[index]; + assert(ch === '/', 'Regular expression literal must start with a slash'); + str = source[index++]; + + classMarker = false; + terminated = false; + while (index < length) { + ch = source[index++]; + str += ch; + if (ch === '\\') { + ch = source[index++]; + // ECMA-262 7.8.5 + if (isLineTerminator(ch.charCodeAt(0))) { + throwError({}, Messages.UnterminatedRegExp); + } + str += ch; + } else if (isLineTerminator(ch.charCodeAt(0))) { + throwError({}, Messages.UnterminatedRegExp); + } else if (classMarker) { + if (ch === ']') { + classMarker = false; + } + } else { + if (ch === '/') { + terminated = true; + break; + } else if (ch === '[') { + classMarker = true; + } + } + } + + if (!terminated) { + throwError({}, Messages.UnterminatedRegExp); + } + + // Exclude leading and trailing slash. + body = str.substr(1, str.length - 2); + return { + value: body, + literal: str + }; + } + + function scanRegExpFlags() { + var ch, str, flags, restore; + + str = ''; + flags = ''; + while (index < length) { + ch = source[index]; + if (!isIdentifierPart(ch.charCodeAt(0))) { + break; + } + + ++index; + if (ch === '\\' && index < length) { + ch = source[index]; + if (ch === 'u') { + ++index; + restore = index; + ch = scanHexEscape('u'); + if (ch) { + flags += ch; + for (str += '\\u'; restore < index; ++restore) { + str += source[restore]; + } + } else { + index = restore; + flags += 'u'; + str += '\\u'; + } + throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL'); + } else { + str += '\\'; + throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } else { + flags += ch; + str += ch; + } + } + + return { + value: flags, + literal: str + }; + } + + function scanRegExp() { + var start, body, flags, value; + + lookahead = null; + skipComment(); + start = index; + + body = scanRegExpBody(); + flags = scanRegExpFlags(); + value = testRegExp(body.value, flags.value); + + if (extra.tokenize) { + return { + type: Token.RegularExpression, + value: value, + regex: { + pattern: body.value, + flags: flags.value + }, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + return { + literal: body.literal + flags.literal, + value: value, + regex: { + pattern: body.value, + flags: flags.value + }, + range: [start, index] + }; + } + + function isIdentifierName(token) { + return token.type === Token.Identifier || + token.type === Token.Keyword || + token.type === Token.BooleanLiteral || + token.type === Token.NullLiteral; + } + + function advanceSlash() { + var prevToken, + checkToken; + // Using the following algorithm: + // https://github.com/mozilla/sweet.js/wiki/design + prevToken = extra.tokens[extra.tokens.length - 1]; + if (!prevToken) { + // Nothing before that: it cannot be a division. + return scanRegExp(); + } + if (prevToken.type === 'Punctuator') { + if (prevToken.value === ')') { + checkToken = extra.tokens[extra.openParenToken - 1]; + if (checkToken && + checkToken.type === 'Keyword' && + (checkToken.value === 'if' || + checkToken.value === 'while' || + checkToken.value === 'for' || + checkToken.value === 'with')) { + return scanRegExp(); + } + return scanPunctuator(); + } + if (prevToken.value === '}') { + // Dividing a function by anything makes little sense, + // but we have to check for that. + if (extra.tokens[extra.openCurlyToken - 3] && + extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') { + // Anonymous function. + checkToken = extra.tokens[extra.openCurlyToken - 4]; + if (!checkToken) { + return scanPunctuator(); + } + } else if (extra.tokens[extra.openCurlyToken - 4] && + extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') { + // Named function. + checkToken = extra.tokens[extra.openCurlyToken - 5]; + if (!checkToken) { + return scanRegExp(); + } + } else { + return scanPunctuator(); + } + // checkToken determines whether the function is + // a declaration or an expression. + if (FnExprTokens.indexOf(checkToken.value) >= 0) { + // It is an expression. + return scanPunctuator(); + } + // It is a declaration. + return scanRegExp(); + } + return scanRegExp(); + } + if (prevToken.type === 'Keyword' && prevToken.value !== 'this') { + return scanRegExp(); + } + return scanPunctuator(); + } + + function advance() { + var ch; + + if (!state.inJSXChild) { + skipComment(); + } + + if (index >= length) { + return { + type: Token.EOF, + lineNumber: lineNumber, + lineStart: lineStart, + range: [index, index] + }; + } + + if (state.inJSXChild) { + return advanceJSXChild(); + } + + ch = source.charCodeAt(index); + + // Very common: ( and ) and ; + if (ch === 40 || ch === 41 || ch === 58) { + return scanPunctuator(); + } + + // String literal starts with single quote (#39) or double quote (#34). + if (ch === 39 || ch === 34) { + if (state.inJSXTag) { + return scanJSXStringLiteral(); + } + return scanStringLiteral(); + } + + if (state.inJSXTag && isJSXIdentifierStart(ch)) { + return scanJSXIdentifier(); + } + + if (ch === 96) { + return scanTemplate(); + } + if (isIdentifierStart(ch)) { + return scanIdentifier(); + } + + // Dot (.) char #46 can also start a floating-point number, hence the need + // to check the next character. + if (ch === 46) { + if (isDecimalDigit(source.charCodeAt(index + 1))) { + return scanNumericLiteral(); + } + return scanPunctuator(); + } + + if (isDecimalDigit(ch)) { + return scanNumericLiteral(); + } + + // Slash (/) char #47 can also start a regex. + if (extra.tokenize && ch === 47) { + return advanceSlash(); + } + + return scanPunctuator(); + } + + function lex() { + var token; + + token = lookahead; + index = token.range[1]; + lineNumber = token.lineNumber; + lineStart = token.lineStart; + + lookahead = advance(); + + index = token.range[1]; + lineNumber = token.lineNumber; + lineStart = token.lineStart; + + return token; + } + + function peek() { + var pos, line, start; + + pos = index; + line = lineNumber; + start = lineStart; + lookahead = advance(); + index = pos; + lineNumber = line; + lineStart = start; + } + + function lookahead2() { + var adv, pos, line, start, result; + + // If we are collecting the tokens, don't grab the next one yet. + /* istanbul ignore next */ + adv = (typeof extra.advance === 'function') ? extra.advance : advance; + + pos = index; + line = lineNumber; + start = lineStart; + + // Scan for the next immediate token. + /* istanbul ignore if */ + if (lookahead === null) { + lookahead = adv(); + } + index = lookahead.range[1]; + lineNumber = lookahead.lineNumber; + lineStart = lookahead.lineStart; + + // Grab the token right after. + result = adv(); + index = pos; + lineNumber = line; + lineStart = start; + + return result; + } + + function rewind(token) { + index = token.range[0]; + lineNumber = token.lineNumber; + lineStart = token.lineStart; + lookahead = token; + } + + function markerCreate() { + if (!extra.loc && !extra.range) { + return undefined; + } + skipComment(); + return {offset: index, line: lineNumber, col: index - lineStart}; + } + + function markerCreatePreserveWhitespace() { + if (!extra.loc && !extra.range) { + return undefined; + } + return {offset: index, line: lineNumber, col: index - lineStart}; + } + + function processComment(node) { + var lastChild, + trailingComments, + bottomRight = extra.bottomRightStack, + last = bottomRight[bottomRight.length - 1]; + + if (node.type === Syntax.Program) { + /* istanbul ignore else */ + if (node.body.length > 0) { + return; + } + } + + if (extra.trailingComments.length > 0) { + if (extra.trailingComments[0].range[0] >= node.range[1]) { + trailingComments = extra.trailingComments; + extra.trailingComments = []; + } else { + extra.trailingComments.length = 0; + } + } else { + if (last && last.trailingComments && last.trailingComments[0].range[0] >= node.range[1]) { + trailingComments = last.trailingComments; + delete last.trailingComments; + } + } + + // Eating the stack. + if (last) { + while (last && last.range[0] >= node.range[0]) { + lastChild = last; + last = bottomRight.pop(); + } + } + + if (lastChild) { + if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) { + node.leadingComments = lastChild.leadingComments; + delete lastChild.leadingComments; + } + } else if (extra.leadingComments.length > 0 && extra.leadingComments[extra.leadingComments.length - 1].range[1] <= node.range[0]) { + node.leadingComments = extra.leadingComments; + extra.leadingComments = []; + } + + if (trailingComments) { + node.trailingComments = trailingComments; + } + + bottomRight.push(node); + } + + function markerApply(marker, node) { + if (extra.range) { + node.range = [marker.offset, index]; + } + if (extra.loc) { + node.loc = { + start: { + line: marker.line, + column: marker.col + }, + end: { + line: lineNumber, + column: index - lineStart + } + }; + node = delegate.postProcess(node); + } + if (extra.attachComment) { + processComment(node); + } + return node; + } + + SyntaxTreeDelegate = { + + name: 'SyntaxTree', + + postProcess: function (node) { + return node; + }, + + createArrayExpression: function (elements) { + return { + type: Syntax.ArrayExpression, + elements: elements + }; + }, + + createAssignmentExpression: function (operator, left, right) { + return { + type: Syntax.AssignmentExpression, + operator: operator, + left: left, + right: right + }; + }, + + createBinaryExpression: function (operator, left, right) { + var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : + Syntax.BinaryExpression; + return { + type: type, + operator: operator, + left: left, + right: right + }; + }, + + createBlockStatement: function (body) { + return { + type: Syntax.BlockStatement, + body: body + }; + }, + + createBreakStatement: function (label) { + return { + type: Syntax.BreakStatement, + label: label + }; + }, + + createCallExpression: function (callee, args) { + return { + type: Syntax.CallExpression, + callee: callee, + 'arguments': args + }; + }, + + createCatchClause: function (param, body) { + return { + type: Syntax.CatchClause, + param: param, + body: body + }; + }, + + createConditionalExpression: function (test, consequent, alternate) { + return { + type: Syntax.ConditionalExpression, + test: test, + consequent: consequent, + alternate: alternate + }; + }, + + createContinueStatement: function (label) { + return { + type: Syntax.ContinueStatement, + label: label + }; + }, + + createDebuggerStatement: function () { + return { + type: Syntax.DebuggerStatement + }; + }, + + createDoWhileStatement: function (body, test) { + return { + type: Syntax.DoWhileStatement, + body: body, + test: test + }; + }, + + createEmptyStatement: function () { + return { + type: Syntax.EmptyStatement + }; + }, + + createExpressionStatement: function (expression) { + return { + type: Syntax.ExpressionStatement, + expression: expression + }; + }, + + createForStatement: function (init, test, update, body) { + return { + type: Syntax.ForStatement, + init: init, + test: test, + update: update, + body: body + }; + }, + + createForInStatement: function (left, right, body) { + return { + type: Syntax.ForInStatement, + left: left, + right: right, + body: body, + each: false + }; + }, + + createForOfStatement: function (left, right, body) { + return { + type: Syntax.ForOfStatement, + left: left, + right: right, + body: body + }; + }, + + createFunctionDeclaration: function (id, params, defaults, body, rest, generator, expression, + isAsync, returnType, typeParameters) { + var funDecl = { + type: Syntax.FunctionDeclaration, + id: id, + params: params, + defaults: defaults, + body: body, + rest: rest, + generator: generator, + expression: expression, + returnType: returnType, + typeParameters: typeParameters + }; + + if (isAsync) { + funDecl.async = true; + } + + return funDecl; + }, + + createFunctionExpression: function (id, params, defaults, body, rest, generator, expression, + isAsync, returnType, typeParameters) { + var funExpr = { + type: Syntax.FunctionExpression, + id: id, + params: params, + defaults: defaults, + body: body, + rest: rest, + generator: generator, + expression: expression, + returnType: returnType, + typeParameters: typeParameters + }; + + if (isAsync) { + funExpr.async = true; + } + + return funExpr; + }, + + createIdentifier: function (name) { + return { + type: Syntax.Identifier, + name: name, + // Only here to initialize the shape of the object to ensure + // that the 'typeAnnotation' key is ordered before others that + // are added later (like 'loc' and 'range'). This just helps + // keep the shape of Identifier nodes consistent with everything + // else. + typeAnnotation: undefined, + optional: undefined + }; + }, + + createTypeAnnotation: function (typeAnnotation) { + return { + type: Syntax.TypeAnnotation, + typeAnnotation: typeAnnotation + }; + }, + + createTypeCast: function (expression, typeAnnotation) { + return { + type: Syntax.TypeCastExpression, + expression: expression, + typeAnnotation: typeAnnotation + }; + }, + + createFunctionTypeAnnotation: function (params, returnType, rest, typeParameters) { + return { + type: Syntax.FunctionTypeAnnotation, + params: params, + returnType: returnType, + rest: rest, + typeParameters: typeParameters + }; + }, + + createFunctionTypeParam: function (name, typeAnnotation, optional) { + return { + type: Syntax.FunctionTypeParam, + name: name, + typeAnnotation: typeAnnotation, + optional: optional + }; + }, + + createNullableTypeAnnotation: function (typeAnnotation) { + return { + type: Syntax.NullableTypeAnnotation, + typeAnnotation: typeAnnotation + }; + }, + + createArrayTypeAnnotation: function (elementType) { + return { + type: Syntax.ArrayTypeAnnotation, + elementType: elementType + }; + }, + + createGenericTypeAnnotation: function (id, typeParameters) { + return { + type: Syntax.GenericTypeAnnotation, + id: id, + typeParameters: typeParameters + }; + }, + + createQualifiedTypeIdentifier: function (qualification, id) { + return { + type: Syntax.QualifiedTypeIdentifier, + qualification: qualification, + id: id + }; + }, + + createTypeParameterDeclaration: function (params) { + return { + type: Syntax.TypeParameterDeclaration, + params: params + }; + }, + + createTypeParameterInstantiation: function (params) { + return { + type: Syntax.TypeParameterInstantiation, + params: params + }; + }, + + createAnyTypeAnnotation: function () { + return { + type: Syntax.AnyTypeAnnotation + }; + }, + + createBooleanTypeAnnotation: function () { + return { + type: Syntax.BooleanTypeAnnotation + }; + }, + + createNumberTypeAnnotation: function () { + return { + type: Syntax.NumberTypeAnnotation + }; + }, + + createStringTypeAnnotation: function () { + return { + type: Syntax.StringTypeAnnotation + }; + }, + + createStringLiteralTypeAnnotation: function (token) { + return { + type: Syntax.StringLiteralTypeAnnotation, + value: token.value, + raw: source.slice(token.range[0], token.range[1]) + }; + }, + + createVoidTypeAnnotation: function () { + return { + type: Syntax.VoidTypeAnnotation + }; + }, + + createTypeofTypeAnnotation: function (argument) { + return { + type: Syntax.TypeofTypeAnnotation, + argument: argument + }; + }, + + createTupleTypeAnnotation: function (types) { + return { + type: Syntax.TupleTypeAnnotation, + types: types + }; + }, + + createObjectTypeAnnotation: function (properties, indexers, callProperties) { + return { + type: Syntax.ObjectTypeAnnotation, + properties: properties, + indexers: indexers, + callProperties: callProperties + }; + }, + + createObjectTypeIndexer: function (id, key, value, isStatic) { + return { + type: Syntax.ObjectTypeIndexer, + id: id, + key: key, + value: value, + "static": isStatic + }; + }, + + createObjectTypeCallProperty: function (value, isStatic) { + return { + type: Syntax.ObjectTypeCallProperty, + value: value, + "static": isStatic + }; + }, + + createObjectTypeProperty: function (key, value, optional, isStatic) { + return { + type: Syntax.ObjectTypeProperty, + key: key, + value: value, + optional: optional, + "static": isStatic + }; + }, + + createUnionTypeAnnotation: function (types) { + return { + type: Syntax.UnionTypeAnnotation, + types: types + }; + }, + + createIntersectionTypeAnnotation: function (types) { + return { + type: Syntax.IntersectionTypeAnnotation, + types: types + }; + }, + + createTypeAlias: function (id, typeParameters, right) { + return { + type: Syntax.TypeAlias, + id: id, + typeParameters: typeParameters, + right: right + }; + }, + + createInterface: function (id, typeParameters, body, extended) { + return { + type: Syntax.InterfaceDeclaration, + id: id, + typeParameters: typeParameters, + body: body, + "extends": extended + }; + }, + + createInterfaceExtends: function (id, typeParameters) { + return { + type: Syntax.InterfaceExtends, + id: id, + typeParameters: typeParameters + }; + }, + + createDeclareFunction: function (id) { + return { + type: Syntax.DeclareFunction, + id: id + }; + }, + + createDeclareVariable: function (id) { + return { + type: Syntax.DeclareVariable, + id: id + }; + }, + + createDeclareModule: function (id, body) { + return { + type: Syntax.DeclareModule, + id: id, + body: body + }; + }, + + createJSXAttribute: function (name, value) { + return { + type: Syntax.JSXAttribute, + name: name, + value: value || null + }; + }, + + createJSXSpreadAttribute: function (argument) { + return { + type: Syntax.JSXSpreadAttribute, + argument: argument + }; + }, + + createJSXIdentifier: function (name) { + return { + type: Syntax.JSXIdentifier, + name: name + }; + }, + + createJSXNamespacedName: function (namespace, name) { + return { + type: Syntax.JSXNamespacedName, + namespace: namespace, + name: name + }; + }, + + createJSXMemberExpression: function (object, property) { + return { + type: Syntax.JSXMemberExpression, + object: object, + property: property + }; + }, + + createJSXElement: function (openingElement, closingElement, children) { + return { + type: Syntax.JSXElement, + openingElement: openingElement, + closingElement: closingElement, + children: children + }; + }, + + createJSXEmptyExpression: function () { + return { + type: Syntax.JSXEmptyExpression + }; + }, + + createJSXExpressionContainer: function (expression) { + return { + type: Syntax.JSXExpressionContainer, + expression: expression + }; + }, + + createJSXOpeningElement: function (name, attributes, selfClosing) { + return { + type: Syntax.JSXOpeningElement, + name: name, + selfClosing: selfClosing, + attributes: attributes + }; + }, + + createJSXClosingElement: function (name) { + return { + type: Syntax.JSXClosingElement, + name: name + }; + }, + + createIfStatement: function (test, consequent, alternate) { + return { + type: Syntax.IfStatement, + test: test, + consequent: consequent, + alternate: alternate + }; + }, + + createLabeledStatement: function (label, body) { + return { + type: Syntax.LabeledStatement, + label: label, + body: body + }; + }, + + createLiteral: function (token) { + var object = { + type: Syntax.Literal, + value: token.value, + raw: source.slice(token.range[0], token.range[1]) + }; + if (token.regex) { + object.regex = token.regex; + } + return object; + }, + + createMemberExpression: function (accessor, object, property) { + return { + type: Syntax.MemberExpression, + computed: accessor === '[', + object: object, + property: property + }; + }, + + createNewExpression: function (callee, args) { + return { + type: Syntax.NewExpression, + callee: callee, + 'arguments': args + }; + }, + + createObjectExpression: function (properties) { + return { + type: Syntax.ObjectExpression, + properties: properties + }; + }, + + createPostfixExpression: function (operator, argument) { + return { + type: Syntax.UpdateExpression, + operator: operator, + argument: argument, + prefix: false + }; + }, + + createProgram: function (body) { + return { + type: Syntax.Program, + body: body + }; + }, + + createProperty: function (kind, key, value, method, shorthand, computed) { + return { + type: Syntax.Property, + key: key, + value: value, + kind: kind, + method: method, + shorthand: shorthand, + computed: computed + }; + }, + + createReturnStatement: function (argument) { + return { + type: Syntax.ReturnStatement, + argument: argument + }; + }, + + createSequenceExpression: function (expressions) { + return { + type: Syntax.SequenceExpression, + expressions: expressions + }; + }, + + createSwitchCase: function (test, consequent) { + return { + type: Syntax.SwitchCase, + test: test, + consequent: consequent + }; + }, + + createSwitchStatement: function (discriminant, cases) { + return { + type: Syntax.SwitchStatement, + discriminant: discriminant, + cases: cases + }; + }, + + createThisExpression: function () { + return { + type: Syntax.ThisExpression + }; + }, + + createThrowStatement: function (argument) { + return { + type: Syntax.ThrowStatement, + argument: argument + }; + }, + + createTryStatement: function (block, guardedHandlers, handlers, finalizer) { + return { + type: Syntax.TryStatement, + block: block, + guardedHandlers: guardedHandlers, + handlers: handlers, + finalizer: finalizer + }; + }, + + createUnaryExpression: function (operator, argument) { + if (operator === '++' || operator === '--') { + return { + type: Syntax.UpdateExpression, + operator: operator, + argument: argument, + prefix: true + }; + } + return { + type: Syntax.UnaryExpression, + operator: operator, + argument: argument, + prefix: true + }; + }, + + createVariableDeclaration: function (declarations, kind) { + return { + type: Syntax.VariableDeclaration, + declarations: declarations, + kind: kind + }; + }, + + createVariableDeclarator: function (id, init) { + return { + type: Syntax.VariableDeclarator, + id: id, + init: init + }; + }, + + createWhileStatement: function (test, body) { + return { + type: Syntax.WhileStatement, + test: test, + body: body + }; + }, + + createWithStatement: function (object, body) { + return { + type: Syntax.WithStatement, + object: object, + body: body + }; + }, + + createTemplateElement: function (value, tail) { + return { + type: Syntax.TemplateElement, + value: value, + tail: tail + }; + }, + + createTemplateLiteral: function (quasis, expressions) { + return { + type: Syntax.TemplateLiteral, + quasis: quasis, + expressions: expressions + }; + }, + + createSpreadElement: function (argument) { + return { + type: Syntax.SpreadElement, + argument: argument + }; + }, + + createSpreadProperty: function (argument) { + return { + type: Syntax.SpreadProperty, + argument: argument + }; + }, + + createTaggedTemplateExpression: function (tag, quasi) { + return { + type: Syntax.TaggedTemplateExpression, + tag: tag, + quasi: quasi + }; + }, + + createArrowFunctionExpression: function (params, defaults, body, rest, expression, isAsync) { + var arrowExpr = { + type: Syntax.ArrowFunctionExpression, + id: null, + params: params, + defaults: defaults, + body: body, + rest: rest, + generator: false, + expression: expression + }; + + if (isAsync) { + arrowExpr.async = true; + } + + return arrowExpr; + }, + + createMethodDefinition: function (propertyType, kind, key, value, computed) { + return { + type: Syntax.MethodDefinition, + key: key, + value: value, + kind: kind, + 'static': propertyType === ClassPropertyType["static"], + computed: computed + }; + }, + + createClassProperty: function (key, typeAnnotation, computed, isStatic) { + return { + type: Syntax.ClassProperty, + key: key, + typeAnnotation: typeAnnotation, + computed: computed, + "static": isStatic + }; + }, + + createClassBody: function (body) { + return { + type: Syntax.ClassBody, + body: body + }; + }, + + createClassImplements: function (id, typeParameters) { + return { + type: Syntax.ClassImplements, + id: id, + typeParameters: typeParameters + }; + }, + + createClassExpression: function (id, superClass, body, typeParameters, superTypeParameters, implemented) { + return { + type: Syntax.ClassExpression, + id: id, + superClass: superClass, + body: body, + typeParameters: typeParameters, + superTypeParameters: superTypeParameters, + "implements": implemented + }; + }, + + createClassDeclaration: function (id, superClass, body, typeParameters, superTypeParameters, implemented) { + return { + type: Syntax.ClassDeclaration, + id: id, + superClass: superClass, + body: body, + typeParameters: typeParameters, + superTypeParameters: superTypeParameters, + "implements": implemented + }; + }, + + createModuleSpecifier: function (token) { + return { + type: Syntax.ModuleSpecifier, + value: token.value, + raw: source.slice(token.range[0], token.range[1]) + }; + }, + + createExportSpecifier: function (id, name) { + return { + type: Syntax.ExportSpecifier, + id: id, + name: name + }; + }, + + createExportBatchSpecifier: function () { + return { + type: Syntax.ExportBatchSpecifier + }; + }, + + createImportDefaultSpecifier: function (id) { + return { + type: Syntax.ImportDefaultSpecifier, + id: id + }; + }, + + createImportNamespaceSpecifier: function (id) { + return { + type: Syntax.ImportNamespaceSpecifier, + id: id + }; + }, + + createExportDeclaration: function (isDefault, declaration, specifiers, src) { + return { + type: Syntax.ExportDeclaration, + 'default': !!isDefault, + declaration: declaration, + specifiers: specifiers, + source: src + }; + }, + + createImportSpecifier: function (id, name) { + return { + type: Syntax.ImportSpecifier, + id: id, + name: name + }; + }, + + createImportDeclaration: function (specifiers, src, isType) { + return { + type: Syntax.ImportDeclaration, + specifiers: specifiers, + source: src, + isType: isType + }; + }, + + createYieldExpression: function (argument, dlg) { + return { + type: Syntax.YieldExpression, + argument: argument, + delegate: dlg + }; + }, + + createAwaitExpression: function (argument) { + return { + type: Syntax.AwaitExpression, + argument: argument + }; + }, + + createComprehensionExpression: function (filter, blocks, body) { + return { + type: Syntax.ComprehensionExpression, + filter: filter, + blocks: blocks, + body: body + }; + } + + }; + + // Return true if there is a line terminator before the next token. + + function peekLineTerminator() { + var pos, line, start, found; + + pos = index; + line = lineNumber; + start = lineStart; + skipComment(); + found = lineNumber !== line; + index = pos; + lineNumber = line; + lineStart = start; + + return found; + } + + // Throw an exception + + function throwError(token, messageFormat) { + var error, + args = Array.prototype.slice.call(arguments, 2), + msg = messageFormat.replace( + /%(\d)/g, + function (whole, idx) { + assert(idx < args.length, 'Message reference must be in range'); + return args[idx]; + } + ); + + if (typeof token.lineNumber === 'number') { + error = new Error('Line ' + token.lineNumber + ': ' + msg); + error.index = token.range[0]; + error.lineNumber = token.lineNumber; + error.column = token.range[0] - lineStart + 1; + } else { + error = new Error('Line ' + lineNumber + ': ' + msg); + error.index = index; + error.lineNumber = lineNumber; + error.column = index - lineStart + 1; + } + + error.description = msg; + throw error; + } + + function throwErrorTolerant() { + try { + throwError.apply(null, arguments); + } catch (e) { + if (extra.errors) { + extra.errors.push(e); + } else { + throw e; + } + } + } + + + // Throw an exception because of the token. + + function throwUnexpected(token) { + if (token.type === Token.EOF) { + throwError(token, Messages.UnexpectedEOS); + } + + if (token.type === Token.NumericLiteral) { + throwError(token, Messages.UnexpectedNumber); + } + + if (token.type === Token.StringLiteral || token.type === Token.JSXText) { + throwError(token, Messages.UnexpectedString); + } + + if (token.type === Token.Identifier) { + throwError(token, Messages.UnexpectedIdentifier); + } + + if (token.type === Token.Keyword) { + if (isFutureReservedWord(token.value)) { + throwError(token, Messages.UnexpectedReserved); + } else if (strict && isStrictModeReservedWord(token.value)) { + throwErrorTolerant(token, Messages.StrictReservedWord); + return; + } + throwError(token, Messages.UnexpectedToken, token.value); + } + + if (token.type === Token.Template) { + throwError(token, Messages.UnexpectedTemplate, token.value.raw); + } + + // BooleanLiteral, NullLiteral, or Punctuator. + throwError(token, Messages.UnexpectedToken, token.value); + } + + // Expect the next token to match the specified punctuator. + // If not, an exception will be thrown. + + function expect(value) { + var token = lex(); + if (token.type !== Token.Punctuator || token.value !== value) { + throwUnexpected(token); + } + } + + // Expect the next token to match the specified keyword. + // If not, an exception will be thrown. + + function expectKeyword(keyword, contextual) { + var token = lex(); + if (token.type !== (contextual ? Token.Identifier : Token.Keyword) || + token.value !== keyword) { + throwUnexpected(token); + } + } + + // Expect the next token to match the specified contextual keyword. + // If not, an exception will be thrown. + + function expectContextualKeyword(keyword) { + return expectKeyword(keyword, true); + } + + // Return true if the next token matches the specified punctuator. + + function match(value) { + return lookahead.type === Token.Punctuator && lookahead.value === value; + } + + // Return true if the next token matches the specified keyword + + function matchKeyword(keyword, contextual) { + var expectedType = contextual ? Token.Identifier : Token.Keyword; + return lookahead.type === expectedType && lookahead.value === keyword; + } + + // Return true if the next token matches the specified contextual keyword + + function matchContextualKeyword(keyword) { + return matchKeyword(keyword, true); + } + + // Return true if the next token is an assignment operator + + function matchAssign() { + var op; + + if (lookahead.type !== Token.Punctuator) { + return false; + } + op = lookahead.value; + return op === '=' || + op === '*=' || + op === '/=' || + op === '%=' || + op === '+=' || + op === '-=' || + op === '<<=' || + op === '>>=' || + op === '>>>=' || + op === '&=' || + op === '^=' || + op === '|='; + } + + // Note that 'yield' is treated as a keyword in strict mode, but a + // contextual keyword (identifier) in non-strict mode, so we need to + // use matchKeyword('yield', false) and matchKeyword('yield', true) + // (i.e. matchContextualKeyword) appropriately. + function matchYield() { + return state.yieldAllowed && matchKeyword('yield', !strict); + } + + function matchAsync() { + var backtrackToken = lookahead, matches = false; + + if (matchContextualKeyword('async')) { + lex(); // Make sure peekLineTerminator() starts after 'async'. + matches = !peekLineTerminator(); + rewind(backtrackToken); // Revert the lex(). + } + + return matches; + } + + function matchAwait() { + return state.awaitAllowed && matchContextualKeyword('await'); + } + + function consumeSemicolon() { + var line, oldIndex = index, oldLineNumber = lineNumber, + oldLineStart = lineStart, oldLookahead = lookahead; + + // Catch the very common case first: immediately a semicolon (char #59). + if (source.charCodeAt(index) === 59) { + lex(); + return; + } + + line = lineNumber; + skipComment(); + if (lineNumber !== line) { + index = oldIndex; + lineNumber = oldLineNumber; + lineStart = oldLineStart; + lookahead = oldLookahead; + return; + } + + if (match(';')) { + lex(); + return; + } + + if (lookahead.type !== Token.EOF && !match('}')) { + throwUnexpected(lookahead); + } + } + + // Return true if provided expression is LeftHandSideExpression + + function isLeftHandSide(expr) { + return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression; + } + + function isAssignableLeftHandSide(expr) { + return isLeftHandSide(expr) || expr.type === Syntax.ObjectPattern || expr.type === Syntax.ArrayPattern; + } + + // 11.1.4 Array Initialiser + + function parseArrayInitialiser() { + var elements = [], blocks = [], filter = null, tmp, possiblecomprehension = true, + marker = markerCreate(); + + expect('['); + while (!match(']')) { + if (lookahead.value === 'for' && + lookahead.type === Token.Keyword) { + if (!possiblecomprehension) { + throwError({}, Messages.ComprehensionError); + } + matchKeyword('for'); + tmp = parseForStatement({ignoreBody: true}); + tmp.of = tmp.type === Syntax.ForOfStatement; + tmp.type = Syntax.ComprehensionBlock; + if (tmp.left.kind) { // can't be let or const + throwError({}, Messages.ComprehensionError); + } + blocks.push(tmp); + } else if (lookahead.value === 'if' && + lookahead.type === Token.Keyword) { + if (!possiblecomprehension) { + throwError({}, Messages.ComprehensionError); + } + expectKeyword('if'); + expect('('); + filter = parseExpression(); + expect(')'); + } else if (lookahead.value === ',' && + lookahead.type === Token.Punctuator) { + possiblecomprehension = false; // no longer allowed. + lex(); + elements.push(null); + } else { + tmp = parseSpreadOrAssignmentExpression(); + elements.push(tmp); + if (tmp && tmp.type === Syntax.SpreadElement) { + if (!match(']')) { + throwError({}, Messages.ElementAfterSpreadElement); + } + } else if (!(match(']') || matchKeyword('for') || matchKeyword('if'))) { + expect(','); // this lexes. + possiblecomprehension = false; + } + } + } + + expect(']'); + + if (filter && !blocks.length) { + throwError({}, Messages.ComprehensionRequiresBlock); + } + + if (blocks.length) { + if (elements.length !== 1) { + throwError({}, Messages.ComprehensionError); + } + return markerApply(marker, delegate.createComprehensionExpression(filter, blocks, elements[0])); + } + return markerApply(marker, delegate.createArrayExpression(elements)); + } + + // 11.1.5 Object Initialiser + + function parsePropertyFunction(options) { + var previousStrict, previousYieldAllowed, previousAwaitAllowed, + params, defaults, body, marker = markerCreate(); + + previousStrict = strict; + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = options.generator; + previousAwaitAllowed = state.awaitAllowed; + state.awaitAllowed = options.async; + params = options.params || []; + defaults = options.defaults || []; + + body = parseConciseBody(); + if (options.name && strict && isRestrictedWord(params[0].name)) { + throwErrorTolerant(options.name, Messages.StrictParamName); + } + strict = previousStrict; + state.yieldAllowed = previousYieldAllowed; + state.awaitAllowed = previousAwaitAllowed; + + return markerApply(marker, delegate.createFunctionExpression( + null, + params, + defaults, + body, + options.rest || null, + options.generator, + body.type !== Syntax.BlockStatement, + options.async, + options.returnType, + options.typeParameters + )); + } + + + function parsePropertyMethodFunction(options) { + var previousStrict, tmp, method; + + previousStrict = strict; + strict = true; + + tmp = parseParams(); + + if (tmp.stricted) { + throwErrorTolerant(tmp.stricted, tmp.message); + } + + method = parsePropertyFunction({ + params: tmp.params, + defaults: tmp.defaults, + rest: tmp.rest, + generator: options.generator, + async: options.async, + returnType: tmp.returnType, + typeParameters: options.typeParameters + }); + + strict = previousStrict; + + return method; + } + + + function parseObjectPropertyKey() { + var marker = markerCreate(), + token = lex(), + propertyKey, + result; + + // Note: This function is called only from parseObjectProperty(), where + // EOF and Punctuator tokens are already filtered out. + + if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) { + if (strict && token.octal) { + throwErrorTolerant(token, Messages.StrictOctalLiteral); + } + return markerApply(marker, delegate.createLiteral(token)); + } + + if (token.type === Token.Punctuator && token.value === '[') { + // For computed properties we should skip the [ and ], and + // capture in marker only the assignment expression itself. + marker = markerCreate(); + propertyKey = parseAssignmentExpression(); + result = markerApply(marker, propertyKey); + expect(']'); + return result; + } + + return markerApply(marker, delegate.createIdentifier(token.value)); + } + + function parseObjectProperty() { + var token, key, id, param, computed, + marker = markerCreate(), returnType, typeParameters; + + token = lookahead; + computed = (token.value === '[' && token.type === Token.Punctuator); + + if (token.type === Token.Identifier || computed || matchAsync()) { + id = parseObjectPropertyKey(); + + if (match(':')) { + lex(); + + return markerApply( + marker, + delegate.createProperty( + 'init', + id, + parseAssignmentExpression(), + false, + false, + computed + ) + ); + } + + if (match('(') || match('<')) { + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + return markerApply( + marker, + delegate.createProperty( + 'init', + id, + parsePropertyMethodFunction({ + generator: false, + async: false, + typeParameters: typeParameters + }), + true, + false, + computed + ) + ); + } + + // Property Assignment: Getter and Setter. + + if (token.value === 'get') { + computed = (lookahead.value === '['); + key = parseObjectPropertyKey(); + + expect('('); + expect(')'); + if (match(':')) { + returnType = parseTypeAnnotation(); + } + + return markerApply( + marker, + delegate.createProperty( + 'get', + key, + parsePropertyFunction({ + generator: false, + async: false, + returnType: returnType + }), + false, + false, + computed + ) + ); + } + + if (token.value === 'set') { + computed = (lookahead.value === '['); + key = parseObjectPropertyKey(); + + expect('('); + token = lookahead; + param = [ parseTypeAnnotatableIdentifier() ]; + expect(')'); + if (match(':')) { + returnType = parseTypeAnnotation(); + } + + return markerApply( + marker, + delegate.createProperty( + 'set', + key, + parsePropertyFunction({ + params: param, + generator: false, + async: false, + name: token, + returnType: returnType + }), + false, + false, + computed + ) + ); + } + + if (token.value === 'async') { + computed = (lookahead.value === '['); + key = parseObjectPropertyKey(); + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + return markerApply( + marker, + delegate.createProperty( + 'init', + key, + parsePropertyMethodFunction({ + generator: false, + async: true, + typeParameters: typeParameters + }), + true, + false, + computed + ) + ); + } + + if (computed) { + // Computed properties can only be used with full notation. + throwUnexpected(lookahead); + } + + return markerApply( + marker, + delegate.createProperty('init', id, id, false, true, false) + ); + } + + if (token.type === Token.EOF || token.type === Token.Punctuator) { + if (!match('*')) { + throwUnexpected(token); + } + lex(); + + computed = (lookahead.type === Token.Punctuator && lookahead.value === '['); + + id = parseObjectPropertyKey(); + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + if (!match('(')) { + throwUnexpected(lex()); + } + + return markerApply(marker, delegate.createProperty( + 'init', + id, + parsePropertyMethodFunction({ + generator: true, + typeParameters: typeParameters + }), + true, + false, + computed + )); + } + key = parseObjectPropertyKey(); + if (match(':')) { + lex(); + return markerApply(marker, delegate.createProperty('init', key, parseAssignmentExpression(), false, false, false)); + } + if (match('(') || match('<')) { + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + return markerApply(marker, delegate.createProperty( + 'init', + key, + parsePropertyMethodFunction({ + generator: false, + typeParameters: typeParameters + }), + true, + false, + false + )); + } + throwUnexpected(lex()); + } + + function parseObjectSpreadProperty() { + var marker = markerCreate(); + expect('...'); + return markerApply(marker, delegate.createSpreadProperty(parseAssignmentExpression())); + } + + function getFieldName(key) { + var toString = String; + if (key.type === Syntax.Identifier) { + return key.name; + } + return toString(key.value); + } + + function parseObjectInitialiser() { + var properties = [], property, name, kind, storedKind, map = new StringMap(), + marker = markerCreate(), toString = String; + + expect('{'); + + while (!match('}')) { + if (match('...')) { + property = parseObjectSpreadProperty(); + } else { + property = parseObjectProperty(); + + if (property.key.type === Syntax.Identifier) { + name = property.key.name; + } else { + name = toString(property.key.value); + } + kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set; + + if (map.has(name)) { + storedKind = map.get(name); + if (storedKind === PropertyKind.Data) { + if (strict && kind === PropertyKind.Data) { + throwErrorTolerant({}, Messages.StrictDuplicateProperty); + } else if (kind !== PropertyKind.Data) { + throwErrorTolerant({}, Messages.AccessorDataProperty); + } + } else { + if (kind === PropertyKind.Data) { + throwErrorTolerant({}, Messages.AccessorDataProperty); + } else if (storedKind & kind) { + throwErrorTolerant({}, Messages.AccessorGetSet); + } + } + map.set(name, storedKind | kind); + } else { + map.set(name, kind); + } + } + + properties.push(property); + + if (!match('}')) { + expect(','); + } + } + + expect('}'); + + return markerApply(marker, delegate.createObjectExpression(properties)); + } + + function parseTemplateElement(option) { + var marker = markerCreate(), + token = scanTemplateElement(option); + if (strict && token.octal) { + throwError(token, Messages.StrictOctalLiteral); + } + return markerApply(marker, delegate.createTemplateElement({ raw: token.value.raw, cooked: token.value.cooked }, token.tail)); + } + + function parseTemplateLiteral() { + var quasi, quasis, expressions, marker = markerCreate(); + + quasi = parseTemplateElement({ head: true }); + quasis = [ quasi ]; + expressions = []; + + while (!quasi.tail) { + expressions.push(parseExpression()); + quasi = parseTemplateElement({ head: false }); + quasis.push(quasi); + } + + return markerApply(marker, delegate.createTemplateLiteral(quasis, expressions)); + } + + // 11.1.6 The Grouping Operator + + function parseGroupExpression() { + var expr, marker, typeAnnotation; + + expect('('); + + ++state.parenthesizedCount; + + marker = markerCreate(); + + expr = parseExpression(); + + if (match(':')) { + typeAnnotation = parseTypeAnnotation(); + expr = markerApply(marker, delegate.createTypeCast( + expr, + typeAnnotation + )); + } + + expect(')'); + + return expr; + } + + function matchAsyncFuncExprOrDecl() { + var token; + + if (matchAsync()) { + token = lookahead2(); + if (token.type === Token.Keyword && token.value === 'function') { + return true; + } + } + + return false; + } + + // 11.1 Primary Expressions + + function parsePrimaryExpression() { + var marker, type, token, expr; + + type = lookahead.type; + + if (type === Token.Identifier) { + marker = markerCreate(); + return markerApply(marker, delegate.createIdentifier(lex().value)); + } + + if (type === Token.StringLiteral || type === Token.NumericLiteral) { + if (strict && lookahead.octal) { + throwErrorTolerant(lookahead, Messages.StrictOctalLiteral); + } + marker = markerCreate(); + return markerApply(marker, delegate.createLiteral(lex())); + } + + if (type === Token.Keyword) { + if (matchKeyword('this')) { + marker = markerCreate(); + lex(); + return markerApply(marker, delegate.createThisExpression()); + } + + if (matchKeyword('function')) { + return parseFunctionExpression(); + } + + if (matchKeyword('class')) { + return parseClassExpression(); + } + + if (matchKeyword('super')) { + marker = markerCreate(); + lex(); + return markerApply(marker, delegate.createIdentifier('super')); + } + } + + if (type === Token.BooleanLiteral) { + marker = markerCreate(); + token = lex(); + token.value = (token.value === 'true'); + return markerApply(marker, delegate.createLiteral(token)); + } + + if (type === Token.NullLiteral) { + marker = markerCreate(); + token = lex(); + token.value = null; + return markerApply(marker, delegate.createLiteral(token)); + } + + if (match('[')) { + return parseArrayInitialiser(); + } + + if (match('{')) { + return parseObjectInitialiser(); + } + + if (match('(')) { + return parseGroupExpression(); + } + + if (match('/') || match('/=')) { + marker = markerCreate(); + expr = delegate.createLiteral(scanRegExp()); + peek(); + return markerApply(marker, expr); + } + + if (type === Token.Template) { + return parseTemplateLiteral(); + } + + if (match('<')) { + return parseJSXElement(); + } + + throwUnexpected(lex()); + } + + // 11.2 Left-Hand-Side Expressions + + function parseArguments() { + var args = [], arg; + + expect('('); + + if (!match(')')) { + while (index < length) { + arg = parseSpreadOrAssignmentExpression(); + args.push(arg); + + if (match(')')) { + break; + } else if (arg.type === Syntax.SpreadElement) { + throwError({}, Messages.ElementAfterSpreadElement); + } + + expect(','); + } + } + + expect(')'); + + return args; + } + + function parseSpreadOrAssignmentExpression() { + if (match('...')) { + var marker = markerCreate(); + lex(); + return markerApply(marker, delegate.createSpreadElement(parseAssignmentExpression())); + } + return parseAssignmentExpression(); + } + + function parseNonComputedProperty() { + var marker = markerCreate(), + token = lex(); + + if (!isIdentifierName(token)) { + throwUnexpected(token); + } + + return markerApply(marker, delegate.createIdentifier(token.value)); + } + + function parseNonComputedMember() { + expect('.'); + + return parseNonComputedProperty(); + } + + function parseComputedMember() { + var expr; + + expect('['); + + expr = parseExpression(); + + expect(']'); + + return expr; + } + + function parseNewExpression() { + var callee, args, marker = markerCreate(); + + expectKeyword('new'); + callee = parseLeftHandSideExpression(); + args = match('(') ? parseArguments() : []; + + return markerApply(marker, delegate.createNewExpression(callee, args)); + } + + function parseLeftHandSideExpressionAllowCall() { + var expr, args, marker = markerCreate(); + + expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression(); + + while (match('.') || match('[') || match('(') || lookahead.type === Token.Template) { + if (match('(')) { + args = parseArguments(); + expr = markerApply(marker, delegate.createCallExpression(expr, args)); + } else if (match('[')) { + expr = markerApply(marker, delegate.createMemberExpression('[', expr, parseComputedMember())); + } else if (match('.')) { + expr = markerApply(marker, delegate.createMemberExpression('.', expr, parseNonComputedMember())); + } else { + expr = markerApply(marker, delegate.createTaggedTemplateExpression(expr, parseTemplateLiteral())); + } + } + + return expr; + } + + function parseLeftHandSideExpression() { + var expr, marker = markerCreate(); + + expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression(); + + while (match('.') || match('[') || lookahead.type === Token.Template) { + if (match('[')) { + expr = markerApply(marker, delegate.createMemberExpression('[', expr, parseComputedMember())); + } else if (match('.')) { + expr = markerApply(marker, delegate.createMemberExpression('.', expr, parseNonComputedMember())); + } else { + expr = markerApply(marker, delegate.createTaggedTemplateExpression(expr, parseTemplateLiteral())); + } + } + + return expr; + } + + // 11.3 Postfix Expressions + + function parsePostfixExpression() { + var marker = markerCreate(), + expr = parseLeftHandSideExpressionAllowCall(), + token; + + if (lookahead.type !== Token.Punctuator) { + return expr; + } + + if ((match('++') || match('--')) && !peekLineTerminator()) { + // 11.3.1, 11.3.2 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + throwErrorTolerant({}, Messages.StrictLHSPostfix); + } + + if (!isLeftHandSide(expr)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + + token = lex(); + expr = markerApply(marker, delegate.createPostfixExpression(token.value, expr)); + } + + return expr; + } + + // 11.4 Unary Operators + + function parseUnaryExpression() { + var marker, token, expr; + + if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) { + return parsePostfixExpression(); + } + + if (match('++') || match('--')) { + marker = markerCreate(); + token = lex(); + expr = parseUnaryExpression(); + // 11.4.4, 11.4.5 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + throwErrorTolerant({}, Messages.StrictLHSPrefix); + } + + if (!isLeftHandSide(expr)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + + return markerApply(marker, delegate.createUnaryExpression(token.value, expr)); + } + + if (match('+') || match('-') || match('~') || match('!')) { + marker = markerCreate(); + token = lex(); + expr = parseUnaryExpression(); + return markerApply(marker, delegate.createUnaryExpression(token.value, expr)); + } + + if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { + marker = markerCreate(); + token = lex(); + expr = parseUnaryExpression(); + expr = markerApply(marker, delegate.createUnaryExpression(token.value, expr)); + if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) { + throwErrorTolerant({}, Messages.StrictDelete); + } + return expr; + } + + return parsePostfixExpression(); + } + + function binaryPrecedence(token, allowIn) { + var prec = 0; + + if (token.type !== Token.Punctuator && token.type !== Token.Keyword) { + return 0; + } + + switch (token.value) { + case '||': + prec = 1; + break; + + case '&&': + prec = 2; + break; + + case '|': + prec = 3; + break; + + case '^': + prec = 4; + break; + + case '&': + prec = 5; + break; + + case '==': + case '!=': + case '===': + case '!==': + prec = 6; + break; + + case '<': + case '>': + case '<=': + case '>=': + case 'instanceof': + prec = 7; + break; + + case 'in': + prec = allowIn ? 7 : 0; + break; + + case '<<': + case '>>': + case '>>>': + prec = 8; + break; + + case '+': + case '-': + prec = 9; + break; + + case '*': + case '/': + case '%': + prec = 11; + break; + + default: + break; + } + + return prec; + } + + // 11.5 Multiplicative Operators + // 11.6 Additive Operators + // 11.7 Bitwise Shift Operators + // 11.8 Relational Operators + // 11.9 Equality Operators + // 11.10 Binary Bitwise Operators + // 11.11 Binary Logical Operators + + function parseBinaryExpression() { + var expr, token, prec, previousAllowIn, stack, right, operator, left, i, + marker, markers; + + previousAllowIn = state.allowIn; + state.allowIn = true; + + marker = markerCreate(); + left = parseUnaryExpression(); + + token = lookahead; + prec = binaryPrecedence(token, previousAllowIn); + if (prec === 0) { + return left; + } + token.prec = prec; + lex(); + + markers = [marker, markerCreate()]; + right = parseUnaryExpression(); + + stack = [left, token, right]; + + while ((prec = binaryPrecedence(lookahead, previousAllowIn)) > 0) { + + // Reduce: make a binary expression from the three topmost entries. + while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { + right = stack.pop(); + operator = stack.pop().value; + left = stack.pop(); + expr = delegate.createBinaryExpression(operator, left, right); + markers.pop(); + marker = markers.pop(); + markerApply(marker, expr); + stack.push(expr); + markers.push(marker); + } + + // Shift. + token = lex(); + token.prec = prec; + stack.push(token); + markers.push(markerCreate()); + expr = parseUnaryExpression(); + stack.push(expr); + } + + state.allowIn = previousAllowIn; + + // Final reduce to clean-up the stack. + i = stack.length - 1; + expr = stack[i]; + markers.pop(); + while (i > 1) { + expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr); + i -= 2; + marker = markers.pop(); + markerApply(marker, expr); + } + + return expr; + } + + + // 11.12 Conditional Operator + + function parseConditionalExpression() { + var expr, previousAllowIn, consequent, alternate, marker = markerCreate(); + expr = parseBinaryExpression(); + + if (match('?')) { + lex(); + previousAllowIn = state.allowIn; + state.allowIn = true; + consequent = parseAssignmentExpression(); + state.allowIn = previousAllowIn; + expect(':'); + alternate = parseAssignmentExpression(); + + expr = markerApply(marker, delegate.createConditionalExpression(expr, consequent, alternate)); + } + + return expr; + } + + // 11.13 Assignment Operators + + // 12.14.5 AssignmentPattern + + function reinterpretAsAssignmentBindingPattern(expr) { + var i, len, property, element; + + if (expr.type === Syntax.ObjectExpression) { + expr.type = Syntax.ObjectPattern; + for (i = 0, len = expr.properties.length; i < len; i += 1) { + property = expr.properties[i]; + if (property.type === Syntax.SpreadProperty) { + if (i < len - 1) { + throwError({}, Messages.PropertyAfterSpreadProperty); + } + reinterpretAsAssignmentBindingPattern(property.argument); + } else { + if (property.kind !== 'init') { + throwError({}, Messages.InvalidLHSInAssignment); + } + reinterpretAsAssignmentBindingPattern(property.value); + } + } + } else if (expr.type === Syntax.ArrayExpression) { + expr.type = Syntax.ArrayPattern; + for (i = 0, len = expr.elements.length; i < len; i += 1) { + element = expr.elements[i]; + /* istanbul ignore else */ + if (element) { + reinterpretAsAssignmentBindingPattern(element); + } + } + } else if (expr.type === Syntax.Identifier) { + if (isRestrictedWord(expr.name)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + } else if (expr.type === Syntax.SpreadElement) { + reinterpretAsAssignmentBindingPattern(expr.argument); + if (expr.argument.type === Syntax.ObjectPattern) { + throwError({}, Messages.ObjectPatternAsSpread); + } + } else { + /* istanbul ignore else */ + if (expr.type !== Syntax.MemberExpression && expr.type !== Syntax.CallExpression && expr.type !== Syntax.NewExpression) { + throwError({}, Messages.InvalidLHSInAssignment); + } + } + } + + // 13.2.3 BindingPattern + + function reinterpretAsDestructuredParameter(options, expr) { + var i, len, property, element; + + if (expr.type === Syntax.ObjectExpression) { + expr.type = Syntax.ObjectPattern; + for (i = 0, len = expr.properties.length; i < len; i += 1) { + property = expr.properties[i]; + if (property.type === Syntax.SpreadProperty) { + if (i < len - 1) { + throwError({}, Messages.PropertyAfterSpreadProperty); + } + reinterpretAsDestructuredParameter(options, property.argument); + } else { + if (property.kind !== 'init') { + throwError({}, Messages.InvalidLHSInFormalsList); + } + reinterpretAsDestructuredParameter(options, property.value); + } + } + } else if (expr.type === Syntax.ArrayExpression) { + expr.type = Syntax.ArrayPattern; + for (i = 0, len = expr.elements.length; i < len; i += 1) { + element = expr.elements[i]; + if (element) { + reinterpretAsDestructuredParameter(options, element); + } + } + } else if (expr.type === Syntax.Identifier) { + validateParam(options, expr, expr.name); + } else if (expr.type === Syntax.SpreadElement) { + // BindingRestElement only allows BindingIdentifier + if (expr.argument.type !== Syntax.Identifier) { + throwError({}, Messages.InvalidLHSInFormalsList); + } + validateParam(options, expr.argument, expr.argument.name); + } else { + throwError({}, Messages.InvalidLHSInFormalsList); + } + } + + function reinterpretAsCoverFormalsList(expressions) { + var i, len, param, params, defaults, defaultCount, options, rest; + + params = []; + defaults = []; + defaultCount = 0; + rest = null; + options = { + paramSet: new StringMap() + }; + + for (i = 0, len = expressions.length; i < len; i += 1) { + param = expressions[i]; + if (param.type === Syntax.Identifier) { + params.push(param); + defaults.push(null); + validateParam(options, param, param.name); + } else if (param.type === Syntax.ObjectExpression || param.type === Syntax.ArrayExpression) { + reinterpretAsDestructuredParameter(options, param); + params.push(param); + defaults.push(null); + } else if (param.type === Syntax.SpreadElement) { + assert(i === len - 1, 'It is guaranteed that SpreadElement is last element by parseExpression'); + if (param.argument.type !== Syntax.Identifier) { + throwError({}, Messages.InvalidLHSInFormalsList); + } + reinterpretAsDestructuredParameter(options, param.argument); + rest = param.argument; + } else if (param.type === Syntax.AssignmentExpression) { + params.push(param.left); + defaults.push(param.right); + ++defaultCount; + validateParam(options, param.left, param.left.name); + } else { + return null; + } + } + + if (options.message === Messages.StrictParamDupe) { + throwError( + strict ? options.stricted : options.firstRestricted, + options.message + ); + } + + if (defaultCount === 0) { + defaults = []; + } + + return { + params: params, + defaults: defaults, + rest: rest, + stricted: options.stricted, + firstRestricted: options.firstRestricted, + message: options.message + }; + } + + function parseArrowFunctionExpression(options, marker) { + var previousStrict, previousYieldAllowed, previousAwaitAllowed, body; + + expect('=>'); + + previousStrict = strict; + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = false; + previousAwaitAllowed = state.awaitAllowed; + state.awaitAllowed = !!options.async; + body = parseConciseBody(); + + if (strict && options.firstRestricted) { + throwError(options.firstRestricted, options.message); + } + if (strict && options.stricted) { + throwErrorTolerant(options.stricted, options.message); + } + + strict = previousStrict; + state.yieldAllowed = previousYieldAllowed; + state.awaitAllowed = previousAwaitAllowed; + + return markerApply(marker, delegate.createArrowFunctionExpression( + options.params, + options.defaults, + body, + options.rest, + body.type !== Syntax.BlockStatement, + !!options.async + )); + } + + function parseAssignmentExpression() { + var marker, expr, token, params, oldParenthesizedCount, + startsWithParen = false, backtrackToken = lookahead, + possiblyAsync = false; + + if (matchYield()) { + return parseYieldExpression(); + } + + if (matchAwait()) { + return parseAwaitExpression(); + } + + oldParenthesizedCount = state.parenthesizedCount; + + marker = markerCreate(); + + if (matchAsyncFuncExprOrDecl()) { + return parseFunctionExpression(); + } + + if (matchAsync()) { + // We can't be completely sure that this 'async' token is + // actually a contextual keyword modifying a function + // expression, so we might have to un-lex() it later by + // calling rewind(backtrackToken). + possiblyAsync = true; + lex(); + } + + if (match('(')) { + token = lookahead2(); + if ((token.type === Token.Punctuator && token.value === ')') || token.value === '...') { + params = parseParams(); + if (!match('=>')) { + throwUnexpected(lex()); + } + params.async = possiblyAsync; + return parseArrowFunctionExpression(params, marker); + } + startsWithParen = true; + } + + token = lookahead; + + // If the 'async' keyword is not followed by a '(' character or an + // identifier, then it can't be an arrow function modifier, and we + // should interpret it as a normal identifer. + if (possiblyAsync && !match('(') && token.type !== Token.Identifier) { + possiblyAsync = false; + rewind(backtrackToken); + } + + expr = parseConditionalExpression(); + + if (match('=>') && + (state.parenthesizedCount === oldParenthesizedCount || + state.parenthesizedCount === (oldParenthesizedCount + 1))) { + if (expr.type === Syntax.Identifier) { + params = reinterpretAsCoverFormalsList([ expr ]); + } else if (expr.type === Syntax.AssignmentExpression || + expr.type === Syntax.ArrayExpression || + expr.type === Syntax.ObjectExpression) { + if (!startsWithParen) { + throwUnexpected(lex()); + } + params = reinterpretAsCoverFormalsList([ expr ]); + } else if (expr.type === Syntax.SequenceExpression) { + params = reinterpretAsCoverFormalsList(expr.expressions); + } + if (params) { + params.async = possiblyAsync; + return parseArrowFunctionExpression(params, marker); + } + } + + // If we haven't returned by now, then the 'async' keyword was not + // a function modifier, and we should rewind and interpret it as a + // normal identifier. + if (possiblyAsync) { + possiblyAsync = false; + rewind(backtrackToken); + expr = parseConditionalExpression(); + } + + if (matchAssign()) { + // 11.13.1 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + throwErrorTolerant(token, Messages.StrictLHSAssignment); + } + + // ES.next draf 11.13 Runtime Semantics step 1 + if (match('=') && (expr.type === Syntax.ObjectExpression || expr.type === Syntax.ArrayExpression)) { + reinterpretAsAssignmentBindingPattern(expr); + } else if (!isLeftHandSide(expr)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + + expr = markerApply(marker, delegate.createAssignmentExpression(lex().value, expr, parseAssignmentExpression())); + } + + return expr; + } + + // 11.14 Comma Operator + + function parseExpression() { + var marker, expr, expressions, sequence, spreadFound; + + marker = markerCreate(); + expr = parseAssignmentExpression(); + expressions = [ expr ]; + + if (match(',')) { + while (index < length) { + if (!match(',')) { + break; + } + + lex(); + expr = parseSpreadOrAssignmentExpression(); + expressions.push(expr); + + if (expr.type === Syntax.SpreadElement) { + spreadFound = true; + if (!match(')')) { + throwError({}, Messages.ElementAfterSpreadElement); + } + break; + } + } + + sequence = markerApply(marker, delegate.createSequenceExpression(expressions)); + } + + if (spreadFound && lookahead2().value !== '=>') { + throwError({}, Messages.IllegalSpread); + } + + return sequence || expr; + } + + // 12.1 Block + + function parseStatementList() { + var list = [], + statement; + + while (index < length) { + if (match('}')) { + break; + } + statement = parseSourceElement(); + if (typeof statement === 'undefined') { + break; + } + list.push(statement); + } + + return list; + } + + function parseBlock() { + var block, marker = markerCreate(); + + expect('{'); + + block = parseStatementList(); + + expect('}'); + + return markerApply(marker, delegate.createBlockStatement(block)); + } + + // 12.2 Variable Statement + + function parseTypeParameterDeclaration() { + var marker = markerCreate(), paramTypes = []; + + expect('<'); + while (!match('>')) { + paramTypes.push(parseTypeAnnotatableIdentifier()); + if (!match('>')) { + expect(','); + } + } + expect('>'); + + return markerApply(marker, delegate.createTypeParameterDeclaration( + paramTypes + )); + } + + function parseTypeParameterInstantiation() { + var marker = markerCreate(), oldInType = state.inType, paramTypes = []; + + state.inType = true; + + expect('<'); + while (!match('>')) { + paramTypes.push(parseType()); + if (!match('>')) { + expect(','); + } + } + expect('>'); + + state.inType = oldInType; + + return markerApply(marker, delegate.createTypeParameterInstantiation( + paramTypes + )); + } + + function parseObjectTypeIndexer(marker, isStatic) { + var id, key, value; + + expect('['); + id = parseObjectPropertyKey(); + expect(':'); + key = parseType(); + expect(']'); + expect(':'); + value = parseType(); + + return markerApply(marker, delegate.createObjectTypeIndexer( + id, + key, + value, + isStatic + )); + } + + function parseObjectTypeMethodish(marker) { + var params = [], rest = null, returnType, typeParameters = null; + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + expect('('); + while (lookahead.type === Token.Identifier) { + params.push(parseFunctionTypeParam()); + if (!match(')')) { + expect(','); + } + } + + if (match('...')) { + lex(); + rest = parseFunctionTypeParam(); + } + expect(')'); + expect(':'); + returnType = parseType(); + + return markerApply(marker, delegate.createFunctionTypeAnnotation( + params, + returnType, + rest, + typeParameters + )); + } + + function parseObjectTypeMethod(marker, isStatic, key) { + var optional = false, value; + value = parseObjectTypeMethodish(marker); + + return markerApply(marker, delegate.createObjectTypeProperty( + key, + value, + optional, + isStatic + )); + } + + function parseObjectTypeCallProperty(marker, isStatic) { + var valueMarker = markerCreate(); + return markerApply(marker, delegate.createObjectTypeCallProperty( + parseObjectTypeMethodish(valueMarker), + isStatic + )); + } + + function parseObjectType(allowStatic) { + var callProperties = [], indexers = [], marker, optional = false, + properties = [], propertyKey, propertyTypeAnnotation, + token, isStatic, matchStatic; + + expect('{'); + + while (!match('}')) { + marker = markerCreate(); + matchStatic = + strict + ? matchKeyword('static') + : matchContextualKeyword('static'); + + if (allowStatic && matchStatic) { + token = lex(); + isStatic = true; + } + + if (match('[')) { + indexers.push(parseObjectTypeIndexer(marker, isStatic)); + } else if (match('(') || match('<')) { + callProperties.push(parseObjectTypeCallProperty(marker, allowStatic)); + } else { + if (isStatic && match(':')) { + propertyKey = markerApply(marker, delegate.createIdentifier(token)); + throwErrorTolerant(token, Messages.StrictReservedWord); + } else { + propertyKey = parseObjectPropertyKey(); + } + if (match('<') || match('(')) { + // This is a method property + properties.push(parseObjectTypeMethod(marker, isStatic, propertyKey)); + } else { + if (match('?')) { + lex(); + optional = true; + } + expect(':'); + propertyTypeAnnotation = parseType(); + properties.push(markerApply(marker, delegate.createObjectTypeProperty( + propertyKey, + propertyTypeAnnotation, + optional, + isStatic + ))); + } + } + + if (match(';')) { + lex(); + } else if (!match('}')) { + throwUnexpected(lookahead); + } + } + + expect('}'); + + return delegate.createObjectTypeAnnotation( + properties, + indexers, + callProperties + ); + } + + function parseGenericType() { + var marker = markerCreate(), + typeParameters = null, typeIdentifier; + + typeIdentifier = parseVariableIdentifier(); + + while (match('.')) { + expect('.'); + typeIdentifier = markerApply(marker, delegate.createQualifiedTypeIdentifier( + typeIdentifier, + parseVariableIdentifier() + )); + } + + if (match('<')) { + typeParameters = parseTypeParameterInstantiation(); + } + + return markerApply(marker, delegate.createGenericTypeAnnotation( + typeIdentifier, + typeParameters + )); + } + + function parseVoidType() { + var marker = markerCreate(); + expectKeyword('void'); + return markerApply(marker, delegate.createVoidTypeAnnotation()); + } + + function parseTypeofType() { + var argument, marker = markerCreate(); + expectKeyword('typeof'); + argument = parsePrimaryType(); + return markerApply(marker, delegate.createTypeofTypeAnnotation( + argument + )); + } + + function parseTupleType() { + var marker = markerCreate(), types = []; + expect('['); + // We allow trailing commas + while (index < length && !match(']')) { + types.push(parseType()); + if (match(']')) { + break; + } + expect(','); + } + expect(']'); + return markerApply(marker, delegate.createTupleTypeAnnotation( + types + )); + } + + function parseFunctionTypeParam() { + var marker = markerCreate(), name, optional = false, typeAnnotation; + name = parseVariableIdentifier(); + if (match('?')) { + lex(); + optional = true; + } + expect(':'); + typeAnnotation = parseType(); + return markerApply(marker, delegate.createFunctionTypeParam( + name, + typeAnnotation, + optional + )); + } + + function parseFunctionTypeParams() { + var ret = { params: [], rest: null }; + while (lookahead.type === Token.Identifier) { + ret.params.push(parseFunctionTypeParam()); + if (!match(')')) { + expect(','); + } + } + + if (match('...')) { + lex(); + ret.rest = parseFunctionTypeParam(); + } + return ret; + } + + // The parsing of types roughly parallels the parsing of expressions, and + // primary types are kind of like primary expressions...they're the + // primitives with which other types are constructed. + function parsePrimaryType() { + var params = null, returnType = null, + marker = markerCreate(), rest = null, tmp, + typeParameters, token, type, isGroupedType = false; + + switch (lookahead.type) { + case Token.Identifier: + switch (lookahead.value) { + case 'any': + lex(); + return markerApply(marker, delegate.createAnyTypeAnnotation()); + case 'bool': // fallthrough + case 'boolean': + lex(); + return markerApply(marker, delegate.createBooleanTypeAnnotation()); + case 'number': + lex(); + return markerApply(marker, delegate.createNumberTypeAnnotation()); + case 'string': + lex(); + return markerApply(marker, delegate.createStringTypeAnnotation()); + } + return markerApply(marker, parseGenericType()); + case Token.Punctuator: + switch (lookahead.value) { + case '{': + return markerApply(marker, parseObjectType()); + case '[': + return parseTupleType(); + case '<': + typeParameters = parseTypeParameterDeclaration(); + expect('('); + tmp = parseFunctionTypeParams(); + params = tmp.params; + rest = tmp.rest; + expect(')'); + + expect('=>'); + + returnType = parseType(); + + return markerApply(marker, delegate.createFunctionTypeAnnotation( + params, + returnType, + rest, + typeParameters + )); + case '(': + lex(); + // Check to see if this is actually a grouped type + if (!match(')') && !match('...')) { + if (lookahead.type === Token.Identifier) { + token = lookahead2(); + isGroupedType = token.value !== '?' && token.value !== ':'; + } else { + isGroupedType = true; + } + } + + if (isGroupedType) { + type = parseType(); + expect(')'); + + // If we see a => next then someone was probably confused about + // function types, so we can provide a better error message + if (match('=>')) { + throwError({}, Messages.ConfusedAboutFunctionType); + } + + return type; + } + + tmp = parseFunctionTypeParams(); + params = tmp.params; + rest = tmp.rest; + + expect(')'); + + expect('=>'); + + returnType = parseType(); + + return markerApply(marker, delegate.createFunctionTypeAnnotation( + params, + returnType, + rest, + null /* typeParameters */ + )); + } + break; + case Token.Keyword: + switch (lookahead.value) { + case 'void': + return markerApply(marker, parseVoidType()); + case 'typeof': + return markerApply(marker, parseTypeofType()); + } + break; + case Token.StringLiteral: + token = lex(); + if (token.octal) { + throwError(token, Messages.StrictOctalLiteral); + } + return markerApply(marker, delegate.createStringLiteralTypeAnnotation( + token + )); + } + + throwUnexpected(lookahead); + } + + function parsePostfixType() { + var marker = markerCreate(), t = parsePrimaryType(); + if (match('[')) { + expect('['); + expect(']'); + return markerApply(marker, delegate.createArrayTypeAnnotation(t)); + } + return t; + } + + function parsePrefixType() { + var marker = markerCreate(); + if (match('?')) { + lex(); + return markerApply(marker, delegate.createNullableTypeAnnotation( + parsePrefixType() + )); + } + return parsePostfixType(); + } + + + function parseIntersectionType() { + var marker = markerCreate(), type, types; + type = parsePrefixType(); + types = [type]; + while (match('&')) { + lex(); + types.push(parsePrefixType()); + } + + return types.length === 1 ? + type : + markerApply(marker, delegate.createIntersectionTypeAnnotation( + types + )); + } + + function parseUnionType() { + var marker = markerCreate(), type, types; + type = parseIntersectionType(); + types = [type]; + while (match('|')) { + lex(); + types.push(parseIntersectionType()); + } + return types.length === 1 ? + type : + markerApply(marker, delegate.createUnionTypeAnnotation( + types + )); + } + + function parseType() { + var oldInType = state.inType, type; + state.inType = true; + + type = parseUnionType(); + + state.inType = oldInType; + return type; + } + + function parseTypeAnnotation() { + var marker = markerCreate(), type; + + expect(':'); + type = parseType(); + + return markerApply(marker, delegate.createTypeAnnotation(type)); + } + + function parseVariableIdentifier() { + var marker = markerCreate(), + token = lex(); + + if (token.type !== Token.Identifier) { + throwUnexpected(token); + } + + return markerApply(marker, delegate.createIdentifier(token.value)); + } + + function parseTypeAnnotatableIdentifier(requireTypeAnnotation, canBeOptionalParam) { + var marker = markerCreate(), + ident = parseVariableIdentifier(), + isOptionalParam = false; + + if (canBeOptionalParam && match('?')) { + expect('?'); + isOptionalParam = true; + } + + if (requireTypeAnnotation || match(':')) { + ident.typeAnnotation = parseTypeAnnotation(); + ident = markerApply(marker, ident); + } + + if (isOptionalParam) { + ident.optional = true; + ident = markerApply(marker, ident); + } + + return ident; + } + + function parseVariableDeclaration(kind) { + var id, + marker = markerCreate(), + init = null, + typeAnnotationMarker = markerCreate(); + if (match('{')) { + id = parseObjectInitialiser(); + reinterpretAsAssignmentBindingPattern(id); + if (match(':')) { + id.typeAnnotation = parseTypeAnnotation(); + markerApply(typeAnnotationMarker, id); + } + } else if (match('[')) { + id = parseArrayInitialiser(); + reinterpretAsAssignmentBindingPattern(id); + if (match(':')) { + id.typeAnnotation = parseTypeAnnotation(); + markerApply(typeAnnotationMarker, id); + } + } else { + /* istanbul ignore next */ + id = state.allowKeyword ? parseNonComputedProperty() : parseTypeAnnotatableIdentifier(); + // 12.2.1 + if (strict && isRestrictedWord(id.name)) { + throwErrorTolerant({}, Messages.StrictVarName); + } + } + + if (kind === 'const') { + if (!match('=')) { + throwError({}, Messages.NoUninitializedConst); + } + expect('='); + init = parseAssignmentExpression(); + } else if (match('=')) { + lex(); + init = parseAssignmentExpression(); + } + + return markerApply(marker, delegate.createVariableDeclarator(id, init)); + } + + function parseVariableDeclarationList(kind) { + var list = []; + + do { + list.push(parseVariableDeclaration(kind)); + if (!match(',')) { + break; + } + lex(); + } while (index < length); + + return list; + } + + function parseVariableStatement() { + var declarations, marker = markerCreate(); + + expectKeyword('var'); + + declarations = parseVariableDeclarationList(); + + consumeSemicolon(); + + return markerApply(marker, delegate.createVariableDeclaration(declarations, 'var')); + } + + // kind may be `const` or `let` + // Both are experimental and not in the specification yet. + // see http://wiki.ecmascript.org/doku.php?id=harmony:const + // and http://wiki.ecmascript.org/doku.php?id=harmony:let + function parseConstLetDeclaration(kind) { + var declarations, marker = markerCreate(); + + expectKeyword(kind); + + declarations = parseVariableDeclarationList(kind); + + consumeSemicolon(); + + return markerApply(marker, delegate.createVariableDeclaration(declarations, kind)); + } + + // people.mozilla.org/~jorendorff/es6-draft.html + + function parseModuleSpecifier() { + var marker = markerCreate(), + specifier; + + if (lookahead.type !== Token.StringLiteral) { + throwError({}, Messages.InvalidModuleSpecifier); + } + specifier = delegate.createModuleSpecifier(lookahead); + lex(); + return markerApply(marker, specifier); + } + + function parseExportBatchSpecifier() { + var marker = markerCreate(); + expect('*'); + return markerApply(marker, delegate.createExportBatchSpecifier()); + } + + function parseExportSpecifier() { + var id, name = null, marker = markerCreate(), from; + if (matchKeyword('default')) { + lex(); + id = markerApply(marker, delegate.createIdentifier('default')); + // export {default} from "something"; + } else { + id = parseVariableIdentifier(); + } + if (matchContextualKeyword('as')) { + lex(); + name = parseNonComputedProperty(); + } + + return markerApply(marker, delegate.createExportSpecifier(id, name)); + } + + function parseExportDeclaration() { + var declaration = null, + possibleIdentifierToken, sourceElement, + isExportFromIdentifier, + src = null, specifiers = [], + marker = markerCreate(); + + expectKeyword('export'); + + if (matchKeyword('default')) { + // covers: + // export default ... + lex(); + if (matchKeyword('function') || matchKeyword('class')) { + possibleIdentifierToken = lookahead2(); + if (isIdentifierName(possibleIdentifierToken)) { + // covers: + // export default function foo () {} + // export default class foo {} + sourceElement = parseSourceElement(); + return markerApply(marker, delegate.createExportDeclaration(true, sourceElement, [sourceElement.id], null)); + } + // covers: + // export default function () {} + // export default class {} + switch (lookahead.value) { + case 'class': + return markerApply(marker, delegate.createExportDeclaration(true, parseClassExpression(), [], null)); + case 'function': + return markerApply(marker, delegate.createExportDeclaration(true, parseFunctionExpression(), [], null)); + } + } + + if (matchContextualKeyword('from')) { + throwError({}, Messages.UnexpectedToken, lookahead.value); + } + + // covers: + // export default {}; + // export default []; + if (match('{')) { + declaration = parseObjectInitialiser(); + } else if (match('[')) { + declaration = parseArrayInitialiser(); + } else { + declaration = parseAssignmentExpression(); + } + consumeSemicolon(); + return markerApply(marker, delegate.createExportDeclaration(true, declaration, [], null)); + } + + // non-default export + if (lookahead.type === Token.Keyword || matchContextualKeyword('type')) { + // covers: + // export var f = 1; + switch (lookahead.value) { + case 'type': + case 'let': + case 'const': + case 'var': + case 'class': + case 'function': + return markerApply(marker, delegate.createExportDeclaration(false, parseSourceElement(), specifiers, null)); + } + } + + if (match('*')) { + // covers: + // export * from "foo"; + specifiers.push(parseExportBatchSpecifier()); + + if (!matchContextualKeyword('from')) { + throwError({}, lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + + return markerApply(marker, delegate.createExportDeclaration(false, null, specifiers, src)); + } + + expect('{'); + if (!match('}')) { + do { + isExportFromIdentifier = isExportFromIdentifier || matchKeyword('default'); + specifiers.push(parseExportSpecifier()); + } while (match(',') && lex()); + } + expect('}'); + + if (matchContextualKeyword('from')) { + // covering: + // export {default} from "foo"; + // export {foo} from "foo"; + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + } else if (isExportFromIdentifier) { + // covering: + // export {default}; // missing fromClause + throwError({}, lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } else { + // cover + // export {foo}; + consumeSemicolon(); + } + return markerApply(marker, delegate.createExportDeclaration(false, declaration, specifiers, src)); + } + + + function parseImportSpecifier() { + // import {} ...; + var id, name = null, marker = markerCreate(); + + id = parseNonComputedProperty(); + if (matchContextualKeyword('as')) { + lex(); + name = parseVariableIdentifier(); + } + + return markerApply(marker, delegate.createImportSpecifier(id, name)); + } + + function parseNamedImports() { + var specifiers = []; + // {foo, bar as bas} + expect('{'); + if (!match('}')) { + do { + specifiers.push(parseImportSpecifier()); + } while (match(',') && lex()); + } + expect('}'); + return specifiers; + } + + function parseImportDefaultSpecifier() { + // import ...; + var id, marker = markerCreate(); + + id = parseNonComputedProperty(); + + return markerApply(marker, delegate.createImportDefaultSpecifier(id)); + } + + function parseImportNamespaceSpecifier() { + // import <* as foo> ...; + var id, marker = markerCreate(); + + expect('*'); + if (!matchContextualKeyword('as')) { + throwError({}, Messages.NoAsAfterImportNamespace); + } + lex(); + id = parseNonComputedProperty(); + + return markerApply(marker, delegate.createImportNamespaceSpecifier(id)); + } + + function parseImportDeclaration() { + var specifiers, src, marker = markerCreate(), isType = false, token2; + + expectKeyword('import'); + + if (matchContextualKeyword('type')) { + token2 = lookahead2(); + if ((token2.type === Token.Identifier && token2.value !== 'from') || + (token2.type === Token.Punctuator && + (token2.value === '{' || token2.value === '*'))) { + isType = true; + lex(); + } + } + + specifiers = []; + + if (lookahead.type === Token.StringLiteral) { + // covers: + // import "foo"; + src = parseModuleSpecifier(); + consumeSemicolon(); + return markerApply(marker, delegate.createImportDeclaration(specifiers, src, isType)); + } + + if (!matchKeyword('default') && isIdentifierName(lookahead)) { + // covers: + // import foo + // import foo, ... + specifiers.push(parseImportDefaultSpecifier()); + if (match(',')) { + lex(); + } + } + if (match('*')) { + // covers: + // import foo, * as foo + // import * as foo + specifiers.push(parseImportNamespaceSpecifier()); + } else if (match('{')) { + // covers: + // import foo, {bar} + // import {bar} + specifiers = specifiers.concat(parseNamedImports()); + } + + if (!matchContextualKeyword('from')) { + throwError({}, lookahead.value ? + Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); + } + lex(); + src = parseModuleSpecifier(); + consumeSemicolon(); + + return markerApply(marker, delegate.createImportDeclaration(specifiers, src, isType)); + } + + // 12.3 Empty Statement + + function parseEmptyStatement() { + var marker = markerCreate(); + expect(';'); + return markerApply(marker, delegate.createEmptyStatement()); + } + + // 12.4 Expression Statement + + function parseExpressionStatement() { + var marker = markerCreate(), expr = parseExpression(); + consumeSemicolon(); + return markerApply(marker, delegate.createExpressionStatement(expr)); + } + + // 12.5 If statement + + function parseIfStatement() { + var test, consequent, alternate, marker = markerCreate(); + + expectKeyword('if'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + consequent = parseStatement(); + + if (matchKeyword('else')) { + lex(); + alternate = parseStatement(); + } else { + alternate = null; + } + + return markerApply(marker, delegate.createIfStatement(test, consequent, alternate)); + } + + // 12.6 Iteration Statements + + function parseDoWhileStatement() { + var body, test, oldInIteration, marker = markerCreate(); + + expectKeyword('do'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + body = parseStatement(); + + state.inIteration = oldInIteration; + + expectKeyword('while'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + if (match(';')) { + lex(); + } + + return markerApply(marker, delegate.createDoWhileStatement(body, test)); + } + + function parseWhileStatement() { + var test, body, oldInIteration, marker = markerCreate(); + + expectKeyword('while'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + body = parseStatement(); + + state.inIteration = oldInIteration; + + return markerApply(marker, delegate.createWhileStatement(test, body)); + } + + function parseForVariableDeclaration() { + var marker = markerCreate(), + token = lex(), + declarations = parseVariableDeclarationList(); + + return markerApply(marker, delegate.createVariableDeclaration(declarations, token.value)); + } + + function parseForStatement(opts) { + var init, test, update, left, right, body, operator, oldInIteration, + marker = markerCreate(); + init = test = update = null; + expectKeyword('for'); + + // http://wiki.ecmascript.org/doku.php?id=proposals:iterators_and_generators&s=each + if (matchContextualKeyword('each')) { + throwError({}, Messages.EachNotAllowed); + } + + expect('('); + + if (match(';')) { + lex(); + } else { + if (matchKeyword('var') || matchKeyword('let') || matchKeyword('const')) { + state.allowIn = false; + init = parseForVariableDeclaration(); + state.allowIn = true; + + if (init.declarations.length === 1) { + if (matchKeyword('in') || matchContextualKeyword('of')) { + operator = lookahead; + if (!((operator.value === 'in' || init.kind !== 'var') && init.declarations[0].init)) { + lex(); + left = init; + right = parseExpression(); + init = null; + } + } + } + } else { + state.allowIn = false; + init = parseExpression(); + state.allowIn = true; + + if (matchContextualKeyword('of')) { + operator = lex(); + left = init; + right = parseExpression(); + init = null; + } else if (matchKeyword('in')) { + // LeftHandSideExpression + if (!isAssignableLeftHandSide(init)) { + throwError({}, Messages.InvalidLHSInForIn); + } + operator = lex(); + left = init; + right = parseExpression(); + init = null; + } + } + + if (typeof left === 'undefined') { + expect(';'); + } + } + + if (typeof left === 'undefined') { + + if (!match(';')) { + test = parseExpression(); + } + expect(';'); + + if (!match(')')) { + update = parseExpression(); + } + } + + expect(')'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + if (!(opts !== undefined && opts.ignoreBody)) { + body = parseStatement(); + } + + state.inIteration = oldInIteration; + + if (typeof left === 'undefined') { + return markerApply(marker, delegate.createForStatement(init, test, update, body)); + } + + if (operator.value === 'in') { + return markerApply(marker, delegate.createForInStatement(left, right, body)); + } + return markerApply(marker, delegate.createForOfStatement(left, right, body)); + } + + // 12.7 The continue statement + + function parseContinueStatement() { + var label = null, marker = markerCreate(); + + expectKeyword('continue'); + + // Optimize the most common form: 'continue;'. + if (source.charCodeAt(index) === 59) { + lex(); + + if (!state.inIteration) { + throwError({}, Messages.IllegalContinue); + } + + return markerApply(marker, delegate.createContinueStatement(null)); + } + + if (peekLineTerminator()) { + if (!state.inIteration) { + throwError({}, Messages.IllegalContinue); + } + + return markerApply(marker, delegate.createContinueStatement(null)); + } + + if (lookahead.type === Token.Identifier) { + label = parseVariableIdentifier(); + + if (!state.labelSet.has(label.name)) { + throwError({}, Messages.UnknownLabel, label.name); + } + } + + consumeSemicolon(); + + if (label === null && !state.inIteration) { + throwError({}, Messages.IllegalContinue); + } + + return markerApply(marker, delegate.createContinueStatement(label)); + } + + // 12.8 The break statement + + function parseBreakStatement() { + var label = null, marker = markerCreate(); + + expectKeyword('break'); + + // Catch the very common case first: immediately a semicolon (char #59). + if (source.charCodeAt(index) === 59) { + lex(); + + if (!(state.inIteration || state.inSwitch)) { + throwError({}, Messages.IllegalBreak); + } + + return markerApply(marker, delegate.createBreakStatement(null)); + } + + if (peekLineTerminator()) { + if (!(state.inIteration || state.inSwitch)) { + throwError({}, Messages.IllegalBreak); + } + + return markerApply(marker, delegate.createBreakStatement(null)); + } + + if (lookahead.type === Token.Identifier) { + label = parseVariableIdentifier(); + + if (!state.labelSet.has(label.name)) { + throwError({}, Messages.UnknownLabel, label.name); + } + } + + consumeSemicolon(); + + if (label === null && !(state.inIteration || state.inSwitch)) { + throwError({}, Messages.IllegalBreak); + } + + return markerApply(marker, delegate.createBreakStatement(label)); + } + + // 12.9 The return statement + + function parseReturnStatement() { + var argument = null, marker = markerCreate(); + + expectKeyword('return'); + + if (!state.inFunctionBody) { + throwErrorTolerant({}, Messages.IllegalReturn); + } + + // 'return' followed by a space and an identifier is very common. + if (source.charCodeAt(index) === 32) { + if (isIdentifierStart(source.charCodeAt(index + 1))) { + argument = parseExpression(); + consumeSemicolon(); + return markerApply(marker, delegate.createReturnStatement(argument)); + } + } + + if (peekLineTerminator()) { + return markerApply(marker, delegate.createReturnStatement(null)); + } + + if (!match(';')) { + if (!match('}') && lookahead.type !== Token.EOF) { + argument = parseExpression(); + } + } + + consumeSemicolon(); + + return markerApply(marker, delegate.createReturnStatement(argument)); + } + + // 12.10 The with statement + + function parseWithStatement() { + var object, body, marker = markerCreate(); + + if (strict) { + throwErrorTolerant({}, Messages.StrictModeWith); + } + + expectKeyword('with'); + + expect('('); + + object = parseExpression(); + + expect(')'); + + body = parseStatement(); + + return markerApply(marker, delegate.createWithStatement(object, body)); + } + + // 12.10 The swith statement + + function parseSwitchCase() { + var test, + consequent = [], + sourceElement, + marker = markerCreate(); + + if (matchKeyword('default')) { + lex(); + test = null; + } else { + expectKeyword('case'); + test = parseExpression(); + } + expect(':'); + + while (index < length) { + if (match('}') || matchKeyword('default') || matchKeyword('case')) { + break; + } + sourceElement = parseSourceElement(); + if (typeof sourceElement === 'undefined') { + break; + } + consequent.push(sourceElement); + } + + return markerApply(marker, delegate.createSwitchCase(test, consequent)); + } + + function parseSwitchStatement() { + var discriminant, cases, clause, oldInSwitch, defaultFound, marker = markerCreate(); + + expectKeyword('switch'); + + expect('('); + + discriminant = parseExpression(); + + expect(')'); + + expect('{'); + + cases = []; + + if (match('}')) { + lex(); + return markerApply(marker, delegate.createSwitchStatement(discriminant, cases)); + } + + oldInSwitch = state.inSwitch; + state.inSwitch = true; + defaultFound = false; + + while (index < length) { + if (match('}')) { + break; + } + clause = parseSwitchCase(); + if (clause.test === null) { + if (defaultFound) { + throwError({}, Messages.MultipleDefaultsInSwitch); + } + defaultFound = true; + } + cases.push(clause); + } + + state.inSwitch = oldInSwitch; + + expect('}'); + + return markerApply(marker, delegate.createSwitchStatement(discriminant, cases)); + } + + // 12.13 The throw statement + + function parseThrowStatement() { + var argument, marker = markerCreate(); + + expectKeyword('throw'); + + if (peekLineTerminator()) { + throwError({}, Messages.NewlineAfterThrow); + } + + argument = parseExpression(); + + consumeSemicolon(); + + return markerApply(marker, delegate.createThrowStatement(argument)); + } + + // 12.14 The try statement + + function parseCatchClause() { + var param, body, marker = markerCreate(); + + expectKeyword('catch'); + + expect('('); + if (match(')')) { + throwUnexpected(lookahead); + } + + param = parseExpression(); + // 12.14.1 + if (strict && param.type === Syntax.Identifier && isRestrictedWord(param.name)) { + throwErrorTolerant({}, Messages.StrictCatchVariable); + } + + expect(')'); + body = parseBlock(); + return markerApply(marker, delegate.createCatchClause(param, body)); + } + + function parseTryStatement() { + var block, handlers = [], finalizer = null, marker = markerCreate(); + + expectKeyword('try'); + + block = parseBlock(); + + if (matchKeyword('catch')) { + handlers.push(parseCatchClause()); + } + + if (matchKeyword('finally')) { + lex(); + finalizer = parseBlock(); + } + + if (handlers.length === 0 && !finalizer) { + throwError({}, Messages.NoCatchOrFinally); + } + + return markerApply(marker, delegate.createTryStatement(block, [], handlers, finalizer)); + } + + // 12.15 The debugger statement + + function parseDebuggerStatement() { + var marker = markerCreate(); + expectKeyword('debugger'); + + consumeSemicolon(); + + return markerApply(marker, delegate.createDebuggerStatement()); + } + + // 12 Statements + + function parseStatement() { + var type = lookahead.type, + marker, + expr, + labeledBody; + + if (type === Token.EOF) { + throwUnexpected(lookahead); + } + + if (type === Token.Punctuator) { + switch (lookahead.value) { + case ';': + return parseEmptyStatement(); + case '{': + return parseBlock(); + case '(': + return parseExpressionStatement(); + default: + break; + } + } + + if (type === Token.Keyword) { + switch (lookahead.value) { + case 'break': + return parseBreakStatement(); + case 'continue': + return parseContinueStatement(); + case 'debugger': + return parseDebuggerStatement(); + case 'do': + return parseDoWhileStatement(); + case 'for': + return parseForStatement(); + case 'function': + return parseFunctionDeclaration(); + case 'class': + return parseClassDeclaration(); + case 'if': + return parseIfStatement(); + case 'return': + return parseReturnStatement(); + case 'switch': + return parseSwitchStatement(); + case 'throw': + return parseThrowStatement(); + case 'try': + return parseTryStatement(); + case 'var': + return parseVariableStatement(); + case 'while': + return parseWhileStatement(); + case 'with': + return parseWithStatement(); + default: + break; + } + } + + if (matchAsyncFuncExprOrDecl()) { + return parseFunctionDeclaration(); + } + + marker = markerCreate(); + expr = parseExpression(); + + // 12.12 Labelled Statements + if ((expr.type === Syntax.Identifier) && match(':')) { + lex(); + + if (state.labelSet.has(expr.name)) { + throwError({}, Messages.Redeclaration, 'Label', expr.name); + } + + state.labelSet.set(expr.name, true); + labeledBody = parseStatement(); + state.labelSet["delete"](expr.name); + return markerApply(marker, delegate.createLabeledStatement(expr, labeledBody)); + } + + consumeSemicolon(); + + return markerApply(marker, delegate.createExpressionStatement(expr)); + } + + // 13 Function Definition + + function parseConciseBody() { + if (match('{')) { + return parseFunctionSourceElements(); + } + return parseAssignmentExpression(); + } + + function parseFunctionSourceElements() { + var sourceElement, sourceElements = [], token, directive, firstRestricted, + oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, oldParenthesizedCount, + marker = markerCreate(); + + expect('{'); + + while (index < length) { + if (lookahead.type !== Token.StringLiteral) { + break; + } + token = lookahead; + + sourceElement = parseSourceElement(); + sourceElements.push(sourceElement); + if (sourceElement.expression.type !== Syntax.Literal) { + // this is not directive + break; + } + directive = source.slice(token.range[0] + 1, token.range[1] - 1); + if (directive === 'use strict') { + strict = true; + if (firstRestricted) { + throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral); + } + } else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + + oldLabelSet = state.labelSet; + oldInIteration = state.inIteration; + oldInSwitch = state.inSwitch; + oldInFunctionBody = state.inFunctionBody; + oldParenthesizedCount = state.parenthesizedCount; + + state.labelSet = new StringMap(); + state.inIteration = false; + state.inSwitch = false; + state.inFunctionBody = true; + state.parenthesizedCount = 0; + + while (index < length) { + if (match('}')) { + break; + } + sourceElement = parseSourceElement(); + if (typeof sourceElement === 'undefined') { + break; + } + sourceElements.push(sourceElement); + } + + expect('}'); + + state.labelSet = oldLabelSet; + state.inIteration = oldInIteration; + state.inSwitch = oldInSwitch; + state.inFunctionBody = oldInFunctionBody; + state.parenthesizedCount = oldParenthesizedCount; + + return markerApply(marker, delegate.createBlockStatement(sourceElements)); + } + + function validateParam(options, param, name) { + if (strict) { + if (isRestrictedWord(name)) { + options.stricted = param; + options.message = Messages.StrictParamName; + } + if (options.paramSet.has(name)) { + options.stricted = param; + options.message = Messages.StrictParamDupe; + } + } else if (!options.firstRestricted) { + if (isRestrictedWord(name)) { + options.firstRestricted = param; + options.message = Messages.StrictParamName; + } else if (isStrictModeReservedWord(name)) { + options.firstRestricted = param; + options.message = Messages.StrictReservedWord; + } else if (options.paramSet.has(name)) { + options.firstRestricted = param; + options.message = Messages.StrictParamDupe; + } + } + options.paramSet.set(name, true); + } + + function parseParam(options) { + var marker, token, rest, param, def; + + token = lookahead; + if (token.value === '...') { + token = lex(); + rest = true; + } + + if (match('[')) { + marker = markerCreate(); + param = parseArrayInitialiser(); + reinterpretAsDestructuredParameter(options, param); + if (match(':')) { + param.typeAnnotation = parseTypeAnnotation(); + markerApply(marker, param); + } + } else if (match('{')) { + marker = markerCreate(); + if (rest) { + throwError({}, Messages.ObjectPatternAsRestParameter); + } + param = parseObjectInitialiser(); + reinterpretAsDestructuredParameter(options, param); + if (match(':')) { + param.typeAnnotation = parseTypeAnnotation(); + markerApply(marker, param); + } + } else { + param = + rest + ? parseTypeAnnotatableIdentifier( + false, /* requireTypeAnnotation */ + false /* canBeOptionalParam */ + ) + : parseTypeAnnotatableIdentifier( + false, /* requireTypeAnnotation */ + true /* canBeOptionalParam */ + ); + + validateParam(options, token, token.value); + } + + if (match('=')) { + if (rest) { + throwErrorTolerant(lookahead, Messages.DefaultRestParameter); + } + lex(); + def = parseAssignmentExpression(); + ++options.defaultCount; + } + + if (rest) { + if (!match(')')) { + throwError({}, Messages.ParameterAfterRestParameter); + } + options.rest = param; + return false; + } + + options.params.push(param); + options.defaults.push(def); + return !match(')'); + } + + function parseParams(firstRestricted) { + var options, marker = markerCreate(); + + options = { + params: [], + defaultCount: 0, + defaults: [], + rest: null, + firstRestricted: firstRestricted + }; + + expect('('); + + if (!match(')')) { + options.paramSet = new StringMap(); + while (index < length) { + if (!parseParam(options)) { + break; + } + expect(','); + } + } + + expect(')'); + + if (options.defaultCount === 0) { + options.defaults = []; + } + + if (match(':')) { + options.returnType = parseTypeAnnotation(); + } + + return markerApply(marker, options); + } + + function parseFunctionDeclaration() { + var id, body, token, tmp, firstRestricted, message, generator, isAsync, + previousStrict, previousYieldAllowed, previousAwaitAllowed, + marker = markerCreate(), typeParameters; + + isAsync = false; + if (matchAsync()) { + lex(); + isAsync = true; + } + + expectKeyword('function'); + + generator = false; + if (match('*')) { + lex(); + generator = true; + } + + token = lookahead; + + id = parseVariableIdentifier(); + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + if (strict) { + if (isRestrictedWord(token.value)) { + throwErrorTolerant(token, Messages.StrictFunctionName); + } + } else { + if (isRestrictedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictFunctionName; + } else if (isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictReservedWord; + } + } + + tmp = parseParams(firstRestricted); + firstRestricted = tmp.firstRestricted; + if (tmp.message) { + message = tmp.message; + } + + previousStrict = strict; + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = generator; + previousAwaitAllowed = state.awaitAllowed; + state.awaitAllowed = isAsync; + + body = parseFunctionSourceElements(); + + if (strict && firstRestricted) { + throwError(firstRestricted, message); + } + if (strict && tmp.stricted) { + throwErrorTolerant(tmp.stricted, message); + } + strict = previousStrict; + state.yieldAllowed = previousYieldAllowed; + state.awaitAllowed = previousAwaitAllowed; + + return markerApply( + marker, + delegate.createFunctionDeclaration( + id, + tmp.params, + tmp.defaults, + body, + tmp.rest, + generator, + false, + isAsync, + tmp.returnType, + typeParameters + ) + ); + } + + function parseFunctionExpression() { + var token, id = null, firstRestricted, message, tmp, body, generator, isAsync, + previousStrict, previousYieldAllowed, previousAwaitAllowed, + marker = markerCreate(), typeParameters; + + isAsync = false; + if (matchAsync()) { + lex(); + isAsync = true; + } + + expectKeyword('function'); + + generator = false; + + if (match('*')) { + lex(); + generator = true; + } + + if (!match('(')) { + if (!match('<')) { + token = lookahead; + id = parseVariableIdentifier(); + + if (strict) { + if (isRestrictedWord(token.value)) { + throwErrorTolerant(token, Messages.StrictFunctionName); + } + } else { + if (isRestrictedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictFunctionName; + } else if (isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictReservedWord; + } + } + } + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + } + + tmp = parseParams(firstRestricted); + firstRestricted = tmp.firstRestricted; + if (tmp.message) { + message = tmp.message; + } + + previousStrict = strict; + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = generator; + previousAwaitAllowed = state.awaitAllowed; + state.awaitAllowed = isAsync; + + body = parseFunctionSourceElements(); + + if (strict && firstRestricted) { + throwError(firstRestricted, message); + } + if (strict && tmp.stricted) { + throwErrorTolerant(tmp.stricted, message); + } + strict = previousStrict; + state.yieldAllowed = previousYieldAllowed; + state.awaitAllowed = previousAwaitAllowed; + + return markerApply( + marker, + delegate.createFunctionExpression( + id, + tmp.params, + tmp.defaults, + body, + tmp.rest, + generator, + false, + isAsync, + tmp.returnType, + typeParameters + ) + ); + } + + function parseYieldExpression() { + var delegateFlag, expr, marker = markerCreate(); + + expectKeyword('yield', !strict); + + delegateFlag = false; + if (match('*')) { + lex(); + delegateFlag = true; + } + + expr = parseAssignmentExpression(); + + return markerApply(marker, delegate.createYieldExpression(expr, delegateFlag)); + } + + function parseAwaitExpression() { + var expr, marker = markerCreate(); + expectContextualKeyword('await'); + expr = parseAssignmentExpression(); + return markerApply(marker, delegate.createAwaitExpression(expr)); + } + + // 14 Functions and classes + + // 14.1 Functions is defined above (13 in ES5) + // 14.2 Arrow Functions Definitions is defined in (7.3 assignments) + + // 14.3 Method Definitions + // 14.3.7 + function specialMethod(methodDefinition) { + return methodDefinition.kind === 'get' || + methodDefinition.kind === 'set' || + methodDefinition.value.generator; + } + + function parseMethodDefinition(key, isStatic, generator, computed) { + var token, param, propType, + isAsync, typeParameters, tokenValue, returnType; + + propType = isStatic ? ClassPropertyType["static"] : ClassPropertyType.prototype; + + if (generator) { + return delegate.createMethodDefinition( + propType, + '', + key, + parsePropertyMethodFunction({ generator: true }), + computed + ); + } + + tokenValue = key.type === 'Identifier' && key.name; + + if (tokenValue === 'get' && !match('(')) { + key = parseObjectPropertyKey(); + + expect('('); + expect(')'); + if (match(':')) { + returnType = parseTypeAnnotation(); + } + return delegate.createMethodDefinition( + propType, + 'get', + key, + parsePropertyFunction({ generator: false, returnType: returnType }), + computed + ); + } + if (tokenValue === 'set' && !match('(')) { + key = parseObjectPropertyKey(); + + expect('('); + token = lookahead; + param = [ parseTypeAnnotatableIdentifier() ]; + expect(')'); + if (match(':')) { + returnType = parseTypeAnnotation(); + } + return delegate.createMethodDefinition( + propType, + 'set', + key, + parsePropertyFunction({ + params: param, + generator: false, + name: token, + returnType: returnType + }), + computed + ); + } + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + isAsync = tokenValue === 'async' && !match('('); + if (isAsync) { + key = parseObjectPropertyKey(); + } + + return delegate.createMethodDefinition( + propType, + '', + key, + parsePropertyMethodFunction({ + generator: false, + async: isAsync, + typeParameters: typeParameters + }), + computed + ); + } + + function parseClassProperty(key, computed, isStatic) { + var typeAnnotation; + + typeAnnotation = parseTypeAnnotation(); + expect(';'); + + return delegate.createClassProperty( + key, + typeAnnotation, + computed, + isStatic + ); + } + + function parseClassElement() { + var computed = false, generator = false, key, marker = markerCreate(), + isStatic = false, possiblyOpenBracketToken; + if (match(';')) { + lex(); + return undefined; + } + + if (lookahead.value === 'static') { + lex(); + isStatic = true; + } + + if (match('*')) { + lex(); + generator = true; + } + + possiblyOpenBracketToken = lookahead; + if (matchContextualKeyword('get') || matchContextualKeyword('set')) { + possiblyOpenBracketToken = lookahead2(); + } + + if (possiblyOpenBracketToken.type === Token.Punctuator + && possiblyOpenBracketToken.value === '[') { + computed = true; + } + + key = parseObjectPropertyKey(); + + if (!generator && lookahead.value === ':') { + return markerApply(marker, parseClassProperty(key, computed, isStatic)); + } + + return markerApply(marker, parseMethodDefinition( + key, + isStatic, + generator, + computed + )); + } + + function parseClassBody() { + var classElement, classElements = [], existingProps = {}, + marker = markerCreate(), propName, propType; + + existingProps[ClassPropertyType["static"]] = new StringMap(); + existingProps[ClassPropertyType.prototype] = new StringMap(); + + expect('{'); + + while (index < length) { + if (match('}')) { + break; + } + classElement = parseClassElement(existingProps); + + if (typeof classElement !== 'undefined') { + classElements.push(classElement); + + propName = !classElement.computed && getFieldName(classElement.key); + if (propName !== false) { + propType = classElement["static"] ? + ClassPropertyType["static"] : + ClassPropertyType.prototype; + + if (classElement.type === Syntax.MethodDefinition) { + if (propName === 'constructor' && !classElement["static"]) { + if (specialMethod(classElement)) { + throwError(classElement, Messages.IllegalClassConstructorProperty); + } + if (existingProps[ClassPropertyType.prototype].has('constructor')) { + throwError(classElement.key, Messages.IllegalDuplicateClassProperty); + } + } + existingProps[propType].set(propName, true); + } + } + } + } + + expect('}'); + + return markerApply(marker, delegate.createClassBody(classElements)); + } + + function parseClassImplements() { + var id, implemented = [], marker, typeParameters; + if (strict) { + expectKeyword('implements'); + } else { + expectContextualKeyword('implements'); + } + while (index < length) { + marker = markerCreate(); + id = parseVariableIdentifier(); + if (match('<')) { + typeParameters = parseTypeParameterInstantiation(); + } else { + typeParameters = null; + } + implemented.push(markerApply(marker, delegate.createClassImplements( + id, + typeParameters + ))); + if (!match(',')) { + break; + } + expect(','); + } + return implemented; + } + + function parseClassExpression() { + var id, implemented, previousYieldAllowed, superClass = null, + superTypeParameters, marker = markerCreate(), typeParameters, + matchImplements; + + expectKeyword('class'); + + matchImplements = + strict + ? matchKeyword('implements') + : matchContextualKeyword('implements'); + + if (!matchKeyword('extends') && !matchImplements && !match('{')) { + id = parseVariableIdentifier(); + } + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + if (matchKeyword('extends')) { + expectKeyword('extends'); + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = false; + superClass = parseLeftHandSideExpressionAllowCall(); + if (match('<')) { + superTypeParameters = parseTypeParameterInstantiation(); + } + state.yieldAllowed = previousYieldAllowed; + } + + if (strict ? matchKeyword('implements') : matchContextualKeyword('implements')) { + implemented = parseClassImplements(); + } + + return markerApply(marker, delegate.createClassExpression( + id, + superClass, + parseClassBody(), + typeParameters, + superTypeParameters, + implemented + )); + } + + function parseClassDeclaration() { + var id, implemented, previousYieldAllowed, superClass = null, + superTypeParameters, marker = markerCreate(), typeParameters; + + expectKeyword('class'); + + id = parseVariableIdentifier(); + + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + if (matchKeyword('extends')) { + expectKeyword('extends'); + previousYieldAllowed = state.yieldAllowed; + state.yieldAllowed = false; + superClass = parseLeftHandSideExpressionAllowCall(); + if (match('<')) { + superTypeParameters = parseTypeParameterInstantiation(); + } + state.yieldAllowed = previousYieldAllowed; + } + + if (strict ? matchKeyword('implements') : matchContextualKeyword('implements')) { + implemented = parseClassImplements(); + } + + return markerApply(marker, delegate.createClassDeclaration( + id, + superClass, + parseClassBody(), + typeParameters, + superTypeParameters, + implemented + )); + } + + // 15 Program + + function parseSourceElement() { + var token; + if (lookahead.type === Token.Keyword) { + switch (lookahead.value) { + case 'const': + case 'let': + return parseConstLetDeclaration(lookahead.value); + case 'function': + return parseFunctionDeclaration(); + case 'export': + throwErrorTolerant({}, Messages.IllegalExportDeclaration); + return parseExportDeclaration(); + case 'import': + throwErrorTolerant({}, Messages.IllegalImportDeclaration); + return parseImportDeclaration(); + case 'interface': + if (lookahead2().type === Token.Identifier) { + return parseInterface(); + } + return parseStatement(); + default: + return parseStatement(); + } + } + + if (matchContextualKeyword('type') + && lookahead2().type === Token.Identifier) { + return parseTypeAlias(); + } + + if (matchContextualKeyword('interface') + && lookahead2().type === Token.Identifier) { + return parseInterface(); + } + + if (matchContextualKeyword('declare')) { + token = lookahead2(); + if (token.type === Token.Keyword) { + switch (token.value) { + case 'class': + return parseDeclareClass(); + case 'function': + return parseDeclareFunction(); + case 'var': + return parseDeclareVariable(); + } + } else if (token.type === Token.Identifier + && token.value === 'module') { + return parseDeclareModule(); + } + } + + if (lookahead.type !== Token.EOF) { + return parseStatement(); + } + } + + function parseProgramElement() { + var isModule = extra.sourceType === 'module' || extra.sourceType === 'nonStrictModule'; + + if (isModule && lookahead.type === Token.Keyword) { + switch (lookahead.value) { + case 'export': + return parseExportDeclaration(); + case 'import': + return parseImportDeclaration(); + } + } + + return parseSourceElement(); + } + + function parseProgramElements() { + var sourceElement, sourceElements = [], token, directive, firstRestricted; + + while (index < length) { + token = lookahead; + if (token.type !== Token.StringLiteral) { + break; + } + + sourceElement = parseProgramElement(); + sourceElements.push(sourceElement); + if (sourceElement.expression.type !== Syntax.Literal) { + // this is not directive + break; + } + directive = source.slice(token.range[0] + 1, token.range[1] - 1); + if (directive === 'use strict') { + strict = true; + if (firstRestricted) { + throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral); + } + } else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + + while (index < length) { + sourceElement = parseProgramElement(); + if (typeof sourceElement === 'undefined') { + break; + } + sourceElements.push(sourceElement); + } + return sourceElements; + } + + function parseProgram() { + var body, marker = markerCreate(); + strict = extra.sourceType === 'module'; + peek(); + body = parseProgramElements(); + return markerApply(marker, delegate.createProgram(body)); + } + + // 16 JSX + + XHTMLEntities = { + quot: '\u0022', + amp: '&', + apos: '\u0027', + lt: '<', + gt: '>', + nbsp: '\u00A0', + iexcl: '\u00A1', + cent: '\u00A2', + pound: '\u00A3', + curren: '\u00A4', + yen: '\u00A5', + brvbar: '\u00A6', + sect: '\u00A7', + uml: '\u00A8', + copy: '\u00A9', + ordf: '\u00AA', + laquo: '\u00AB', + not: '\u00AC', + shy: '\u00AD', + reg: '\u00AE', + macr: '\u00AF', + deg: '\u00B0', + plusmn: '\u00B1', + sup2: '\u00B2', + sup3: '\u00B3', + acute: '\u00B4', + micro: '\u00B5', + para: '\u00B6', + middot: '\u00B7', + cedil: '\u00B8', + sup1: '\u00B9', + ordm: '\u00BA', + raquo: '\u00BB', + frac14: '\u00BC', + frac12: '\u00BD', + frac34: '\u00BE', + iquest: '\u00BF', + Agrave: '\u00C0', + Aacute: '\u00C1', + Acirc: '\u00C2', + Atilde: '\u00C3', + Auml: '\u00C4', + Aring: '\u00C5', + AElig: '\u00C6', + Ccedil: '\u00C7', + Egrave: '\u00C8', + Eacute: '\u00C9', + Ecirc: '\u00CA', + Euml: '\u00CB', + Igrave: '\u00CC', + Iacute: '\u00CD', + Icirc: '\u00CE', + Iuml: '\u00CF', + ETH: '\u00D0', + Ntilde: '\u00D1', + Ograve: '\u00D2', + Oacute: '\u00D3', + Ocirc: '\u00D4', + Otilde: '\u00D5', + Ouml: '\u00D6', + times: '\u00D7', + Oslash: '\u00D8', + Ugrave: '\u00D9', + Uacute: '\u00DA', + Ucirc: '\u00DB', + Uuml: '\u00DC', + Yacute: '\u00DD', + THORN: '\u00DE', + szlig: '\u00DF', + agrave: '\u00E0', + aacute: '\u00E1', + acirc: '\u00E2', + atilde: '\u00E3', + auml: '\u00E4', + aring: '\u00E5', + aelig: '\u00E6', + ccedil: '\u00E7', + egrave: '\u00E8', + eacute: '\u00E9', + ecirc: '\u00EA', + euml: '\u00EB', + igrave: '\u00EC', + iacute: '\u00ED', + icirc: '\u00EE', + iuml: '\u00EF', + eth: '\u00F0', + ntilde: '\u00F1', + ograve: '\u00F2', + oacute: '\u00F3', + ocirc: '\u00F4', + otilde: '\u00F5', + ouml: '\u00F6', + divide: '\u00F7', + oslash: '\u00F8', + ugrave: '\u00F9', + uacute: '\u00FA', + ucirc: '\u00FB', + uuml: '\u00FC', + yacute: '\u00FD', + thorn: '\u00FE', + yuml: '\u00FF', + OElig: '\u0152', + oelig: '\u0153', + Scaron: '\u0160', + scaron: '\u0161', + Yuml: '\u0178', + fnof: '\u0192', + circ: '\u02C6', + tilde: '\u02DC', + Alpha: '\u0391', + Beta: '\u0392', + Gamma: '\u0393', + Delta: '\u0394', + Epsilon: '\u0395', + Zeta: '\u0396', + Eta: '\u0397', + Theta: '\u0398', + Iota: '\u0399', + Kappa: '\u039A', + Lambda: '\u039B', + Mu: '\u039C', + Nu: '\u039D', + Xi: '\u039E', + Omicron: '\u039F', + Pi: '\u03A0', + Rho: '\u03A1', + Sigma: '\u03A3', + Tau: '\u03A4', + Upsilon: '\u03A5', + Phi: '\u03A6', + Chi: '\u03A7', + Psi: '\u03A8', + Omega: '\u03A9', + alpha: '\u03B1', + beta: '\u03B2', + gamma: '\u03B3', + delta: '\u03B4', + epsilon: '\u03B5', + zeta: '\u03B6', + eta: '\u03B7', + theta: '\u03B8', + iota: '\u03B9', + kappa: '\u03BA', + lambda: '\u03BB', + mu: '\u03BC', + nu: '\u03BD', + xi: '\u03BE', + omicron: '\u03BF', + pi: '\u03C0', + rho: '\u03C1', + sigmaf: '\u03C2', + sigma: '\u03C3', + tau: '\u03C4', + upsilon: '\u03C5', + phi: '\u03C6', + chi: '\u03C7', + psi: '\u03C8', + omega: '\u03C9', + thetasym: '\u03D1', + upsih: '\u03D2', + piv: '\u03D6', + ensp: '\u2002', + emsp: '\u2003', + thinsp: '\u2009', + zwnj: '\u200C', + zwj: '\u200D', + lrm: '\u200E', + rlm: '\u200F', + ndash: '\u2013', + mdash: '\u2014', + lsquo: '\u2018', + rsquo: '\u2019', + sbquo: '\u201A', + ldquo: '\u201C', + rdquo: '\u201D', + bdquo: '\u201E', + dagger: '\u2020', + Dagger: '\u2021', + bull: '\u2022', + hellip: '\u2026', + permil: '\u2030', + prime: '\u2032', + Prime: '\u2033', + lsaquo: '\u2039', + rsaquo: '\u203A', + oline: '\u203E', + frasl: '\u2044', + euro: '\u20AC', + image: '\u2111', + weierp: '\u2118', + real: '\u211C', + trade: '\u2122', + alefsym: '\u2135', + larr: '\u2190', + uarr: '\u2191', + rarr: '\u2192', + darr: '\u2193', + harr: '\u2194', + crarr: '\u21B5', + lArr: '\u21D0', + uArr: '\u21D1', + rArr: '\u21D2', + dArr: '\u21D3', + hArr: '\u21D4', + forall: '\u2200', + part: '\u2202', + exist: '\u2203', + empty: '\u2205', + nabla: '\u2207', + isin: '\u2208', + notin: '\u2209', + ni: '\u220B', + prod: '\u220F', + sum: '\u2211', + minus: '\u2212', + lowast: '\u2217', + radic: '\u221A', + prop: '\u221D', + infin: '\u221E', + ang: '\u2220', + and: '\u2227', + or: '\u2228', + cap: '\u2229', + cup: '\u222A', + 'int': '\u222B', + there4: '\u2234', + sim: '\u223C', + cong: '\u2245', + asymp: '\u2248', + ne: '\u2260', + equiv: '\u2261', + le: '\u2264', + ge: '\u2265', + sub: '\u2282', + sup: '\u2283', + nsub: '\u2284', + sube: '\u2286', + supe: '\u2287', + oplus: '\u2295', + otimes: '\u2297', + perp: '\u22A5', + sdot: '\u22C5', + lceil: '\u2308', + rceil: '\u2309', + lfloor: '\u230A', + rfloor: '\u230B', + lang: '\u2329', + rang: '\u232A', + loz: '\u25CA', + spades: '\u2660', + clubs: '\u2663', + hearts: '\u2665', + diams: '\u2666' + }; + + function getQualifiedJSXName(object) { + if (object.type === Syntax.JSXIdentifier) { + return object.name; + } + if (object.type === Syntax.JSXNamespacedName) { + return object.namespace.name + ':' + object.name.name; + } + /* istanbul ignore else */ + if (object.type === Syntax.JSXMemberExpression) { + return ( + getQualifiedJSXName(object.object) + '.' + + getQualifiedJSXName(object.property) + ); + } + /* istanbul ignore next */ + throwUnexpected(object); + } + + function isJSXIdentifierStart(ch) { + // exclude backslash (\) + return (ch !== 92) && isIdentifierStart(ch); + } + + function isJSXIdentifierPart(ch) { + // exclude backslash (\) and add hyphen (-) + return (ch !== 92) && (ch === 45 || isIdentifierPart(ch)); + } + + function scanJSXIdentifier() { + var ch, start, value = ''; + + start = index; + while (index < length) { + ch = source.charCodeAt(index); + if (!isJSXIdentifierPart(ch)) { + break; + } + value += source[index++]; + } + + return { + type: Token.JSXIdentifier, + value: value, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanJSXEntity() { + var ch, str = '', start = index, count = 0, code; + ch = source[index]; + assert(ch === '&', 'Entity must start with an ampersand'); + index++; + while (index < length && count++ < 10) { + ch = source[index++]; + if (ch === ';') { + break; + } + str += ch; + } + + // Well-formed entity (ending was found). + if (ch === ';') { + // Numeric entity. + if (str[0] === '#') { + if (str[1] === 'x') { + code = +('0' + str.substr(1)); + } else { + // Removing leading zeros in order to avoid treating as octal in old browsers. + code = +str.substr(1).replace(Regex.LeadingZeros, ''); + } + + if (!isNaN(code)) { + return String.fromCharCode(code); + } + /* istanbul ignore else */ + } else if (XHTMLEntities[str]) { + return XHTMLEntities[str]; + } + } + + // Treat non-entity sequences as regular text. + index = start + 1; + return '&'; + } + + function scanJSXText(stopChars) { + var ch, str = '', start; + start = index; + while (index < length) { + ch = source[index]; + if (stopChars.indexOf(ch) !== -1) { + break; + } + if (ch === '&') { + str += scanJSXEntity(); + } else { + index++; + if (ch === '\r' && source[index] === '\n') { + str += ch; + ch = source[index]; + index++; + } + if (isLineTerminator(ch.charCodeAt(0))) { + ++lineNumber; + lineStart = index; + } + str += ch; + } + } + return { + type: Token.JSXText, + value: str, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanJSXStringLiteral() { + var innerToken, quote, start; + + quote = source[index]; + assert((quote === '\'' || quote === '"'), + 'String literal must starts with a quote'); + + start = index; + ++index; + + innerToken = scanJSXText([quote]); + + if (quote !== source[index]) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + ++index; + + innerToken.range = [start, index]; + + return innerToken; + } + + /** + * Between JSX opening and closing tags (e.g. HERE), anything that + * is not another JSX tag and is not an expression wrapped by {} is text. + */ + function advanceJSXChild() { + var ch = source.charCodeAt(index); + + // '<' 60, '>' 62, '{' 123, '}' 125 + if (ch !== 60 && ch !== 62 && ch !== 123 && ch !== 125) { + return scanJSXText(['<', '>', '{', '}']); + } + + return scanPunctuator(); + } + + function parseJSXIdentifier() { + var token, marker = markerCreate(); + + if (lookahead.type !== Token.JSXIdentifier) { + throwUnexpected(lookahead); + } + + token = lex(); + return markerApply(marker, delegate.createJSXIdentifier(token.value)); + } + + function parseJSXNamespacedName() { + var namespace, name, marker = markerCreate(); + + namespace = parseJSXIdentifier(); + expect(':'); + name = parseJSXIdentifier(); + + return markerApply(marker, delegate.createJSXNamespacedName(namespace, name)); + } + + function parseJSXMemberExpression() { + var marker = markerCreate(), + expr = parseJSXIdentifier(); + + while (match('.')) { + lex(); + expr = markerApply(marker, delegate.createJSXMemberExpression(expr, parseJSXIdentifier())); + } + + return expr; + } + + function parseJSXElementName() { + if (lookahead2().value === ':') { + return parseJSXNamespacedName(); + } + if (lookahead2().value === '.') { + return parseJSXMemberExpression(); + } + + return parseJSXIdentifier(); + } + + function parseJSXAttributeName() { + if (lookahead2().value === ':') { + return parseJSXNamespacedName(); + } + + return parseJSXIdentifier(); + } + + function parseJSXAttributeValue() { + var value, marker; + if (match('{')) { + value = parseJSXExpressionContainer(); + if (value.expression.type === Syntax.JSXEmptyExpression) { + throwError( + value, + 'JSX attributes must only be assigned a non-empty ' + + 'expression' + ); + } + } else if (match('<')) { + value = parseJSXElement(); + } else if (lookahead.type === Token.JSXText) { + marker = markerCreate(); + value = markerApply(marker, delegate.createLiteral(lex())); + } else { + throwError({}, Messages.InvalidJSXAttributeValue); + } + return value; + } + + function parseJSXEmptyExpression() { + var marker = markerCreatePreserveWhitespace(); + while (source.charAt(index) !== '}') { + index++; + } + return markerApply(marker, delegate.createJSXEmptyExpression()); + } + + function parseJSXExpressionContainer() { + var expression, origInJSXChild, origInJSXTag, marker = markerCreate(); + + origInJSXChild = state.inJSXChild; + origInJSXTag = state.inJSXTag; + state.inJSXChild = false; + state.inJSXTag = false; + + expect('{'); + + if (match('}')) { + expression = parseJSXEmptyExpression(); + } else { + expression = parseExpression(); + } + + state.inJSXChild = origInJSXChild; + state.inJSXTag = origInJSXTag; + + expect('}'); + + return markerApply(marker, delegate.createJSXExpressionContainer(expression)); + } + + function parseJSXSpreadAttribute() { + var expression, origInJSXChild, origInJSXTag, marker = markerCreate(); + + origInJSXChild = state.inJSXChild; + origInJSXTag = state.inJSXTag; + state.inJSXChild = false; + state.inJSXTag = false; + + expect('{'); + expect('...'); + + expression = parseAssignmentExpression(); + + state.inJSXChild = origInJSXChild; + state.inJSXTag = origInJSXTag; + + expect('}'); + + return markerApply(marker, delegate.createJSXSpreadAttribute(expression)); + } + + function parseJSXAttribute() { + var name, marker; + + if (match('{')) { + return parseJSXSpreadAttribute(); + } + + marker = markerCreate(); + + name = parseJSXAttributeName(); + + // HTML empty attribute + if (match('=')) { + lex(); + return markerApply(marker, delegate.createJSXAttribute(name, parseJSXAttributeValue())); + } + + return markerApply(marker, delegate.createJSXAttribute(name)); + } + + function parseJSXChild() { + var token, marker; + if (match('{')) { + token = parseJSXExpressionContainer(); + } else if (lookahead.type === Token.JSXText) { + marker = markerCreatePreserveWhitespace(); + token = markerApply(marker, delegate.createLiteral(lex())); + } else if (match('<')) { + token = parseJSXElement(); + } else { + throwUnexpected(lookahead); + } + return token; + } + + function parseJSXClosingElement() { + var name, origInJSXChild, origInJSXTag, marker = markerCreate(); + origInJSXChild = state.inJSXChild; + origInJSXTag = state.inJSXTag; + state.inJSXChild = false; + state.inJSXTag = true; + expect('<'); + expect('/'); + name = parseJSXElementName(); + // Because advance() (called by lex() called by expect()) expects there + // to be a valid token after >, it needs to know whether to look for a + // standard JS token or an JSX text node + state.inJSXChild = origInJSXChild; + state.inJSXTag = origInJSXTag; + expect('>'); + return markerApply(marker, delegate.createJSXClosingElement(name)); + } + + function parseJSXOpeningElement() { + var name, attributes = [], selfClosing = false, origInJSXChild, origInJSXTag, marker = markerCreate(); + + origInJSXChild = state.inJSXChild; + origInJSXTag = state.inJSXTag; + state.inJSXChild = false; + state.inJSXTag = true; + + expect('<'); + + name = parseJSXElementName(); + + while (index < length && + lookahead.value !== '/' && + lookahead.value !== '>') { + attributes.push(parseJSXAttribute()); + } + + state.inJSXTag = origInJSXTag; + + if (lookahead.value === '/') { + expect('/'); + // Because advance() (called by lex() called by expect()) expects + // there to be a valid token after >, it needs to know whether to + // look for a standard JS token or an JSX text node + state.inJSXChild = origInJSXChild; + expect('>'); + selfClosing = true; + } else { + state.inJSXChild = true; + expect('>'); + } + return markerApply(marker, delegate.createJSXOpeningElement(name, attributes, selfClosing)); + } + + function parseJSXElement() { + var openingElement, closingElement = null, children = [], origInJSXChild, origInJSXTag, marker = markerCreate(); + + origInJSXChild = state.inJSXChild; + origInJSXTag = state.inJSXTag; + openingElement = parseJSXOpeningElement(); + + if (!openingElement.selfClosing) { + while (index < length) { + state.inJSXChild = false; // Call lookahead2() with inJSXChild = false because one
two
; + // + // the default error message is a bit incomprehensible. Since it's + // rarely (never?) useful to write a less-than sign after an JSX + // element, we disallow it here in the parser in order to provide a + // better error message. (In the rare case that the less-than operator + // was intended, the left tag can be wrapped in parentheses.) + if (!origInJSXChild && match('<')) { + throwError(lookahead, Messages.AdjacentJSXElements); + } + + return markerApply(marker, delegate.createJSXElement(openingElement, closingElement, children)); + } + + function parseTypeAlias() { + var id, marker = markerCreate(), typeParameters = null, right; + expectContextualKeyword('type'); + id = parseVariableIdentifier(); + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + expect('='); + right = parseType(); + consumeSemicolon(); + return markerApply(marker, delegate.createTypeAlias(id, typeParameters, right)); + } + + function parseInterfaceExtends() { + var marker = markerCreate(), id, typeParameters = null; + + id = parseVariableIdentifier(); + if (match('<')) { + typeParameters = parseTypeParameterInstantiation(); + } + + return markerApply(marker, delegate.createInterfaceExtends( + id, + typeParameters + )); + } + + function parseInterfaceish(marker, allowStatic) { + var body, bodyMarker, extended = [], id, + typeParameters = null; + + id = parseVariableIdentifier(); + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + + if (matchKeyword('extends')) { + expectKeyword('extends'); + + while (index < length) { + extended.push(parseInterfaceExtends()); + if (!match(',')) { + break; + } + expect(','); + } + } + + bodyMarker = markerCreate(); + body = markerApply(bodyMarker, parseObjectType(allowStatic)); + + return markerApply(marker, delegate.createInterface( + id, + typeParameters, + body, + extended + )); + } + + function parseInterface() { + var marker = markerCreate(); + + if (strict) { + expectKeyword('interface'); + } else { + expectContextualKeyword('interface'); + } + + return parseInterfaceish(marker, /* allowStatic */false); + } + + function parseDeclareClass() { + var marker = markerCreate(), ret; + expectContextualKeyword('declare'); + expectKeyword('class'); + + ret = parseInterfaceish(marker, /* allowStatic */true); + ret.type = Syntax.DeclareClass; + return ret; + } + + function parseDeclareFunction() { + var id, idMarker, + marker = markerCreate(), params, returnType, rest, tmp, + typeParameters = null, value, valueMarker; + + expectContextualKeyword('declare'); + expectKeyword('function'); + idMarker = markerCreate(); + id = parseVariableIdentifier(); + + valueMarker = markerCreate(); + if (match('<')) { + typeParameters = parseTypeParameterDeclaration(); + } + expect('('); + tmp = parseFunctionTypeParams(); + params = tmp.params; + rest = tmp.rest; + expect(')'); + + expect(':'); + returnType = parseType(); + + value = markerApply(valueMarker, delegate.createFunctionTypeAnnotation( + params, + returnType, + rest, + typeParameters + )); + + id.typeAnnotation = markerApply(valueMarker, delegate.createTypeAnnotation( + value + )); + markerApply(idMarker, id); + + consumeSemicolon(); + + return markerApply(marker, delegate.createDeclareFunction( + id + )); + } + + function parseDeclareVariable() { + var id, marker = markerCreate(); + expectContextualKeyword('declare'); + expectKeyword('var'); + id = parseTypeAnnotatableIdentifier(); + + consumeSemicolon(); + + return markerApply(marker, delegate.createDeclareVariable( + id + )); + } + + function parseDeclareModule() { + var body = [], bodyMarker, id, idMarker, marker = markerCreate(), token; + expectContextualKeyword('declare'); + expectContextualKeyword('module'); + + if (lookahead.type === Token.StringLiteral) { + if (strict && lookahead.octal) { + throwErrorTolerant(lookahead, Messages.StrictOctalLiteral); + } + idMarker = markerCreate(); + id = markerApply(idMarker, delegate.createLiteral(lex())); + } else { + id = parseVariableIdentifier(); + } + + bodyMarker = markerCreate(); + expect('{'); + while (index < length && !match('}')) { + token = lookahead2(); + switch (token.value) { + case 'class': + body.push(parseDeclareClass()); + break; + case 'function': + body.push(parseDeclareFunction()); + break; + case 'var': + body.push(parseDeclareVariable()); + break; + default: + throwUnexpected(lookahead); + } + } + expect('}'); + + return markerApply(marker, delegate.createDeclareModule( + id, + markerApply(bodyMarker, delegate.createBlockStatement(body)) + )); + } + + function collectToken() { + var loc, token, range, value, entry; + + /* istanbul ignore else */ + if (!state.inJSXChild) { + skipComment(); + } + + loc = { + start: { + line: lineNumber, + column: index - lineStart + } + }; + + token = extra.advance(); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + + if (token.type !== Token.EOF) { + range = [token.range[0], token.range[1]]; + value = source.slice(token.range[0], token.range[1]); + entry = { + type: TokenName[token.type], + value: value, + range: range, + loc: loc + }; + if (token.regex) { + entry.regex = { + pattern: token.regex.pattern, + flags: token.regex.flags + }; + } + extra.tokens.push(entry); + } + + return token; + } + + function collectRegex() { + var pos, loc, regex, token; + + skipComment(); + + pos = index; + loc = { + start: { + line: lineNumber, + column: index - lineStart + } + }; + + regex = extra.scanRegExp(); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + + if (!extra.tokenize) { + /* istanbul ignore next */ + // Pop the previous token, which is likely '/' or '/=' + if (extra.tokens.length > 0) { + token = extra.tokens[extra.tokens.length - 1]; + if (token.range[0] === pos && token.type === 'Punctuator') { + if (token.value === '/' || token.value === '/=') { + extra.tokens.pop(); + } + } + } + + extra.tokens.push({ + type: 'RegularExpression', + value: regex.literal, + regex: regex.regex, + range: [pos, index], + loc: loc + }); + } + + return regex; + } + + function filterTokenLocation() { + var i, entry, token, tokens = []; + + for (i = 0; i < extra.tokens.length; ++i) { + entry = extra.tokens[i]; + token = { + type: entry.type, + value: entry.value + }; + if (entry.regex) { + token.regex = { + pattern: entry.regex.pattern, + flags: entry.regex.flags + }; + } + if (extra.range) { + token.range = entry.range; + } + if (extra.loc) { + token.loc = entry.loc; + } + tokens.push(token); + } + + extra.tokens = tokens; + } + + function patch() { + if (typeof extra.tokens !== 'undefined') { + extra.advance = advance; + extra.scanRegExp = scanRegExp; + + advance = collectToken; + scanRegExp = collectRegex; + } + } + + function unpatch() { + if (typeof extra.scanRegExp === 'function') { + advance = extra.advance; + scanRegExp = extra.scanRegExp; + } + } + + // This is used to modify the delegate. + + function extend(object, properties) { + var entry, result = {}; + + for (entry in object) { + /* istanbul ignore else */ + if (object.hasOwnProperty(entry)) { + result[entry] = object[entry]; + } + } + + for (entry in properties) { + /* istanbul ignore else */ + if (properties.hasOwnProperty(entry)) { + result[entry] = properties[entry]; + } + } + + return result; + } + + function tokenize(code, options) { + var toString, + token, + tokens; + + toString = String; + if (typeof code !== 'string' && !(code instanceof String)) { + code = toString(code); + } + + delegate = SyntaxTreeDelegate; + source = code; + index = 0; + lineNumber = (source.length > 0) ? 1 : 0; + lineStart = 0; + length = source.length; + lookahead = null; + state = { + allowKeyword: true, + allowIn: true, + labelSet: new StringMap(), + inFunctionBody: false, + inIteration: false, + inSwitch: false, + lastCommentStart: -1 + }; + + extra = {}; + + // Options matching. + options = options || {}; + + // Of course we collect tokens here. + options.tokens = true; + extra.tokens = []; + extra.tokenize = true; + // The following two fields are necessary to compute the Regex tokens. + extra.openParenToken = -1; + extra.openCurlyToken = -1; + + extra.range = (typeof options.range === 'boolean') && options.range; + extra.loc = (typeof options.loc === 'boolean') && options.loc; + + if (typeof options.comment === 'boolean' && options.comment) { + extra.comments = []; + } + if (typeof options.tolerant === 'boolean' && options.tolerant) { + extra.errors = []; + } + + patch(); + + try { + peek(); + if (lookahead.type === Token.EOF) { + return extra.tokens; + } + + token = lex(); + while (lookahead.type !== Token.EOF) { + try { + token = lex(); + } catch (lexError) { + token = lookahead; + if (extra.errors) { + extra.errors.push(lexError); + // We have to break on the first error + // to avoid infinite loops. + break; + } else { + throw lexError; + } + } + } + + filterTokenLocation(); + tokens = extra.tokens; + if (typeof extra.comments !== 'undefined') { + tokens.comments = extra.comments; + } + if (typeof extra.errors !== 'undefined') { + tokens.errors = extra.errors; + } + } catch (e) { + throw e; + } finally { + unpatch(); + extra = {}; + } + return tokens; + } + + function parse(code, options) { + var program, toString; + + toString = String; + if (typeof code !== 'string' && !(code instanceof String)) { + code = toString(code); + } + + delegate = SyntaxTreeDelegate; + source = code; + index = 0; + lineNumber = (source.length > 0) ? 1 : 0; + lineStart = 0; + length = source.length; + lookahead = null; + state = { + allowKeyword: false, + allowIn: true, + labelSet: new StringMap(), + parenthesizedCount: 0, + inFunctionBody: false, + inIteration: false, + inSwitch: false, + inJSXChild: false, + inJSXTag: false, + inType: false, + lastCommentStart: -1, + yieldAllowed: false, + awaitAllowed: false + }; + + extra = {}; + if (typeof options !== 'undefined') { + extra.range = (typeof options.range === 'boolean') && options.range; + extra.loc = (typeof options.loc === 'boolean') && options.loc; + extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment; + + if (extra.loc && options.source !== null && options.source !== undefined) { + delegate = extend(delegate, { + 'postProcess': function (node) { + node.loc.source = toString(options.source); + return node; + } + }); + } + + extra.sourceType = options.sourceType; + if (typeof options.tokens === 'boolean' && options.tokens) { + extra.tokens = []; + } + if (typeof options.comment === 'boolean' && options.comment) { + extra.comments = []; + } + if (typeof options.tolerant === 'boolean' && options.tolerant) { + extra.errors = []; + } + if (extra.attachComment) { + extra.range = true; + extra.comments = []; + extra.bottomRightStack = []; + extra.trailingComments = []; + extra.leadingComments = []; + } + } + + patch(); + try { + program = parseProgram(); + if (typeof extra.comments !== 'undefined') { + program.comments = extra.comments; + } + if (typeof extra.tokens !== 'undefined') { + filterTokenLocation(); + program.tokens = extra.tokens; + } + if (typeof extra.errors !== 'undefined') { + program.errors = extra.errors; + } + } catch (e) { + throw e; + } finally { + unpatch(); + extra = {}; + } + + return program; + } + + // Sync with *.json manifests. + exports.version = '13001.1001.0-dev-harmony-fb'; + + exports.tokenize = tokenize; + + exports.parse = parse; + + // Deep copy. + /* istanbul ignore next */ + exports.Syntax = (function () { + var name, types = {}; + + if (typeof Object.create === 'function') { + types = Object.create(null); + } + + for (name in Syntax) { + if (Syntax.hasOwnProperty(name)) { + types[name] = Syntax[name]; + } + } + + if (typeof Object.freeze === 'function') { + Object.freeze(types); + } + + return types; + }()); + +})); +/* vim: set sw=4 ts=4 et tw=80 : */ + +},{}],10:[function(_dereq_,module,exports){ +var Base62 = (function (my) { + my.chars = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] + + my.encode = function(i){ + if (i === 0) {return '0'} + var s = '' + while (i > 0) { + s = this.chars[i % 62] + s + i = Math.floor(i/62) + } + return s + }; + my.decode = function(a,b,c,d){ + for ( + b = c = ( + a === (/\W|_|^$/.test(a += "") || a) + ) - 1; + d = a.charCodeAt(c++); + ) + b = b * 62 + d - [, 48, 29, 87][d >> 5]; + return b + }; + + return my; +}({})); + +module.exports = Base62 +},{}],11:[function(_dereq_,module,exports){ +/* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ +exports.SourceMapGenerator = _dereq_('./source-map/source-map-generator').SourceMapGenerator; +exports.SourceMapConsumer = _dereq_('./source-map/source-map-consumer').SourceMapConsumer; +exports.SourceNode = _dereq_('./source-map/source-node').SourceNode; + +},{"./source-map/source-map-consumer":16,"./source-map/source-map-generator":17,"./source-map/source-node":18}],12:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var util = _dereq_('./util'); + + /** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ + function ArraySet() { + this._array = []; + this._set = {}; + } + + /** + * Static method for creating ArraySet instances from an existing array. + */ + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var isDuplicate = this.has(aStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + this._set[util.toSetString(aStr)] = idx; + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + return Object.prototype.hasOwnProperty.call(this._set, + util.toSetString(aStr)); + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (this.has(aStr)) { + return this._set[util.toSetString(aStr)]; + } + throw new Error('"' + aStr + '" is not in the set.'); + }; + + /** + * What is the element at the given index? + * + * @param Number aIdx + */ + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); + }; + + /** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + + exports.ArraySet = ArraySet; + +}); + +},{"./util":19,"amdefine":20}],13:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var base64 = _dereq_('./base64'); + + // A single base 64 digit can contain 6 bits of data. For the base 64 variable + // length quantities we use in the source map spec, the first bit is the sign, + // the next four bits are the actual value, and the 6th bit is the + // continuation bit. The continuation bit tells us whether there are more + // digits in this value following this digit. + // + // Continuation + // | Sign + // | | + // V V + // 101011 + + var VLQ_BASE_SHIFT = 5; + + // binary: 100000 + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + + // binary: 011111 + var VLQ_BASE_MASK = VLQ_BASE - 1; + + // binary: 100000 + var VLQ_CONTINUATION_BIT = VLQ_BASE; + + /** + * Converts from a two-complement value to a value where the sign bit is + * is placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ + function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; + } + + /** + * Converts to a two-complement value from a value where the sign bit is + * is placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; + } + + /** + * Returns the base 64 VLQ encoded value. + */ + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; + }; + + /** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string. + */ + exports.decode = function base64VLQ_decode(aStr) { + var i = 0; + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (i >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + digit = base64.decode(aStr.charAt(i++)); + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + return { + value: fromVLQSigned(result), + rest: aStr.slice(i) + }; + }; + +}); + +},{"./base64":14,"amdefine":20}],14:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var charToIntMap = {}; + var intToCharMap = {}; + + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + .split('') + .forEach(function (ch, index) { + charToIntMap[ch] = index; + intToCharMap[index] = ch; + }); + + /** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ + exports.encode = function base64_encode(aNumber) { + if (aNumber in intToCharMap) { + return intToCharMap[aNumber]; + } + throw new TypeError("Must be between 0 and 63: " + aNumber); + }; + + /** + * Decode a single base 64 digit to an integer. + */ + exports.decode = function base64_decode(aChar) { + if (aChar in charToIntMap) { + return charToIntMap[aChar]; + } + throw new TypeError("Not a valid base 64 digit: " + aChar); + }; + +}); + +},{"amdefine":20}],15:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + /** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + */ + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the next + // closest element that is less than that element. + // + // 3. We did not find the exact element, and there is no next-closest + // element which is less than the one we are searching for, so we + // return null. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return aHaystack[mid]; + } + else if (cmp > 0) { + // aHaystack[mid] is greater than our needle. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare); + } + // We did not find an exact match, return the next closest one + // (termination case 2). + return aHaystack[mid]; + } + else { + // aHaystack[mid] is less than our needle. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare); + } + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (2) or (3) and return the appropriate thing. + return aLow < 0 + ? null + : aHaystack[aLow]; + } + } + + /** + * This is an implementation of binary search which will always try and return + * the next lowest value checked if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + */ + exports.search = function search(aNeedle, aHaystack, aCompare) { + return aHaystack.length > 0 + ? recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare) + : null; + }; + +}); + +},{"amdefine":20}],16:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var util = _dereq_('./util'); + var binarySearch = _dereq_('./binary-search'); + var ArraySet = _dereq_('./array-set').ArraySet; + var base64VLQ = _dereq_('./base64-vlq'); + + /** + * A SourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ + function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names, true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; + } + + /** + * Create a SourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns SourceMapConsumer + */ + SourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(SourceMapConsumer.prototype); + + smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + smc.__generatedMappings = aSourceMap._mappings.slice() + .sort(util.compareByGeneratedPositions); + smc.__originalMappings = aSourceMap._mappings.slice() + .sort(util.compareByOriginalPositions); + + return smc; + }; + + /** + * The version of the source mapping spec that we are consuming. + */ + SourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(SourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot ? util.join(this.sourceRoot, s) : s; + }, this); + } + }); + + // `__generatedMappings` and `__originalMappings` are arrays that hold the + // parsed mapping coordinates from the source map's "mappings" attribute. They + // are lazily instantiated, accessed via the `_generatedMappings` and + // `_originalMappings` getters respectively, and we only parse the mappings + // and create these arrays once queried for a source location. We jump through + // these hoops because there can be many thousands of mappings, and parsing + // them is expensive, so we only want to do it if we must. + // + // Each object in the arrays is of the form: + // + // { + // generatedLine: The line number in the generated code, + // generatedColumn: The column number in the generated code, + // source: The path to the original source file that generated this + // chunk of code, + // originalLine: The line number in the original source that + // corresponds to this chunk of generated code, + // originalColumn: The column number in the original source that + // corresponds to this chunk of generated code, + // name: The name of the original symbol which generated this chunk of + // code. + // } + // + // All properties except for `generatedLine` and `generatedColumn` can be + // `null`. + // + // `_generatedMappings` is ordered by the generated positions. + // + // `_originalMappings` is ordered by the original positions. + + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this.__generatedMappings = []; + this.__originalMappings = []; + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } + }); + + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this.__generatedMappings = []; + this.__originalMappings = []; + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } + }); + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var mappingSeparator = /^[,;]/; + var str = aStr; + var mapping; + var temp; + + while (str.length > 0) { + if (str.charAt(0) === ';') { + generatedLine++; + str = str.slice(1); + previousGeneratedColumn = 0; + } + else if (str.charAt(0) === ',') { + str = str.slice(1); + } + else { + mapping = {}; + mapping.generatedLine = generatedLine; + + // Generated column. + temp = base64VLQ.decode(str); + mapping.generatedColumn = previousGeneratedColumn + temp.value; + previousGeneratedColumn = mapping.generatedColumn; + str = temp.rest; + + if (str.length > 0 && !mappingSeparator.test(str.charAt(0))) { + // Original source. + temp = base64VLQ.decode(str); + mapping.source = this._sources.at(previousSource + temp.value); + previousSource += temp.value; + str = temp.rest; + if (str.length === 0 || mappingSeparator.test(str.charAt(0))) { + throw new Error('Found a source, but no line and column'); + } + + // Original line. + temp = base64VLQ.decode(str); + mapping.originalLine = previousOriginalLine + temp.value; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + str = temp.rest; + if (str.length === 0 || mappingSeparator.test(str.charAt(0))) { + throw new Error('Found a source and line, but no column'); + } + + // Original column. + temp = base64VLQ.decode(str); + mapping.originalColumn = previousOriginalColumn + temp.value; + previousOriginalColumn = mapping.originalColumn; + str = temp.rest; + + if (str.length > 0 && !mappingSeparator.test(str.charAt(0))) { + // Original name. + temp = base64VLQ.decode(str); + mapping.name = this._names.at(previousName + temp.value); + previousName += temp.value; + str = temp.rest; + } + } + + this.__generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + this.__originalMappings.push(mapping); + } + } + } + + this.__originalMappings.sort(util.compareByOriginalPositions); + }; + + /** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ + SourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator); + }; + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + SourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var mapping = this._findMapping(needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositions); + + if (mapping) { + var source = util.getArg(mapping, 'source', null); + if (source && this.sourceRoot) { + source = util.join(this.sourceRoot, source); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: util.getArg(mapping, 'name', null) + }; + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * availible. + */ + SourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + throw new Error('"' + aSource + '" is not in the SourceMap.'); + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + SourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + if (this.sourceRoot) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + + var mapping = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions); + + if (mapping) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null) + }; + } + + return { + line: null, + column: null + }; + }; + + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + + /** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ + SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source; + if (source && sourceRoot) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name + }; + }).forEach(aCallback, context); + }; + + exports.SourceMapConsumer = SourceMapConsumer; + +}); + +},{"./array-set":12,"./base64-vlq":13,"./binary-search":15,"./util":19,"amdefine":20}],17:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var base64VLQ = _dereq_('./base64-vlq'); + var util = _dereq_('./util'); + var ArraySet = _dereq_('./array-set').ArraySet; + + /** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. To create a new one, you must pass an object + * with the following properties: + * + * - file: The filename of the generated source. + * - sourceRoot: An optional root for all URLs in this source map. + */ + function SourceMapGenerator(aArgs) { + this._file = util.getArg(aArgs, 'file'); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = []; + this._sourcesContents = null; + } + + SourceMapGenerator.prototype._version = 3; + + /** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ + SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source) { + newMapping.source = mapping.source; + if (sourceRoot) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + + /** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ + SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + this._validateMapping(generated, original, source, name); + + if (source && !this._sources.has(source)) { + this._sources.add(source); + } + + if (name && !this._names.has(name)) { + this._names.add(name); + } + + this._mappings.push({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + + /** + * Set the source content for a source file. + */ + SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent !== null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = {}; + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + + /** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + */ + SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile) { + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (!aSourceFile) { + aSourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "aSourceFile" relative if an absolute Url is passed. + if (sourceRoot) { + aSourceFile = util.relative(sourceRoot, aSourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "aSourceFile" + this._mappings.forEach(function (mapping) { + if (mapping.source === aSourceFile && mapping.originalLine) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source !== null) { + // Copy mapping + if (sourceRoot) { + mapping.source = util.relative(sourceRoot, original.source); + } else { + mapping.source = original.source; + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name !== null && mapping.name !== null) { + // Only use the identifier name if it's an identifier + // in both SourceMaps + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content) { + if (sourceRoot) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + + /** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ + SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + orginal: aOriginal, + name: aName + })); + } + }; + + /** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ + SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var mapping; + + // The mappings must be guaranteed to be in sorted order before we start + // serializing them or else the generated line numbers (which are defined + // via the ';' separators) will be all messed up. Note: it might be more + // performant to maintain the sorting as we insert them, rather than as we + // serialize them, but the big O is the same either way. + this._mappings.sort(util.compareByGeneratedPositions); + + for (var i = 0, len = this._mappings.length; i < len; i++) { + mapping = this._mappings[i]; + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + result += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositions(mapping, this._mappings[i - 1])) { + continue; + } + result += ','; + } + } + + result += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source) { + result += base64VLQ.encode(this._sources.indexOf(mapping.source) + - previousSource); + previousSource = this._sources.indexOf(mapping.source); + + // lines are stored 0-based in SourceMap spec version 3 + result += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + result += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name) { + result += base64VLQ.encode(this._names.indexOf(mapping.name) + - previousName); + previousName = this._names.indexOf(mapping.name); + } + } + } + + return result; + }; + + SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, + key) + ? this._sourcesContents[key] + : null; + }, this); + }; + + /** + * Externalize the source map. + */ + SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + file: this._file, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._sourceRoot) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + + /** + * Render the source map being generated to a string. + */ + SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this); + }; + + exports.SourceMapGenerator = SourceMapGenerator; + +}); + +},{"./array-set":12,"./base64-vlq":13,"./util":19,"amdefine":20}],18:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + var SourceMapGenerator = _dereq_('./source-map-generator').SourceMapGenerator; + var util = _dereq_('./util'); + + /** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine === undefined ? null : aLine; + this.column = aColumn === undefined ? null : aColumn; + this.source = aSource === undefined ? null : aSource; + this.name = aName === undefined ? null : aName; + if (aChunks != null) this.add(aChunks); + } + + /** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + */ + SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // The generated code + // Processed fragments are removed from this array. + var remainingLines = aGeneratedCode.split('\n'); + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping === null) { + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(remainingLines.shift() + "\n"); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[0]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[0] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + } else { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + var code = ""; + // Associate full lines with "lastMapping" + do { + code += remainingLines.shift() + "\n"; + lastGeneratedLine++; + lastGeneratedColumn = 0; + } while (lastGeneratedLine < mapping.generatedLine); + // When we reached the correct line, we add code until we + // reach the correct column too. + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[0]; + code += nextLine.substr(0, mapping.generatedColumn); + remainingLines[0] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + // Create the SourceNode. + addMappingWithCode(lastMapping, code); + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[0]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[0] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + } + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + // Associate the remaining code in the current line with "lastMapping" + // and add the remaining lines without any mapping + addMappingWithCode(lastMapping, remainingLines.join("\n")); + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content) { + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + mapping.source, + code, + mapping.name)); + } + } + }; + + /** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk instanceof SourceNode || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk instanceof SourceNode || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk instanceof SourceNode) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } + }; + + /** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + + /** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild instanceof SourceNode) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; + }; + + /** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ + SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + + /** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i] instanceof SourceNode) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + + /** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; + }; + + /** + * Returns the string representation of this source node along with a source + * map. + */ + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + chunk.split('').forEach(function (ch) { + if (ch === '\n') { + generated.line++; + generated.column = 0; + } else { + generated.column++; + } + }); + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; + }; + + exports.SourceNode = SourceNode; + +}); + +},{"./source-map-generator":17,"./util":19,"amdefine":20}],19:[function(_dereq_,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = _dereq_('amdefine')(module, _dereq_); +} +define(function (_dereq_, exports, module) { + + /** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + + var urlRegexp = /([\w+\-.]+):\/\/((\w+:\w+)@)?([\w.]+)?(:(\d+))?(\S+)?/; + var dataUrlRegexp = /^data:.+\,.+/; + + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[3], + host: match[4], + port: match[6], + path: match[7] + }; + } + exports.urlParse = urlParse; + + function urlGenerate(aParsedUrl) { + var url = aParsedUrl.scheme + "://"; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + "@" + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + + function join(aRoot, aPath) { + var url; + + if (aPath.match(urlRegexp) || aPath.match(dataUrlRegexp)) { + return aPath; + } + + if (aPath.charAt(0) === '/' && (url = urlParse(aRoot))) { + url.path = aPath; + return urlGenerate(url); + } + + return aRoot.replace(/\/$/, '') + '/' + aPath; + } + exports.join = join; + + /** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ + function toSetString(aStr) { + return '$' + aStr; + } + exports.toSetString = toSetString; + + function fromSetString(aStr) { + return aStr.substr(1); + } + exports.fromSetString = fromSetString; + + function relative(aRoot, aPath) { + aRoot = aRoot.replace(/\/$/, ''); + + var url = urlParse(aRoot); + if (aPath.charAt(0) == "/" && url && url.path == "/") { + return aPath.slice(1); + } + + return aPath.indexOf(aRoot + '/') === 0 + ? aPath.substr(aRoot.length + 1) + : aPath; + } + exports.relative = relative; + + function strcmp(aStr1, aStr2) { + var s1 = aStr1 || ""; + var s2 = aStr2 || ""; + return (s1 > s2) - (s1 < s2); + } + + /** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp; + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp || onlyCompareOriginal) { + return cmp; + } + + cmp = strcmp(mappingA.name, mappingB.name); + if (cmp) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp) { + return cmp; + } + + return mappingA.generatedColumn - mappingB.generatedColumn; + }; + exports.compareByOriginalPositions = compareByOriginalPositions; + + /** + * Comparator between two mappings where the generated positions are + * compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ + function compareByGeneratedPositions(mappingA, mappingB, onlyCompareGenerated) { + var cmp; + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp || onlyCompareGenerated) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + }; + exports.compareByGeneratedPositions = compareByGeneratedPositions; + +}); + +},{"amdefine":20}],20:[function(_dereq_,module,exports){ +(function (process,__filename){ +/** vim: et:ts=4:sw=4:sts=4 + * @license amdefine 0.1.0 Copyright (c) 2011, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/amdefine for details + */ + +/*jslint node: true */ +/*global module, process */ +'use strict'; + +/** + * Creates a define for node. + * @param {Object} module the "module" object that is defined by Node for the + * current module. + * @param {Function} [requireFn]. Node's require function for the current module. + * It only needs to be passed in Node versions before 0.5, when module.require + * did not exist. + * @returns {Function} a define function that is usable for the current node + * module. + */ +function amdefine(module, requireFn) { + 'use strict'; + var defineCache = {}, + loaderCache = {}, + alreadyCalled = false, + path = _dereq_('path'), + makeRequire, stringRequire; + + /** + * Trims the . and .. from an array of path segments. + * It will keep a leading path segment if a .. will become + * the first path segment, to help with module name lookups, + * which act like paths, but can be remapped. But the end result, + * all paths that use this function should look normalized. + * NOTE: this method MODIFIES the input array. + * @param {Array} ary the array of path segments. + */ + function trimDots(ary) { + var i, part; + for (i = 0; ary[i]; i+= 1) { + part = ary[i]; + if (part === '.') { + ary.splice(i, 1); + i -= 1; + } else if (part === '..') { + if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { + //End of the line. Keep at least one non-dot + //path segment at the front so it can be mapped + //correctly to disk. Otherwise, there is likely + //no path mapping for a path starting with '..'. + //This can still fail, but catches the most reasonable + //uses of .. + break; + } else if (i > 0) { + ary.splice(i - 1, 2); + i -= 2; + } + } + } + } + + function normalize(name, baseName) { + var baseParts; + + //Adjust any relative paths. + if (name && name.charAt(0) === '.') { + //If have a base name, try to normalize against it, + //otherwise, assume it is a top-level require that will + //be relative to baseUrl in the end. + if (baseName) { + baseParts = baseName.split('/'); + baseParts = baseParts.slice(0, baseParts.length - 1); + baseParts = baseParts.concat(name.split('/')); + trimDots(baseParts); + name = baseParts.join('/'); + } + } + + return name; + } + + /** + * Create the normalize() function passed to a loader plugin's + * normalize method. + */ + function makeNormalize(relName) { + return function (name) { + return normalize(name, relName); + }; + } + + function makeLoad(id) { + function load(value) { + loaderCache[id] = value; + } + + load.fromText = function (id, text) { + //This one is difficult because the text can/probably uses + //define, and any relative paths and requires should be relative + //to that id was it would be found on disk. But this would require + //bootstrapping a module/require fairly deeply from node core. + //Not sure how best to go about that yet. + throw new Error('amdefine does not implement load.fromText'); + }; + + return load; + } + + makeRequire = function (systemRequire, exports, module, relId) { + function amdRequire(deps, callback) { + if (typeof deps === 'string') { + //Synchronous, single module require('') + return stringRequire(systemRequire, exports, module, deps, relId); + } else { + //Array of dependencies with a callback. + + //Convert the dependencies to modules. + deps = deps.map(function (depName) { + return stringRequire(systemRequire, exports, module, depName, relId); + }); + + //Wait for next tick to call back the require call. + process.nextTick(function () { + callback.apply(null, deps); + }); + } + } + + amdRequire.toUrl = function (filePath) { + if (filePath.indexOf('.') === 0) { + return normalize(filePath, path.dirname(module.filename)); + } else { + return filePath; + } + }; + + return amdRequire; + }; + + //Favor explicit value, passed in if the module wants to support Node 0.4. + requireFn = requireFn || function req() { + return module.require.apply(module, arguments); + }; + + function runFactory(id, deps, factory) { + var r, e, m, result; + + if (id) { + e = loaderCache[id] = {}; + m = { + id: id, + uri: __filename, + exports: e + }; + r = makeRequire(requireFn, e, m, id); + } else { + //Only support one define call per file + if (alreadyCalled) { + throw new Error('amdefine with no module ID cannot be called more than once per file.'); + } + alreadyCalled = true; + + //Use the real variables from node + //Use module.exports for exports, since + //the exports in here is amdefine exports. + e = module.exports; + m = module; + r = makeRequire(requireFn, e, m, module.id); + } + + //If there are dependencies, they are strings, so need + //to convert them to dependency values. + if (deps) { + deps = deps.map(function (depName) { + return r(depName); + }); + } + + //Call the factory with the right dependencies. + if (typeof factory === 'function') { + result = factory.apply(m.exports, deps); + } else { + result = factory; + } + + if (result !== undefined) { + m.exports = result; + if (id) { + loaderCache[id] = m.exports; + } + } + } + + stringRequire = function (systemRequire, exports, module, id, relId) { + //Split the ID by a ! so that + var index = id.indexOf('!'), + originalId = id, + prefix, plugin; + + if (index === -1) { + id = normalize(id, relId); + + //Straight module lookup. If it is one of the special dependencies, + //deal with it, otherwise, delegate to node. + if (id === 'require') { + return makeRequire(systemRequire, exports, module, relId); + } else if (id === 'exports') { + return exports; + } else if (id === 'module') { + return module; + } else if (loaderCache.hasOwnProperty(id)) { + return loaderCache[id]; + } else if (defineCache[id]) { + runFactory.apply(null, defineCache[id]); + return loaderCache[id]; + } else { + if(systemRequire) { + return systemRequire(originalId); + } else { + throw new Error('No module with ID: ' + id); + } + } + } else { + //There is a plugin in play. + prefix = id.substring(0, index); + id = id.substring(index + 1, id.length); + + plugin = stringRequire(systemRequire, exports, module, prefix, relId); + + if (plugin.normalize) { + id = plugin.normalize(id, makeNormalize(relId)); + } else { + //Normalize the ID normally. + id = normalize(id, relId); + } + + if (loaderCache[id]) { + return loaderCache[id]; + } else { + plugin.load(id, makeRequire(systemRequire, exports, module, relId), makeLoad(id), {}); + + return loaderCache[id]; + } + } + }; + + //Create a define function specific to the module asking for amdefine. + function define(id, deps, factory) { + if (Array.isArray(id)) { + factory = deps; + deps = id; + id = undefined; + } else if (typeof id !== 'string') { + factory = id; + id = deps = undefined; + } + + if (deps && !Array.isArray(deps)) { + factory = deps; + deps = undefined; + } + + if (!deps) { + deps = ['require', 'exports', 'module']; + } + + //Set up properties for this module. If an ID, then use + //internal cache. If no ID, then use the external variables + //for this node module. + if (id) { + //Put the module in deep freeze until there is a + //require call for it. + defineCache[id] = [id, deps, factory]; + } else { + runFactory(id, deps, factory); + } + } + + //define.require, which has access to all the values in the + //cache. Useful for AMD modules that all have IDs in the file, + //but need to finally export a value to node based on one of those + //IDs. + define.require = function (id) { + if (loaderCache[id]) { + return loaderCache[id]; + } + + if (defineCache[id]) { + runFactory.apply(null, defineCache[id]); + return loaderCache[id]; + } + }; + + define.amd = {}; + + return define; +} + +module.exports = amdefine; + +}).call(this,_dereq_('_process'),"/node_modules/jstransform/node_modules/source-map/node_modules/amdefine/amdefine.js") +},{"_process":8,"path":7}],21:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * 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. + */ + +var docblockRe = /^\s*(\/\*\*(.|\r?\n)*?\*\/)/; +var ltrimRe = /^\s*/; +/** + * @param {String} contents + * @return {String} + */ +function extract(contents) { + var match = contents.match(docblockRe); + if (match) { + return match[0].replace(ltrimRe, '') || ''; + } + return ''; +} + + +var commentStartRe = /^\/\*\*?/; +var commentEndRe = /\*+\/$/; +var wsRe = /[\t ]+/g; +var stringStartRe = /(\r?\n|^) *\*/g; +var multilineRe = /(?:^|\r?\n) *(@[^\r\n]*?) *\r?\n *([^@\r\n\s][^@\r\n]+?) *\r?\n/g; +var propertyRe = /(?:^|\r?\n) *@(\S+) *([^\r\n]*)/g; + +/** + * @param {String} contents + * @return {Array} + */ +function parse(docblock) { + docblock = docblock + .replace(commentStartRe, '') + .replace(commentEndRe, '') + .replace(wsRe, ' ') + .replace(stringStartRe, '$1'); + + // Normalize multi-line directives + var prev = ''; + while (prev != docblock) { + prev = docblock; + docblock = docblock.replace(multilineRe, "\n$1 $2\n"); + } + docblock = docblock.trim(); + + var result = []; + var match; + while (match = propertyRe.exec(docblock)) { + result.push([match[1], match[2]]); + } + + return result; +} + +/** + * Same as parse but returns an object of prop: value instead of array of paris + * If a property appers more than once the last one will be returned + * + * @param {String} contents + * @return {Object} + */ +function parseAsObject(docblock) { + var pairs = parse(docblock); + var result = {}; + for (var i = 0; i < pairs.length; i++) { + result[pairs[i][0]] = pairs[i][1]; + } + return result; +} + + +exports.extract = extract; +exports.parse = parse; +exports.parseAsObject = parseAsObject; + +},{}],22:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * 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. + */ + + +/*jslint node: true*/ +"use strict"; + +var esprima = _dereq_('esprima-fb'); +var utils = _dereq_('./utils'); + +var getBoundaryNode = utils.getBoundaryNode; +var declareIdentInScope = utils.declareIdentInLocalScope; +var initScopeMetadata = utils.initScopeMetadata; +var Syntax = esprima.Syntax; + +/** + * @param {object} node + * @param {object} parentNode + * @return {boolean} + */ +function _nodeIsClosureScopeBoundary(node, parentNode) { + if (node.type === Syntax.Program) { + return true; + } + + var parentIsFunction = + parentNode.type === Syntax.FunctionDeclaration + || parentNode.type === Syntax.FunctionExpression + || parentNode.type === Syntax.ArrowFunctionExpression; + + var parentIsCurlylessArrowFunc = + parentNode.type === Syntax.ArrowFunctionExpression + && node === parentNode.body; + + return parentIsFunction + && (node.type === Syntax.BlockStatement || parentIsCurlylessArrowFunc); +} + +function _nodeIsBlockScopeBoundary(node, parentNode) { + if (node.type === Syntax.Program) { + return false; + } + + return node.type === Syntax.BlockStatement + && parentNode.type === Syntax.CatchClause; +} + +/** + * @param {object} node + * @param {array} path + * @param {object} state + */ +function traverse(node, path, state) { + /*jshint -W004*/ + // Create a scope stack entry if this is the first node we've encountered in + // its local scope + var startIndex = null; + var parentNode = path[0]; + if (!Array.isArray(node) && state.localScope.parentNode !== parentNode) { + if (_nodeIsClosureScopeBoundary(node, parentNode)) { + var scopeIsStrict = state.scopeIsStrict; + if (!scopeIsStrict + && (node.type === Syntax.BlockStatement + || node.type === Syntax.Program)) { + scopeIsStrict = + node.body.length > 0 + && node.body[0].type === Syntax.ExpressionStatement + && node.body[0].expression.type === Syntax.Literal + && node.body[0].expression.value === 'use strict'; + } + + if (node.type === Syntax.Program) { + startIndex = state.g.buffer.length; + state = utils.updateState(state, { + scopeIsStrict: scopeIsStrict + }); + } else { + startIndex = state.g.buffer.length + 1; + state = utils.updateState(state, { + localScope: { + parentNode: parentNode, + parentScope: state.localScope, + identifiers: {}, + tempVarIndex: 0, + tempVars: [] + }, + scopeIsStrict: scopeIsStrict + }); + + // All functions have an implicit 'arguments' object in scope + declareIdentInScope('arguments', initScopeMetadata(node), state); + + // Include function arg identifiers in the scope boundaries of the + // function + if (parentNode.params.length > 0) { + var param; + var metadata = initScopeMetadata(parentNode, path.slice(1), path[0]); + for (var i = 0; i < parentNode.params.length; i++) { + param = parentNode.params[i]; + if (param.type === Syntax.Identifier) { + declareIdentInScope(param.name, metadata, state); + } + } + } + + // Include rest arg identifiers in the scope boundaries of their + // functions + if (parentNode.rest) { + var metadata = initScopeMetadata( + parentNode, + path.slice(1), + path[0] + ); + declareIdentInScope(parentNode.rest.name, metadata, state); + } + + // Named FunctionExpressions scope their name within the body block of + // themselves only + if (parentNode.type === Syntax.FunctionExpression && parentNode.id) { + var metaData = + initScopeMetadata(parentNode, path.parentNodeslice, parentNode); + declareIdentInScope(parentNode.id.name, metaData, state); + } + } + + // Traverse and find all local identifiers in this closure first to + // account for function/variable declaration hoisting + collectClosureIdentsAndTraverse(node, path, state); + } + + if (_nodeIsBlockScopeBoundary(node, parentNode)) { + startIndex = state.g.buffer.length; + state = utils.updateState(state, { + localScope: { + parentNode: parentNode, + parentScope: state.localScope, + identifiers: {}, + tempVarIndex: 0, + tempVars: [] + } + }); + + if (parentNode.type === Syntax.CatchClause) { + var metadata = initScopeMetadata( + parentNode, + path.slice(1), + parentNode + ); + declareIdentInScope(parentNode.param.name, metadata, state); + } + collectBlockIdentsAndTraverse(node, path, state); + } + } + + // Only catchup() before and after traversing a child node + function traverser(node, path, state) { + node.range && utils.catchup(node.range[0], state); + traverse(node, path, state); + node.range && utils.catchup(node.range[1], state); + } + + utils.analyzeAndTraverse(walker, traverser, node, path, state); + + // Inject temp variables into the scope. + if (startIndex !== null) { + utils.injectTempVarDeclarations(state, startIndex); + } +} + +function collectClosureIdentsAndTraverse(node, path, state) { + utils.analyzeAndTraverse( + visitLocalClosureIdentifiers, + collectClosureIdentsAndTraverse, + node, + path, + state + ); +} + +function collectBlockIdentsAndTraverse(node, path, state) { + utils.analyzeAndTraverse( + visitLocalBlockIdentifiers, + collectBlockIdentsAndTraverse, + node, + path, + state + ); +} + +function visitLocalClosureIdentifiers(node, path, state) { + var metaData; + switch (node.type) { + case Syntax.ArrowFunctionExpression: + case Syntax.FunctionExpression: + // Function expressions don't get their names (if there is one) added to + // the closure scope they're defined in + return false; + case Syntax.ClassDeclaration: + case Syntax.ClassExpression: + case Syntax.FunctionDeclaration: + if (node.id) { + metaData = initScopeMetadata(getBoundaryNode(path), path.slice(), node); + declareIdentInScope(node.id.name, metaData, state); + } + return false; + case Syntax.VariableDeclarator: + // Variables have function-local scope + if (path[0].kind === 'var') { + metaData = initScopeMetadata(getBoundaryNode(path), path.slice(), node); + declareIdentInScope(node.id.name, metaData, state); + } + break; + } +} + +function visitLocalBlockIdentifiers(node, path, state) { + // TODO: Support 'let' here...maybe...one day...or something... + if (node.type === Syntax.CatchClause) { + return false; + } +} + +function walker(node, path, state) { + var visitors = state.g.visitors; + for (var i = 0; i < visitors.length; i++) { + if (visitors[i].test(node, path, state)) { + return visitors[i](traverse, node, path, state); + } + } +} + +var _astCache = {}; + +function getAstForSource(source, options) { + if (_astCache[source] && !options.disableAstCache) { + return _astCache[source]; + } + var ast = esprima.parse(source, { + comment: true, + loc: true, + range: true, + sourceType: options.sourceType + }); + if (!options.disableAstCache) { + _astCache[source] = ast; + } + return ast; +} + +/** + * Applies all available transformations to the source + * @param {array} visitors + * @param {string} source + * @param {?object} options + * @return {object} + */ +function transform(visitors, source, options) { + options = options || {}; + var ast; + try { + ast = getAstForSource(source, options); + } catch (e) { + e.message = 'Parse Error: ' + e.message; + throw e; + } + var state = utils.createState(source, ast, options); + state.g.visitors = visitors; + + if (options.sourceMap) { + var SourceMapGenerator = _dereq_('source-map').SourceMapGenerator; + state.g.sourceMap = new SourceMapGenerator({file: options.filename || 'transformed.js'}); + } + + traverse(ast, [], state); + utils.catchup(source.length, state); + + var ret = {code: state.g.buffer, extra: state.g.extra}; + if (options.sourceMap) { + ret.sourceMap = state.g.sourceMap; + ret.sourceMapFilename = options.filename || 'source.js'; + } + return ret; +} + +exports.transform = transform; +exports.Syntax = Syntax; + +},{"./utils":23,"esprima-fb":9,"source-map":11}],23:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * 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. + */ + + +/*jslint node: true*/ +var Syntax = _dereq_('esprima-fb').Syntax; +var leadingIndentRegexp = /(^|\n)( {2}|\t)/g; +var nonWhiteRegexp = /(\S)/g; + +/** + * A `state` object represents the state of the parser. It has "local" and + * "global" parts. Global contains parser position, source, etc. Local contains + * scope based properties like current class name. State should contain all the + * info required for transformation. It's the only mandatory object that is + * being passed to every function in transform chain. + * + * @param {string} source + * @param {object} transformOptions + * @return {object} + */ +function createState(source, rootNode, transformOptions) { + return { + /** + * A tree representing the current local scope (and its lexical scope chain) + * Useful for tracking identifiers from parent scopes, etc. + * @type {Object} + */ + localScope: { + parentNode: rootNode, + parentScope: null, + identifiers: {}, + tempVarIndex: 0, + tempVars: [] + }, + /** + * The name (and, if applicable, expression) of the super class + * @type {Object} + */ + superClass: null, + /** + * The namespace to use when munging identifiers + * @type {String} + */ + mungeNamespace: '', + /** + * Ref to the node for the current MethodDefinition + * @type {Object} + */ + methodNode: null, + /** + * Ref to the node for the FunctionExpression of the enclosing + * MethodDefinition + * @type {Object} + */ + methodFuncNode: null, + /** + * Name of the enclosing class + * @type {String} + */ + className: null, + /** + * Whether we're currently within a `strict` scope + * @type {Bool} + */ + scopeIsStrict: null, + /** + * Indentation offset + * @type {Number} + */ + indentBy: 0, + /** + * Global state (not affected by updateState) + * @type {Object} + */ + g: { + /** + * A set of general options that transformations can consider while doing + * a transformation: + * + * - minify + * Specifies that transformation steps should do their best to minify + * the output source when possible. This is useful for places where + * minification optimizations are possible with higher-level context + * info than what jsxmin can provide. + * + * For example, the ES6 class transform will minify munged private + * variables if this flag is set. + */ + opts: transformOptions, + /** + * Current position in the source code + * @type {Number} + */ + position: 0, + /** + * Auxiliary data to be returned by transforms + * @type {Object} + */ + extra: {}, + /** + * Buffer containing the result + * @type {String} + */ + buffer: '', + /** + * Source that is being transformed + * @type {String} + */ + source: source, + + /** + * Cached parsed docblock (see getDocblock) + * @type {object} + */ + docblock: null, + + /** + * Whether the thing was used + * @type {Boolean} + */ + tagNamespaceUsed: false, + + /** + * If using bolt xjs transformation + * @type {Boolean} + */ + isBolt: undefined, + + /** + * Whether to record source map (expensive) or not + * @type {SourceMapGenerator|null} + */ + sourceMap: null, + + /** + * Filename of the file being processed. Will be returned as a source + * attribute in the source map + */ + sourceMapFilename: 'source.js', + + /** + * Only when source map is used: last line in the source for which + * source map was generated + * @type {Number} + */ + sourceLine: 1, + + /** + * Only when source map is used: last line in the buffer for which + * source map was generated + * @type {Number} + */ + bufferLine: 1, + + /** + * The top-level Program AST for the original file. + */ + originalProgramAST: null, + + sourceColumn: 0, + bufferColumn: 0 + } + }; +} + +/** + * Updates a copy of a given state with "update" and returns an updated state. + * + * @param {object} state + * @param {object} update + * @return {object} + */ +function updateState(state, update) { + var ret = Object.create(state); + Object.keys(update).forEach(function(updatedKey) { + ret[updatedKey] = update[updatedKey]; + }); + return ret; +} + +/** + * Given a state fill the resulting buffer from the original source up to + * the end + * + * @param {number} end + * @param {object} state + * @param {?function} contentTransformer Optional callback to transform newly + * added content. + */ +function catchup(end, state, contentTransformer) { + if (end < state.g.position) { + // cannot move backwards + return; + } + var source = state.g.source.substring(state.g.position, end); + var transformed = updateIndent(source, state); + if (state.g.sourceMap && transformed) { + // record where we are + state.g.sourceMap.addMapping({ + generated: { line: state.g.bufferLine, column: state.g.bufferColumn }, + original: { line: state.g.sourceLine, column: state.g.sourceColumn }, + source: state.g.sourceMapFilename + }); + + // record line breaks in transformed source + var sourceLines = source.split('\n'); + var transformedLines = transformed.split('\n'); + // Add line break mappings between last known mapping and the end of the + // added piece. So for the code piece + // (foo, bar); + // > var x = 2; + // > var b = 3; + // var c = + // only add lines marked with ">": 2, 3. + for (var i = 1; i < sourceLines.length - 1; i++) { + state.g.sourceMap.addMapping({ + generated: { line: state.g.bufferLine, column: 0 }, + original: { line: state.g.sourceLine, column: 0 }, + source: state.g.sourceMapFilename + }); + state.g.sourceLine++; + state.g.bufferLine++; + } + // offset for the last piece + if (sourceLines.length > 1) { + state.g.sourceLine++; + state.g.bufferLine++; + state.g.sourceColumn = 0; + state.g.bufferColumn = 0; + } + state.g.sourceColumn += sourceLines[sourceLines.length - 1].length; + state.g.bufferColumn += + transformedLines[transformedLines.length - 1].length; + } + state.g.buffer += + contentTransformer ? contentTransformer(transformed) : transformed; + state.g.position = end; +} + +/** + * Returns original source for an AST node. + * @param {object} node + * @param {object} state + * @return {string} + */ +function getNodeSourceText(node, state) { + return state.g.source.substring(node.range[0], node.range[1]); +} + +function _replaceNonWhite(value) { + return value.replace(nonWhiteRegexp, ' '); +} + +/** + * Removes all non-whitespace characters + */ +function _stripNonWhite(value) { + return value.replace(nonWhiteRegexp, ''); +} + +/** + * Finds the position of the next instance of the specified syntactic char in + * the pending source. + * + * NOTE: This will skip instances of the specified char if they sit inside a + * comment body. + * + * NOTE: This function also assumes that the buffer's current position is not + * already within a comment or a string. This is rarely the case since all + * of the buffer-advancement utility methods tend to be used on syntactic + * nodes' range values -- but it's a small gotcha that's worth mentioning. + */ +function getNextSyntacticCharOffset(char, state) { + var pendingSource = state.g.source.substring(state.g.position); + var pendingSourceLines = pendingSource.split('\n'); + + var charOffset = 0; + var line; + var withinBlockComment = false; + var withinString = false; + lineLoop: while ((line = pendingSourceLines.shift()) !== undefined) { + var lineEndPos = charOffset + line.length; + charLoop: for (; charOffset < lineEndPos; charOffset++) { + var currChar = pendingSource[charOffset]; + if (currChar === '"' || currChar === '\'') { + withinString = !withinString; + continue charLoop; + } else if (withinString) { + continue charLoop; + } else if (charOffset + 1 < lineEndPos) { + var nextTwoChars = currChar + line[charOffset + 1]; + if (nextTwoChars === '//') { + charOffset = lineEndPos + 1; + continue lineLoop; + } else if (nextTwoChars === '/*') { + withinBlockComment = true; + charOffset += 1; + continue charLoop; + } else if (nextTwoChars === '*/') { + withinBlockComment = false; + charOffset += 1; + continue charLoop; + } + } + + if (!withinBlockComment && currChar === char) { + return charOffset + state.g.position; + } + } + + // Account for '\n' + charOffset++; + withinString = false; + } + + throw new Error('`' + char + '` not found!'); +} + +/** + * Catches up as `catchup` but replaces non-whitespace chars with spaces. + */ +function catchupWhiteOut(end, state) { + catchup(end, state, _replaceNonWhite); +} + +/** + * Catches up as `catchup` but removes all non-whitespace characters. + */ +function catchupWhiteSpace(end, state) { + catchup(end, state, _stripNonWhite); +} + +/** + * Removes all non-newline characters + */ +var reNonNewline = /[^\n]/g; +function stripNonNewline(value) { + return value.replace(reNonNewline, function() { + return ''; + }); +} + +/** + * Catches up as `catchup` but removes all non-newline characters. + * + * Equivalent to appending as many newlines as there are in the original source + * between the current position and `end`. + */ +function catchupNewlines(end, state) { + catchup(end, state, stripNonNewline); +} + + +/** + * Same as catchup but does not touch the buffer + * + * @param {number} end + * @param {object} state + */ +function move(end, state) { + // move the internal cursors + if (state.g.sourceMap) { + if (end < state.g.position) { + state.g.position = 0; + state.g.sourceLine = 1; + state.g.sourceColumn = 0; + } + + var source = state.g.source.substring(state.g.position, end); + var sourceLines = source.split('\n'); + if (sourceLines.length > 1) { + state.g.sourceLine += sourceLines.length - 1; + state.g.sourceColumn = 0; + } + state.g.sourceColumn += sourceLines[sourceLines.length - 1].length; + } + state.g.position = end; +} + +/** + * Appends a string of text to the buffer + * + * @param {string} str + * @param {object} state + */ +function append(str, state) { + if (state.g.sourceMap && str) { + state.g.sourceMap.addMapping({ + generated: { line: state.g.bufferLine, column: state.g.bufferColumn }, + original: { line: state.g.sourceLine, column: state.g.sourceColumn }, + source: state.g.sourceMapFilename + }); + var transformedLines = str.split('\n'); + if (transformedLines.length > 1) { + state.g.bufferLine += transformedLines.length - 1; + state.g.bufferColumn = 0; + } + state.g.bufferColumn += + transformedLines[transformedLines.length - 1].length; + } + state.g.buffer += str; +} + +/** + * Update indent using state.indentBy property. Indent is measured in + * double spaces. Updates a single line only. + * + * @param {string} str + * @param {object} state + * @return {string} + */ +function updateIndent(str, state) { + /*jshint -W004*/ + var indentBy = state.indentBy; + if (indentBy < 0) { + for (var i = 0; i < -indentBy; i++) { + str = str.replace(leadingIndentRegexp, '$1'); + } + } else { + for (var i = 0; i < indentBy; i++) { + str = str.replace(leadingIndentRegexp, '$1$2$2'); + } + } + return str; +} + +/** + * Calculates indent from the beginning of the line until "start" or the first + * character before start. + * @example + * " foo.bar()" + * ^ + * start + * indent will be " " + * + * @param {number} start + * @param {object} state + * @return {string} + */ +function indentBefore(start, state) { + var end = start; + start = start - 1; + + while (start > 0 && state.g.source[start] != '\n') { + if (!state.g.source[start].match(/[ \t]/)) { + end = start; + } + start--; + } + return state.g.source.substring(start + 1, end); +} + +function getDocblock(state) { + if (!state.g.docblock) { + var docblock = _dereq_('./docblock'); + state.g.docblock = + docblock.parseAsObject(docblock.extract(state.g.source)); + } + return state.g.docblock; +} + +function identWithinLexicalScope(identName, state, stopBeforeNode) { + var currScope = state.localScope; + while (currScope) { + if (currScope.identifiers[identName] !== undefined) { + return true; + } + + if (stopBeforeNode && currScope.parentNode === stopBeforeNode) { + break; + } + + currScope = currScope.parentScope; + } + return false; +} + +function identInLocalScope(identName, state) { + return state.localScope.identifiers[identName] !== undefined; +} + +/** + * @param {object} boundaryNode + * @param {?array} path + * @return {?object} node + */ +function initScopeMetadata(boundaryNode, path, node) { + return { + boundaryNode: boundaryNode, + bindingPath: path, + bindingNode: node + }; +} + +function declareIdentInLocalScope(identName, metaData, state) { + state.localScope.identifiers[identName] = { + boundaryNode: metaData.boundaryNode, + path: metaData.bindingPath, + node: metaData.bindingNode, + state: Object.create(state) + }; +} + +function getLexicalBindingMetadata(identName, state) { + var currScope = state.localScope; + while (currScope) { + if (currScope.identifiers[identName] !== undefined) { + return currScope.identifiers[identName]; + } + + currScope = currScope.parentScope; + } +} + +function getLocalBindingMetadata(identName, state) { + return state.localScope.identifiers[identName]; +} + +/** + * Apply the given analyzer function to the current node. If the analyzer + * doesn't return false, traverse each child of the current node using the given + * traverser function. + * + * @param {function} analyzer + * @param {function} traverser + * @param {object} node + * @param {array} path + * @param {object} state + */ +function analyzeAndTraverse(analyzer, traverser, node, path, state) { + if (node.type) { + if (analyzer(node, path, state) === false) { + return; + } + path.unshift(node); + } + + getOrderedChildren(node).forEach(function(child) { + traverser(child, path, state); + }); + + node.type && path.shift(); +} + +/** + * It is crucial that we traverse in order, or else catchup() on a later + * node that is processed out of order can move the buffer past a node + * that we haven't handled yet, preventing us from modifying that node. + * + * This can happen when a node has multiple properties containing children. + * For example, XJSElement nodes have `openingElement`, `closingElement` and + * `children`. If we traverse `openingElement`, then `closingElement`, then + * when we get to `children`, the buffer has already caught up to the end of + * the closing element, after the children. + * + * This is basically a Schwartzian transform. Collects an array of children, + * each one represented as [child, startIndex]; sorts the array by start + * index; then traverses the children in that order. + */ +function getOrderedChildren(node) { + var queue = []; + for (var key in node) { + if (node.hasOwnProperty(key)) { + enqueueNodeWithStartIndex(queue, node[key]); + } + } + queue.sort(function(a, b) { return a[1] - b[1]; }); + return queue.map(function(pair) { return pair[0]; }); +} + +/** + * Helper function for analyzeAndTraverse which queues up all of the children + * of the given node. + * + * Children can also be found in arrays, so we basically want to merge all of + * those arrays together so we can sort them and then traverse the children + * in order. + * + * One example is the Program node. It contains `body` and `comments`, both + * arrays. Lexographically, comments are interspersed throughout the body + * nodes, but esprima's AST groups them together. + */ +function enqueueNodeWithStartIndex(queue, node) { + if (typeof node !== 'object' || node === null) { + return; + } + if (node.range) { + queue.push([node, node.range[0]]); + } else if (Array.isArray(node)) { + for (var ii = 0; ii < node.length; ii++) { + enqueueNodeWithStartIndex(queue, node[ii]); + } + } +} + +/** + * Checks whether a node or any of its sub-nodes contains + * a syntactic construct of the passed type. + * @param {object} node - AST node to test. + * @param {string} type - node type to lookup. + */ +function containsChildOfType(node, type) { + return containsChildMatching(node, function(node) { + return node.type === type; + }); +} + +function containsChildMatching(node, matcher) { + var foundMatchingChild = false; + function nodeTypeAnalyzer(node) { + if (matcher(node) === true) { + foundMatchingChild = true; + return false; + } + } + function nodeTypeTraverser(child, path, state) { + if (!foundMatchingChild) { + foundMatchingChild = containsChildMatching(child, matcher); + } + } + analyzeAndTraverse( + nodeTypeAnalyzer, + nodeTypeTraverser, + node, + [] + ); + return foundMatchingChild; +} + +var scopeTypes = {}; +scopeTypes[Syntax.ArrowFunctionExpression] = true; +scopeTypes[Syntax.FunctionExpression] = true; +scopeTypes[Syntax.FunctionDeclaration] = true; +scopeTypes[Syntax.Program] = true; + +function getBoundaryNode(path) { + for (var ii = 0; ii < path.length; ++ii) { + if (scopeTypes[path[ii].type]) { + return path[ii]; + } + } + throw new Error( + 'Expected to find a node with one of the following types in path:\n' + + JSON.stringify(Object.keys(scopeTypes)) + ); +} + +function getTempVar(tempVarIndex) { + return '$__' + tempVarIndex; +} + +function injectTempVar(state) { + var tempVar = '$__' + (state.localScope.tempVarIndex++); + state.localScope.tempVars.push(tempVar); + return tempVar; +} + +function injectTempVarDeclarations(state, index) { + if (state.localScope.tempVars.length) { + state.g.buffer = + state.g.buffer.slice(0, index) + + 'var ' + state.localScope.tempVars.join(', ') + ';' + + state.g.buffer.slice(index); + state.localScope.tempVars = []; + } +} + +exports.analyzeAndTraverse = analyzeAndTraverse; +exports.append = append; +exports.catchup = catchup; +exports.catchupNewlines = catchupNewlines; +exports.catchupWhiteOut = catchupWhiteOut; +exports.catchupWhiteSpace = catchupWhiteSpace; +exports.containsChildMatching = containsChildMatching; +exports.containsChildOfType = containsChildOfType; +exports.createState = createState; +exports.declareIdentInLocalScope = declareIdentInLocalScope; +exports.getBoundaryNode = getBoundaryNode; +exports.getDocblock = getDocblock; +exports.getLexicalBindingMetadata = getLexicalBindingMetadata; +exports.getLocalBindingMetadata = getLocalBindingMetadata; +exports.getNextSyntacticCharOffset = getNextSyntacticCharOffset; +exports.getNodeSourceText = getNodeSourceText; +exports.getOrderedChildren = getOrderedChildren; +exports.getTempVar = getTempVar; +exports.identInLocalScope = identInLocalScope; +exports.identWithinLexicalScope = identWithinLexicalScope; +exports.indentBefore = indentBefore; +exports.initScopeMetadata = initScopeMetadata; +exports.injectTempVar = injectTempVar; +exports.injectTempVarDeclarations = injectTempVarDeclarations; +exports.move = move; +exports.scopeTypes = scopeTypes; +exports.updateIndent = updateIndent; +exports.updateState = updateState; + +},{"./docblock":21,"esprima-fb":9}],24:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * 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. + */ + +/*global exports:true*/ + +/** + * Desugars ES6 Arrow functions to ES3 function expressions. + * If the function contains `this` expression -- automatically + * binds the function to current value of `this`. + * + * Single parameter, simple expression: + * + * [1, 2, 3].map(x => x * x); + * + * [1, 2, 3].map(function(x) { return x * x; }); + * + * Several parameters, complex block: + * + * this.users.forEach((user, idx) => { + * return this.isActive(idx) && this.send(user); + * }); + * + * this.users.forEach(function(user, idx) { + * return this.isActive(idx) && this.send(user); + * }.bind(this)); + * + */ +var restParamVisitors = _dereq_('./es6-rest-param-visitors'); +var destructuringVisitors = _dereq_('./es6-destructuring-visitors'); + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +/** + * @public + */ +function visitArrowFunction(traverse, node, path, state) { + var notInExpression = (path[0].type === Syntax.ExpressionStatement); + + // Wrap a function into a grouping operator, if it's not + // in the expression position. + if (notInExpression) { + utils.append('(', state); + } + + utils.append('function', state); + renderParams(traverse, node, path, state); + + // Skip arrow. + utils.catchupWhiteSpace(node.body.range[0], state); + + var renderBody = node.body.type == Syntax.BlockStatement + ? renderStatementBody + : renderExpressionBody; + + path.unshift(node); + renderBody(traverse, node, path, state); + path.shift(); + + // Bind the function only if `this` value is used + // inside it or inside any sub-expression. + var containsBindingSyntax = + utils.containsChildMatching(node.body, function(node) { + return node.type === Syntax.ThisExpression + || (node.type === Syntax.Identifier + && node.name === "super"); + }); + + if (containsBindingSyntax) { + utils.append('.bind(this)', state); + } + + utils.catchupWhiteSpace(node.range[1], state); + + // Close wrapper if not in the expression. + if (notInExpression) { + utils.append(')', state); + } + + return false; +} + +function renderParams(traverse, node, path, state) { + // To preserve inline typechecking directives, we + // distinguish between parens-free and paranthesized single param. + if (isParensFreeSingleParam(node, state) || !node.params.length) { + utils.append('(', state); + } + if (node.params.length !== 0) { + path.unshift(node); + traverse(node.params, path, state); + path.unshift(); + } + utils.append(')', state); +} + +function isParensFreeSingleParam(node, state) { + return node.params.length === 1 && + state.g.source[state.g.position] !== '('; +} + +function renderExpressionBody(traverse, node, path, state) { + // Wrap simple expression bodies into a block + // with explicit return statement. + utils.append('{', state); + + // Special handling of rest param. + if (node.rest) { + utils.append( + restParamVisitors.renderRestParamSetup(node, state), + state + ); + } + + // Special handling of destructured params. + destructuringVisitors.renderDestructuredComponents( + node, + utils.updateState(state, { + localScope: { + parentNode: state.parentNode, + parentScope: state.parentScope, + identifiers: state.identifiers, + tempVarIndex: 0 + } + }) + ); + + utils.append('return ', state); + renderStatementBody(traverse, node, path, state); + utils.append(';}', state); +} + +function renderStatementBody(traverse, node, path, state) { + traverse(node.body, path, state); + utils.catchup(node.body.range[1], state); +} + +visitArrowFunction.test = function(node, path, state) { + return node.type === Syntax.ArrowFunctionExpression; +}; + +exports.visitorList = [ + visitArrowFunction +]; + + +},{"../src/utils":23,"./es6-destructuring-visitors":27,"./es6-rest-param-visitors":30,"esprima-fb":9}],25:[function(_dereq_,module,exports){ +/** + * Copyright 2004-present Facebook. All Rights Reserved. + */ +/*global exports:true*/ + +/** + * Implements ES6 call spread. + * + * instance.method(a, b, c, ...d) + * + * instance.method.apply(instance, [a, b, c].concat(d)) + * + */ + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +function process(traverse, node, path, state) { + utils.move(node.range[0], state); + traverse(node, path, state); + utils.catchup(node.range[1], state); +} + +function visitCallSpread(traverse, node, path, state) { + utils.catchup(node.range[0], state); + + if (node.type === Syntax.NewExpression) { + // Input = new Set(1, 2, ...list) + // Output = new (Function.prototype.bind.apply(Set, [null, 1, 2].concat(list))) + utils.append('new (Function.prototype.bind.apply(', state); + process(traverse, node.callee, path, state); + } else if (node.callee.type === Syntax.MemberExpression) { + // Input = get().fn(1, 2, ...more) + // Output = (_ = get()).fn.apply(_, [1, 2].apply(more)) + var tempVar = utils.injectTempVar(state); + utils.append('(' + tempVar + ' = ', state); + process(traverse, node.callee.object, path, state); + utils.append(')', state); + if (node.callee.property.type === Syntax.Identifier) { + utils.append('.', state); + process(traverse, node.callee.property, path, state); + } else { + utils.append('[', state); + process(traverse, node.callee.property, path, state); + utils.append(']', state); + } + utils.append('.apply(' + tempVar, state); + } else { + // Input = max(1, 2, ...list) + // Output = max.apply(null, [1, 2].concat(list)) + var needsToBeWrappedInParenthesis = + node.callee.type === Syntax.FunctionDeclaration || + node.callee.type === Syntax.FunctionExpression; + if (needsToBeWrappedInParenthesis) { + utils.append('(', state); + } + process(traverse, node.callee, path, state); + if (needsToBeWrappedInParenthesis) { + utils.append(')', state); + } + utils.append('.apply(null', state); + } + utils.append(', ', state); + + var args = node.arguments.slice(); + var spread = args.pop(); + if (args.length || node.type === Syntax.NewExpression) { + utils.append('[', state); + if (node.type === Syntax.NewExpression) { + utils.append('null' + (args.length ? ', ' : ''), state); + } + while (args.length) { + var arg = args.shift(); + utils.move(arg.range[0], state); + traverse(arg, path, state); + if (args.length) { + utils.catchup(args[0].range[0], state); + } else { + utils.catchup(arg.range[1], state); + } + } + utils.append('].concat(', state); + process(traverse, spread.argument, path, state); + utils.append(')', state); + } else { + process(traverse, spread.argument, path, state); + } + utils.append(node.type === Syntax.NewExpression ? '))' : ')', state); + + utils.move(node.range[1], state); + return false; +} + +visitCallSpread.test = function(node, path, state) { + return ( + ( + node.type === Syntax.CallExpression || + node.type === Syntax.NewExpression + ) && + node.arguments.length > 0 && + node.arguments[node.arguments.length - 1].type === Syntax.SpreadElement + ); +}; + +exports.visitorList = [ + visitCallSpread +]; + +},{"../src/utils":23,"esprima-fb":9}],26:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * 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. + */ + +/*jslint node:true*/ + +/** + * @typechecks + */ +'use strict'; + +var base62 = _dereq_('base62'); +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); +var reservedWordsHelper = _dereq_('./reserved-words-helper'); + +var declareIdentInLocalScope = utils.declareIdentInLocalScope; +var initScopeMetadata = utils.initScopeMetadata; + +var SUPER_PROTO_IDENT_PREFIX = '____SuperProtoOf'; + +var _anonClassUUIDCounter = 0; +var _mungedSymbolMaps = {}; + +function resetSymbols() { + _anonClassUUIDCounter = 0; + _mungedSymbolMaps = {}; +} + +/** + * Used to generate a unique class for use with code-gens for anonymous class + * expressions. + * + * @param {object} state + * @return {string} + */ +function _generateAnonymousClassName(state) { + var mungeNamespace = state.mungeNamespace || ''; + return '____Class' + mungeNamespace + base62.encode(_anonClassUUIDCounter++); +} + +/** + * Given an identifier name, munge it using the current state's mungeNamespace. + * + * @param {string} identName + * @param {object} state + * @return {string} + */ +function _getMungedName(identName, state) { + var mungeNamespace = state.mungeNamespace; + var shouldMinify = state.g.opts.minify; + + if (shouldMinify) { + if (!_mungedSymbolMaps[mungeNamespace]) { + _mungedSymbolMaps[mungeNamespace] = { + symbolMap: {}, + identUUIDCounter: 0 + }; + } + + var symbolMap = _mungedSymbolMaps[mungeNamespace].symbolMap; + if (!symbolMap[identName]) { + symbolMap[identName] = + base62.encode(_mungedSymbolMaps[mungeNamespace].identUUIDCounter++); + } + identName = symbolMap[identName]; + } + return '$' + mungeNamespace + identName; +} + +/** + * Extracts super class information from a class node. + * + * Information includes name of the super class and/or the expression string + * (if extending from an expression) + * + * @param {object} node + * @param {object} state + * @return {object} + */ +function _getSuperClassInfo(node, state) { + var ret = { + name: null, + expression: null + }; + if (node.superClass) { + if (node.superClass.type === Syntax.Identifier) { + ret.name = node.superClass.name; + } else { + // Extension from an expression + ret.name = _generateAnonymousClassName(state); + ret.expression = state.g.source.substring( + node.superClass.range[0], + node.superClass.range[1] + ); + } + } + return ret; +} + +/** + * Used with .filter() to find the constructor method in a list of + * MethodDefinition nodes. + * + * @param {object} classElement + * @return {boolean} + */ +function _isConstructorMethod(classElement) { + return classElement.type === Syntax.MethodDefinition && + classElement.key.type === Syntax.Identifier && + classElement.key.name === 'constructor'; +} + +/** + * @param {object} node + * @param {object} state + * @return {boolean} + */ +function _shouldMungeIdentifier(node, state) { + return ( + !!state.methodFuncNode && + !utils.getDocblock(state).hasOwnProperty('preventMunge') && + /^_(?!_)/.test(node.name) + ); +} + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitClassMethod(traverse, node, path, state) { + if (!state.g.opts.es5 && (node.kind === 'get' || node.kind === 'set')) { + throw new Error( + 'This transform does not support ' + node.kind + 'ter methods for ES6 ' + + 'classes. (line: ' + node.loc.start.line + ', col: ' + + node.loc.start.column + ')' + ); + } + state = utils.updateState(state, { + methodNode: node + }); + utils.catchup(node.range[0], state); + path.unshift(node); + traverse(node.value, path, state); + path.shift(); + return false; +} +visitClassMethod.test = function(node, path, state) { + return node.type === Syntax.MethodDefinition; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitClassFunctionExpression(traverse, node, path, state) { + var methodNode = path[0]; + var isGetter = methodNode.kind === 'get'; + var isSetter = methodNode.kind === 'set'; + + state = utils.updateState(state, { + methodFuncNode: node + }); + + if (methodNode.key.name === 'constructor') { + utils.append('function ' + state.className, state); + } else { + var methodAccessorComputed = false; + var methodAccessor; + var prototypeOrStatic = methodNode["static"] ? '' : '.prototype'; + var objectAccessor = state.className + prototypeOrStatic; + + if (methodNode.key.type === Syntax.Identifier) { + // foo() {} + methodAccessor = methodNode.key.name; + if (_shouldMungeIdentifier(methodNode.key, state)) { + methodAccessor = _getMungedName(methodAccessor, state); + } + if (isGetter || isSetter) { + methodAccessor = JSON.stringify(methodAccessor); + } else if (reservedWordsHelper.isReservedWord(methodAccessor)) { + methodAccessorComputed = true; + methodAccessor = JSON.stringify(methodAccessor); + } + } else if (methodNode.key.type === Syntax.Literal) { + // 'foo bar'() {} | get 'foo bar'() {} | set 'foo bar'() {} + methodAccessor = JSON.stringify(methodNode.key.value); + methodAccessorComputed = true; + } + + if (isSetter || isGetter) { + utils.append( + 'Object.defineProperty(' + + objectAccessor + ',' + + methodAccessor + ',' + + '{configurable:true,' + + methodNode.kind + ':function', + state + ); + } else { + if (state.g.opts.es3) { + if (methodAccessorComputed) { + methodAccessor = '[' + methodAccessor + ']'; + } else { + methodAccessor = '.' + methodAccessor; + } + utils.append( + objectAccessor + + methodAccessor + '=function' + (node.generator ? '*' : ''), + state + ); + } else { + if (!methodAccessorComputed) { + methodAccessor = JSON.stringify(methodAccessor); + } + utils.append( + 'Object.defineProperty(' + + objectAccessor + ',' + + methodAccessor + ',' + + '{writable:true,configurable:true,' + + 'value:function' + (node.generator ? '*' : ''), + state + ); + } + } + } + utils.move(methodNode.key.range[1], state); + utils.append('(', state); + + var params = node.params; + if (params.length > 0) { + utils.catchupNewlines(params[0].range[0], state); + for (var i = 0; i < params.length; i++) { + utils.catchup(node.params[i].range[0], state); + path.unshift(node); + traverse(params[i], path, state); + path.shift(); + } + } + + var closingParenPosition = utils.getNextSyntacticCharOffset(')', state); + utils.catchupWhiteSpace(closingParenPosition, state); + + var openingBracketPosition = utils.getNextSyntacticCharOffset('{', state); + utils.catchup(openingBracketPosition + 1, state); + + if (!state.scopeIsStrict) { + utils.append('"use strict";', state); + state = utils.updateState(state, { + scopeIsStrict: true + }); + } + utils.move(node.body.range[0] + '{'.length, state); + + path.unshift(node); + traverse(node.body, path, state); + path.shift(); + utils.catchup(node.body.range[1], state); + + if (methodNode.key.name !== 'constructor') { + if (isGetter || isSetter || !state.g.opts.es3) { + utils.append('})', state); + } + utils.append(';', state); + } + return false; +} +visitClassFunctionExpression.test = function(node, path, state) { + return node.type === Syntax.FunctionExpression + && path[0].type === Syntax.MethodDefinition; +}; + +function visitClassMethodParam(traverse, node, path, state) { + var paramName = node.name; + if (_shouldMungeIdentifier(node, state)) { + paramName = _getMungedName(node.name, state); + } + utils.append(paramName, state); + utils.move(node.range[1], state); +} +visitClassMethodParam.test = function(node, path, state) { + if (!path[0] || !path[1]) { + return; + } + + var parentFuncExpr = path[0]; + var parentClassMethod = path[1]; + + return parentFuncExpr.type === Syntax.FunctionExpression + && parentClassMethod.type === Syntax.MethodDefinition + && node.type === Syntax.Identifier; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function _renderClassBody(traverse, node, path, state) { + var className = state.className; + var superClass = state.superClass; + + // Set up prototype of constructor on same line as `extends` for line-number + // preservation. This relies on function-hoisting if a constructor function is + // defined in the class body. + if (superClass.name) { + // If the super class is an expression, we need to memoize the output of the + // expression into the generated class name variable and use that to refer + // to the super class going forward. Example: + // + // class Foo extends mixin(Bar, Baz) {} + // --transforms to-- + // function Foo() {} var ____Class0Blah = mixin(Bar, Baz); + if (superClass.expression !== null) { + utils.append( + 'var ' + superClass.name + '=' + superClass.expression + ';', + state + ); + } + + var keyName = superClass.name + '____Key'; + var keyNameDeclarator = ''; + if (!utils.identWithinLexicalScope(keyName, state)) { + keyNameDeclarator = 'var '; + declareIdentInLocalScope(keyName, initScopeMetadata(node), state); + } + utils.append( + 'for(' + keyNameDeclarator + keyName + ' in ' + superClass.name + '){' + + 'if(' + superClass.name + '.hasOwnProperty(' + keyName + ')){' + + className + '[' + keyName + ']=' + + superClass.name + '[' + keyName + '];' + + '}' + + '}', + state + ); + + var superProtoIdentStr = SUPER_PROTO_IDENT_PREFIX + superClass.name; + if (!utils.identWithinLexicalScope(superProtoIdentStr, state)) { + utils.append( + 'var ' + superProtoIdentStr + '=' + superClass.name + '===null?' + + 'null:' + superClass.name + '.prototype;', + state + ); + declareIdentInLocalScope(superProtoIdentStr, initScopeMetadata(node), state); + } + + utils.append( + className + '.prototype=Object.create(' + superProtoIdentStr + ');', + state + ); + utils.append( + className + '.prototype.constructor=' + className + ';', + state + ); + utils.append( + className + '.__superConstructor__=' + superClass.name + ';', + state + ); + } + + // If there's no constructor method specified in the class body, create an + // empty constructor function at the top (same line as the class keyword) + if (!node.body.body.filter(_isConstructorMethod).pop()) { + utils.append('function ' + className + '(){', state); + if (!state.scopeIsStrict) { + utils.append('"use strict";', state); + } + if (superClass.name) { + utils.append( + 'if(' + superClass.name + '!==null){' + + superClass.name + '.apply(this,arguments);}', + state + ); + } + utils.append('}', state); + } + + utils.move(node.body.range[0] + '{'.length, state); + traverse(node.body, path, state); + utils.catchupWhiteSpace(node.range[1], state); +} + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitClassDeclaration(traverse, node, path, state) { + var className = node.id.name; + var superClass = _getSuperClassInfo(node, state); + + state = utils.updateState(state, { + mungeNamespace: className, + className: className, + superClass: superClass + }); + + _renderClassBody(traverse, node, path, state); + + return false; +} +visitClassDeclaration.test = function(node, path, state) { + return node.type === Syntax.ClassDeclaration; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitClassExpression(traverse, node, path, state) { + var className = node.id && node.id.name || _generateAnonymousClassName(state); + var superClass = _getSuperClassInfo(node, state); + + utils.append('(function(){', state); + + state = utils.updateState(state, { + mungeNamespace: className, + className: className, + superClass: superClass + }); + + _renderClassBody(traverse, node, path, state); + + utils.append('return ' + className + ';})()', state); + return false; +} +visitClassExpression.test = function(node, path, state) { + return node.type === Syntax.ClassExpression; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitPrivateIdentifier(traverse, node, path, state) { + utils.append(_getMungedName(node.name, state), state); + utils.move(node.range[1], state); +} +visitPrivateIdentifier.test = function(node, path, state) { + if (node.type === Syntax.Identifier && _shouldMungeIdentifier(node, state)) { + // Always munge non-computed properties of MemberExpressions + // (a la preventing access of properties of unowned objects) + if (path[0].type === Syntax.MemberExpression && path[0].object !== node + && path[0].computed === false) { + return true; + } + + // Always munge identifiers that were declared within the method function + // scope + if (utils.identWithinLexicalScope(node.name, state, state.methodFuncNode)) { + return true; + } + + // Always munge private keys on object literals defined within a method's + // scope. + if (path[0].type === Syntax.Property + && path[1].type === Syntax.ObjectExpression) { + return true; + } + + // Always munge function parameters + if (path[0].type === Syntax.FunctionExpression + || path[0].type === Syntax.FunctionDeclaration + || path[0].type === Syntax.ArrowFunctionExpression) { + for (var i = 0; i < path[0].params.length; i++) { + if (path[0].params[i] === node) { + return true; + } + } + } + } + return false; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitSuperCallExpression(traverse, node, path, state) { + var superClassName = state.superClass.name; + + if (node.callee.type === Syntax.Identifier) { + if (_isConstructorMethod(state.methodNode)) { + utils.append(superClassName + '.call(', state); + } else { + var protoProp = SUPER_PROTO_IDENT_PREFIX + superClassName; + if (state.methodNode.key.type === Syntax.Identifier) { + protoProp += '.' + state.methodNode.key.name; + } else if (state.methodNode.key.type === Syntax.Literal) { + protoProp += '[' + JSON.stringify(state.methodNode.key.value) + ']'; + } + utils.append(protoProp + ".call(", state); + } + utils.move(node.callee.range[1], state); + } else if (node.callee.type === Syntax.MemberExpression) { + utils.append(SUPER_PROTO_IDENT_PREFIX + superClassName, state); + utils.move(node.callee.object.range[1], state); + + if (node.callee.computed) { + // ["a" + "b"] + utils.catchup(node.callee.property.range[1] + ']'.length, state); + } else { + // .ab + utils.append('.' + node.callee.property.name, state); + } + + utils.append('.call(', state); + utils.move(node.callee.range[1], state); + } + + utils.append('this', state); + if (node.arguments.length > 0) { + utils.append(',', state); + utils.catchupWhiteSpace(node.arguments[0].range[0], state); + traverse(node.arguments, path, state); + } + + utils.catchupWhiteSpace(node.range[1], state); + utils.append(')', state); + return false; +} +visitSuperCallExpression.test = function(node, path, state) { + if (state.superClass && node.type === Syntax.CallExpression) { + var callee = node.callee; + if (callee.type === Syntax.Identifier && callee.name === 'super' + || callee.type == Syntax.MemberExpression + && callee.object.name === 'super') { + return true; + } + } + return false; +}; + +/** + * @param {function} traverse + * @param {object} node + * @param {array} path + * @param {object} state + */ +function visitSuperMemberExpression(traverse, node, path, state) { + var superClassName = state.superClass.name; + + utils.append(SUPER_PROTO_IDENT_PREFIX + superClassName, state); + utils.move(node.object.range[1], state); +} +visitSuperMemberExpression.test = function(node, path, state) { + return state.superClass + && node.type === Syntax.MemberExpression + && node.object.type === Syntax.Identifier + && node.object.name === 'super'; +}; + +exports.resetSymbols = resetSymbols; + +exports.visitorList = [ + visitClassDeclaration, + visitClassExpression, + visitClassFunctionExpression, + visitClassMethod, + visitClassMethodParam, + visitPrivateIdentifier, + visitSuperCallExpression, + visitSuperMemberExpression +]; + +},{"../src/utils":23,"./reserved-words-helper":34,"base62":10,"esprima-fb":9}],27:[function(_dereq_,module,exports){ +/** + * Copyright 2014 Facebook, Inc. + * + * 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. + */ +/*global exports:true*/ + +/** + * Implements ES6 destructuring assignment and pattern matchng. + * + * function init({port, ip, coords: [x, y]}) { + * return (x && y) ? {id, port} : {ip}; + * }; + * + * function init($__0) { + * var + * port = $__0.port, + * ip = $__0.ip, + * $__1 = $__0.coords, + * x = $__1[0], + * y = $__1[1]; + * return (x && y) ? {id, port} : {ip}; + * } + * + * var x, {ip, port} = init({ip, port}); + * + * var x, $__0 = init({ip, port}), ip = $__0.ip, port = $__0.port; + * + */ +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +var reservedWordsHelper = _dereq_('./reserved-words-helper'); +var restParamVisitors = _dereq_('./es6-rest-param-visitors'); +var restPropertyHelpers = _dereq_('./es7-rest-property-helpers'); + +// ------------------------------------------------------- +// 1. Structured variable declarations. +// +// var [a, b] = [b, a]; +// var {x, y} = {y, x}; +// ------------------------------------------------------- + +function visitStructuredVariable(traverse, node, path, state) { + // Allocate new temp for the pattern. + utils.append(utils.getTempVar(state.localScope.tempVarIndex) + '=', state); + // Skip the pattern and assign the init to the temp. + utils.catchupWhiteSpace(node.init.range[0], state); + traverse(node.init, path, state); + utils.catchup(node.init.range[1], state); + // Render the destructured data. + utils.append(',' + getDestructuredComponents(node.id, state), state); + state.localScope.tempVarIndex++; + return false; +} + +visitStructuredVariable.test = function(node, path, state) { + return node.type === Syntax.VariableDeclarator && + isStructuredPattern(node.id); +}; + +function isStructuredPattern(node) { + return node.type === Syntax.ObjectPattern || + node.type === Syntax.ArrayPattern; +} + +// Main function which does actual recursive destructuring +// of nested complex structures. +function getDestructuredComponents(node, state) { + var tmpIndex = state.localScope.tempVarIndex; + var components = []; + var patternItems = getPatternItems(node); + + for (var idx = 0; idx < patternItems.length; idx++) { + var item = patternItems[idx]; + if (!item) { + continue; + } + + if (item.type === Syntax.SpreadElement) { + // Spread/rest of an array. + // TODO(dmitrys): support spread in the middle of a pattern + // and also for function param patterns: [x, ...xs, y] + components.push(item.argument.name + + '=Array.prototype.slice.call(' + + utils.getTempVar(tmpIndex) + ',' + idx + ')' + ); + continue; + } + + if (item.type === Syntax.SpreadProperty) { + var restExpression = restPropertyHelpers.renderRestExpression( + utils.getTempVar(tmpIndex), + patternItems + ); + components.push(item.argument.name + '=' + restExpression); + continue; + } + + // Depending on pattern type (Array or Object), we get + // corresponding pattern item parts. + var accessor = getPatternItemAccessor(node, item, tmpIndex, idx); + var value = getPatternItemValue(node, item); + + // TODO(dmitrys): implement default values: {x, y=5} + if (value.type === Syntax.Identifier) { + // Simple pattern item. + components.push(value.name + '=' + accessor); + } else { + // Complex sub-structure. + components.push( + utils.getTempVar(++state.localScope.tempVarIndex) + '=' + accessor + + ',' + getDestructuredComponents(value, state) + ); + } + } + + return components.join(','); +} + +function getPatternItems(node) { + return node.properties || node.elements; +} + +function getPatternItemAccessor(node, patternItem, tmpIndex, idx) { + var tmpName = utils.getTempVar(tmpIndex); + if (node.type === Syntax.ObjectPattern) { + if (reservedWordsHelper.isReservedWord(patternItem.key.name)) { + return tmpName + '["' + patternItem.key.name + '"]'; + } else if (patternItem.key.type === Syntax.Literal) { + return tmpName + '[' + JSON.stringify(patternItem.key.value) + ']'; + } else if (patternItem.key.type === Syntax.Identifier) { + return tmpName + '.' + patternItem.key.name; + } + } else if (node.type === Syntax.ArrayPattern) { + return tmpName + '[' + idx + ']'; + } +} + +function getPatternItemValue(node, patternItem) { + return node.type === Syntax.ObjectPattern + ? patternItem.value + : patternItem; +} + +// ------------------------------------------------------- +// 2. Assignment expression. +// +// [a, b] = [b, a]; +// ({x, y} = {y, x}); +// ------------------------------------------------------- + +function visitStructuredAssignment(traverse, node, path, state) { + var exprNode = node.expression; + utils.append('var ' + utils.getTempVar(state.localScope.tempVarIndex) + '=', state); + + utils.catchupWhiteSpace(exprNode.right.range[0], state); + traverse(exprNode.right, path, state); + utils.catchup(exprNode.right.range[1], state); + + utils.append( + ';' + getDestructuredComponents(exprNode.left, state) + ';', + state + ); + + utils.catchupWhiteSpace(node.range[1], state); + state.localScope.tempVarIndex++; + return false; +} + +visitStructuredAssignment.test = function(node, path, state) { + // We consider the expression statement rather than just assignment + // expression to cover case with object patters which should be + // wrapped in grouping operator: ({x, y} = {y, x}); + return node.type === Syntax.ExpressionStatement && + node.expression.type === Syntax.AssignmentExpression && + isStructuredPattern(node.expression.left); +}; + +// ------------------------------------------------------- +// 3. Structured parameter. +// +// function foo({x, y}) { ... } +// ------------------------------------------------------- + +function visitStructuredParameter(traverse, node, path, state) { + utils.append(utils.getTempVar(getParamIndex(node, path)), state); + utils.catchupWhiteSpace(node.range[1], state); + return true; +} + +function getParamIndex(paramNode, path) { + var funcNode = path[0]; + var tmpIndex = 0; + for (var k = 0; k < funcNode.params.length; k++) { + var param = funcNode.params[k]; + if (param === paramNode) { + break; + } + if (isStructuredPattern(param)) { + tmpIndex++; + } + } + return tmpIndex; +} + +visitStructuredParameter.test = function(node, path, state) { + return isStructuredPattern(node) && isFunctionNode(path[0]); +}; + +function isFunctionNode(node) { + return (node.type == Syntax.FunctionDeclaration || + node.type == Syntax.FunctionExpression || + node.type == Syntax.MethodDefinition || + node.type == Syntax.ArrowFunctionExpression); +} + +// ------------------------------------------------------- +// 4. Function body for structured parameters. +// +// function foo({x, y}) { x; y; } +// ------------------------------------------------------- + +function visitFunctionBodyForStructuredParameter(traverse, node, path, state) { + var funcNode = path[0]; + + utils.catchup(funcNode.body.range[0] + 1, state); + renderDestructuredComponents(funcNode, state); + + if (funcNode.rest) { + utils.append( + restParamVisitors.renderRestParamSetup(funcNode, state), + state + ); + } + + return true; +} + +function renderDestructuredComponents(funcNode, state) { + var destructuredComponents = []; + + for (var k = 0; k < funcNode.params.length; k++) { + var param = funcNode.params[k]; + if (isStructuredPattern(param)) { + destructuredComponents.push( + getDestructuredComponents(param, state) + ); + state.localScope.tempVarIndex++; + } + } + + if (destructuredComponents.length) { + utils.append('var ' + destructuredComponents.join(',') + ';', state); + } +} + +visitFunctionBodyForStructuredParameter.test = function(node, path, state) { + return node.type === Syntax.BlockStatement && isFunctionNode(path[0]); +}; + +exports.visitorList = [ + visitStructuredVariable, + visitStructuredAssignment, + visitStructuredParameter, + visitFunctionBodyForStructuredParameter +]; + +exports.renderDestructuredComponents = renderDestructuredComponents; + + +},{"../src/utils":23,"./es6-rest-param-visitors":30,"./es7-rest-property-helpers":32,"./reserved-words-helper":34,"esprima-fb":9}],28:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * 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. + */ + +/*jslint node:true*/ + +/** + * Desugars concise methods of objects to function expressions. + * + * var foo = { + * method(x, y) { ... } + * }; + * + * var foo = { + * method: function(x, y) { ... } + * }; + * + */ + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); +var reservedWordsHelper = _dereq_('./reserved-words-helper'); + +function visitObjectConciseMethod(traverse, node, path, state) { + var isGenerator = node.value.generator; + if (isGenerator) { + utils.catchupWhiteSpace(node.range[0] + 1, state); + } + if (node.computed) { // []() { ...} + utils.catchup(node.key.range[1] + 1, state); + } else if (reservedWordsHelper.isReservedWord(node.key.name)) { + utils.catchup(node.key.range[0], state); + utils.append('"', state); + utils.catchup(node.key.range[1], state); + utils.append('"', state); + } + + utils.catchup(node.key.range[1], state); + utils.append( + ':function' + (isGenerator ? '*' : ''), + state + ); + path.unshift(node); + traverse(node.value, path, state); + path.shift(); + return false; +} + +visitObjectConciseMethod.test = function(node, path, state) { + return node.type === Syntax.Property && + node.value.type === Syntax.FunctionExpression && + node.method === true; +}; + +exports.visitorList = [ + visitObjectConciseMethod +]; + +},{"../src/utils":23,"./reserved-words-helper":34,"esprima-fb":9}],29:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * 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. + */ + +/*jslint node: true*/ + +/** + * Desugars ES6 Object Literal short notations into ES3 full notation. + * + * // Easier return values. + * function foo(x, y) { + * return {x, y}; // {x: x, y: y} + * }; + * + * // Destructuring. + * function init({port, ip, coords: {x, y}}) { ... } + * + */ +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +/** + * @public + */ +function visitObjectLiteralShortNotation(traverse, node, path, state) { + utils.catchup(node.key.range[1], state); + utils.append(':' + node.key.name, state); + return false; +} + +visitObjectLiteralShortNotation.test = function(node, path, state) { + return node.type === Syntax.Property && + node.kind === 'init' && + node.shorthand === true && + path[0].type !== Syntax.ObjectPattern; +}; + +exports.visitorList = [ + visitObjectLiteralShortNotation +]; + + +},{"../src/utils":23,"esprima-fb":9}],30:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * 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. + */ + +/*jslint node:true*/ + +/** + * Desugars ES6 rest parameters into an ES3 arguments array. + * + * function printf(template, ...args) { + * args.forEach(...); + * } + * + * We could use `Array.prototype.slice.call`, but that usage of arguments causes + * functions to be deoptimized in V8, so instead we use a for-loop. + * + * function printf(template) { + * for (var args = [], $__0 = 1, $__1 = arguments.length; $__0 < $__1; $__0++) + * args.push(arguments[$__0]); + * args.forEach(...); + * } + * + */ +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + + + +function _nodeIsFunctionWithRestParam(node) { + return (node.type === Syntax.FunctionDeclaration + || node.type === Syntax.FunctionExpression + || node.type === Syntax.ArrowFunctionExpression) + && node.rest; +} + +function visitFunctionParamsWithRestParam(traverse, node, path, state) { + if (node.parametricType) { + utils.catchup(node.parametricType.range[0], state); + path.unshift(node); + traverse(node.parametricType, path, state); + path.shift(); + } + + // Render params. + if (node.params.length) { + path.unshift(node); + traverse(node.params, path, state); + path.shift(); + } else { + // -3 is for ... of the rest. + utils.catchup(node.rest.range[0] - 3, state); + } + utils.catchupWhiteSpace(node.rest.range[1], state); + + path.unshift(node); + traverse(node.body, path, state); + path.shift(); + + return false; +} + +visitFunctionParamsWithRestParam.test = function(node, path, state) { + return _nodeIsFunctionWithRestParam(node); +}; + +function renderRestParamSetup(functionNode, state) { + var idx = state.localScope.tempVarIndex++; + var len = state.localScope.tempVarIndex++; + + return 'for (var ' + functionNode.rest.name + '=[],' + + utils.getTempVar(idx) + '=' + functionNode.params.length + ',' + + utils.getTempVar(len) + '=arguments.length;' + + utils.getTempVar(idx) + '<' + utils.getTempVar(len) + ';' + + utils.getTempVar(idx) + '++) ' + + functionNode.rest.name + '.push(arguments[' + utils.getTempVar(idx) + ']);'; +} + +function visitFunctionBodyWithRestParam(traverse, node, path, state) { + utils.catchup(node.range[0] + 1, state); + var parentNode = path[0]; + utils.append(renderRestParamSetup(parentNode, state), state); + return true; +} + +visitFunctionBodyWithRestParam.test = function(node, path, state) { + return node.type === Syntax.BlockStatement + && _nodeIsFunctionWithRestParam(path[0]); +}; + +exports.renderRestParamSetup = renderRestParamSetup; +exports.visitorList = [ + visitFunctionParamsWithRestParam, + visitFunctionBodyWithRestParam +]; + +},{"../src/utils":23,"esprima-fb":9}],31:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * 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. + */ + +/*jslint node:true*/ + +/** + * @typechecks + */ +'use strict'; + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +/** + * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-12.1.9 + */ +function visitTemplateLiteral(traverse, node, path, state) { + var templateElements = node.quasis; + + utils.append('(', state); + for (var ii = 0; ii < templateElements.length; ii++) { + var templateElement = templateElements[ii]; + if (templateElement.value.raw !== '') { + utils.append(getCookedValue(templateElement), state); + if (!templateElement.tail) { + // + between element and substitution + utils.append(' + ', state); + } + // maintain line numbers + utils.move(templateElement.range[0], state); + utils.catchupNewlines(templateElement.range[1], state); + } else { // templateElement.value.raw === '' + // Concatenat adjacent substitutions, e.g. `${x}${y}`. Empty templates + // appear before the first and after the last element - nothing to add in + // those cases. + if (ii > 0 && !templateElement.tail) { + // + between substitution and substitution + utils.append(' + ', state); + } + } + + utils.move(templateElement.range[1], state); + if (!templateElement.tail) { + var substitution = node.expressions[ii]; + if (substitution.type === Syntax.Identifier || + substitution.type === Syntax.MemberExpression || + substitution.type === Syntax.CallExpression) { + utils.catchup(substitution.range[1], state); + } else { + utils.append('(', state); + traverse(substitution, path, state); + utils.catchup(substitution.range[1], state); + utils.append(')', state); + } + // if next templateElement isn't empty... + if (templateElements[ii + 1].value.cooked !== '') { + utils.append(' + ', state); + } + } + } + utils.move(node.range[1], state); + utils.append(')', state); + return false; +} + +visitTemplateLiteral.test = function(node, path, state) { + return node.type === Syntax.TemplateLiteral; +}; + +/** + * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-12.2.6 + */ +function visitTaggedTemplateExpression(traverse, node, path, state) { + var template = node.quasi; + var numQuasis = template.quasis.length; + + // print the tag + utils.move(node.tag.range[0], state); + traverse(node.tag, path, state); + utils.catchup(node.tag.range[1], state); + + // print array of template elements + utils.append('(function() { var siteObj = [', state); + for (var ii = 0; ii < numQuasis; ii++) { + utils.append(getCookedValue(template.quasis[ii]), state); + if (ii !== numQuasis - 1) { + utils.append(', ', state); + } + } + utils.append(']; siteObj.raw = [', state); + for (ii = 0; ii < numQuasis; ii++) { + utils.append(getRawValue(template.quasis[ii]), state); + if (ii !== numQuasis - 1) { + utils.append(', ', state); + } + } + utils.append( + ']; Object.freeze(siteObj.raw); Object.freeze(siteObj); return siteObj; }()', + state + ); + + // print substitutions + if (numQuasis > 1) { + for (ii = 0; ii < template.expressions.length; ii++) { + var expression = template.expressions[ii]; + utils.append(', ', state); + + // maintain line numbers by calling catchupWhiteSpace over the whole + // previous TemplateElement + utils.move(template.quasis[ii].range[0], state); + utils.catchupNewlines(template.quasis[ii].range[1], state); + + utils.move(expression.range[0], state); + traverse(expression, path, state); + utils.catchup(expression.range[1], state); + } + } + + // print blank lines to push the closing ) down to account for the final + // TemplateElement. + utils.catchupNewlines(node.range[1], state); + + utils.append(')', state); + + return false; +} + +visitTaggedTemplateExpression.test = function(node, path, state) { + return node.type === Syntax.TaggedTemplateExpression; +}; + +function getCookedValue(templateElement) { + return JSON.stringify(templateElement.value.cooked); +} + +function getRawValue(templateElement) { + return JSON.stringify(templateElement.value.raw); +} + +exports.visitorList = [ + visitTemplateLiteral, + visitTaggedTemplateExpression +]; + +},{"../src/utils":23,"esprima-fb":9}],32:[function(_dereq_,module,exports){ +/** + * Copyright 2013 Facebook, Inc. + * + * 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. + */ + +/*jslint node:true*/ + +/** + * Desugars ES7 rest properties into ES5 object iteration. + */ + +var Syntax = _dereq_('esprima-fb').Syntax; + +// TODO: This is a pretty massive helper, it should only be defined once, in the +// transform's runtime environment. We don't currently have a runtime though. +var restFunction = + '(function(source, exclusion) {' + + 'var rest = {};' + + 'var hasOwn = Object.prototype.hasOwnProperty;' + + 'if (source == null) {' + + 'throw new TypeError();' + + '}' + + 'for (var key in source) {' + + 'if (hasOwn.call(source, key) && !hasOwn.call(exclusion, key)) {' + + 'rest[key] = source[key];' + + '}' + + '}' + + 'return rest;' + + '})'; + +function getPropertyNames(properties) { + var names = []; + for (var i = 0; i < properties.length; i++) { + var property = properties[i]; + if (property.type === Syntax.SpreadProperty) { + continue; + } + if (property.type === Syntax.Identifier) { + names.push(property.name); + } else { + names.push(property.key.name); + } + } + return names; +} + +function getRestFunctionCall(source, exclusion) { + return restFunction + '(' + source + ',' + exclusion + ')'; +} + +function getSimpleShallowCopy(accessorExpression) { + // This could be faster with 'Object.assign({}, ' + accessorExpression + ')' + // but to unify code paths and avoid a ES6 dependency we use the same + // helper as for the exclusion case. + return getRestFunctionCall(accessorExpression, '{}'); +} + +function renderRestExpression(accessorExpression, excludedProperties) { + var excludedNames = getPropertyNames(excludedProperties); + if (!excludedNames.length) { + return getSimpleShallowCopy(accessorExpression); + } + return getRestFunctionCall( + accessorExpression, + '{' + excludedNames.join(':1,') + ':1}' + ); +} + +exports.renderRestExpression = renderRestExpression; + +},{"esprima-fb":9}],33:[function(_dereq_,module,exports){ +/** + * Copyright 2004-present Facebook. All Rights Reserved. + */ +/*global exports:true*/ + +/** + * Implements ES7 object spread property. + * https://gist.github.com/sebmarkbage/aa849c7973cb4452c547 + * + * { ...a, x: 1 } + * + * Object.assign({}, a, {x: 1 }) + * + */ + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); + +function visitObjectLiteralSpread(traverse, node, path, state) { + utils.catchup(node.range[0], state); + + utils.append('Object.assign({', state); + + // Skip the original { + utils.move(node.range[0] + 1, state); + + var previousWasSpread = false; + + for (var i = 0; i < node.properties.length; i++) { + var property = node.properties[i]; + if (property.type === Syntax.SpreadProperty) { + + // Close the previous object or initial object + if (!previousWasSpread) { + utils.append('}', state); + } + + if (i === 0) { + // Normally there will be a comma when we catch up, but not before + // the first property. + utils.append(',', state); + } + + utils.catchup(property.range[0], state); + + // skip ... + utils.move(property.range[0] + 3, state); + + traverse(property.argument, path, state); + + utils.catchup(property.range[1], state); + + previousWasSpread = true; + + } else { + + utils.catchup(property.range[0], state); + + if (previousWasSpread) { + utils.append('{', state); + } + + traverse(property, path, state); + + utils.catchup(property.range[1], state); + + previousWasSpread = false; + + } + } + + // Strip any non-whitespace between the last item and the end. + // We only catch up on whitespace so that we ignore any trailing commas which + // are stripped out for IE8 support. Unfortunately, this also strips out any + // trailing comments. + utils.catchupWhiteSpace(node.range[1] - 1, state); + + // Skip the trailing } + utils.move(node.range[1], state); + + if (!previousWasSpread) { + utils.append('}', state); + } + + utils.append(')', state); + return false; +} + +visitObjectLiteralSpread.test = function(node, path, state) { + if (node.type !== Syntax.ObjectExpression) { + return false; + } + // Tight loop optimization + var hasAtLeastOneSpreadProperty = false; + for (var i = 0; i < node.properties.length; i++) { + var property = node.properties[i]; + if (property.type === Syntax.SpreadProperty) { + hasAtLeastOneSpreadProperty = true; + } else if (property.kind !== 'init') { + return false; + } + } + return hasAtLeastOneSpreadProperty; +}; + +exports.visitorList = [ + visitObjectLiteralSpread +]; + +},{"../src/utils":23,"esprima-fb":9}],34:[function(_dereq_,module,exports){ +/** + * Copyright 2014 Facebook, Inc. + * + * 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. + */ + +var KEYWORDS = [ + 'break', 'do', 'in', 'typeof', 'case', 'else', 'instanceof', 'var', 'catch', + 'export', 'new', 'void', 'class', 'extends', 'return', 'while', 'const', + 'finally', 'super', 'with', 'continue', 'for', 'switch', 'yield', 'debugger', + 'function', 'this', 'default', 'if', 'throw', 'delete', 'import', 'try' +]; + +var FUTURE_RESERVED_WORDS = [ + 'enum', 'await', 'implements', 'package', 'protected', 'static', 'interface', + 'private', 'public' +]; + +var LITERALS = [ + 'null', + 'true', + 'false' +]; + +// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-reserved-words +var RESERVED_WORDS = [].concat( + KEYWORDS, + FUTURE_RESERVED_WORDS, + LITERALS +); + +var reservedWordsMap = Object.create(null); +RESERVED_WORDS.forEach(function(k) { + reservedWordsMap[k] = true; +}); + +/** + * This list should not grow as new reserved words are introdued. This list is + * of words that need to be quoted because ES3-ish browsers do not allow their + * use as identifier names. + */ +var ES3_FUTURE_RESERVED_WORDS = [ + 'enum', 'implements', 'package', 'protected', 'static', 'interface', + 'private', 'public' +]; + +var ES3_RESERVED_WORDS = [].concat( + KEYWORDS, + ES3_FUTURE_RESERVED_WORDS, + LITERALS +); + +var es3ReservedWordsMap = Object.create(null); +ES3_RESERVED_WORDS.forEach(function(k) { + es3ReservedWordsMap[k] = true; +}); + +exports.isReservedWord = function(word) { + return !!reservedWordsMap[word]; +}; + +exports.isES3ReservedWord = function(word) { + return !!es3ReservedWordsMap[word]; +}; + +},{}],35:[function(_dereq_,module,exports){ +/** + * Copyright 2014 Facebook, Inc. + * + * 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. + * + */ +/*global exports:true*/ + +var Syntax = _dereq_('esprima-fb').Syntax; +var utils = _dereq_('../src/utils'); +var reserverdWordsHelper = _dereq_('./reserved-words-helper'); + +/** + * Code adapted from https://github.com/spicyj/es3ify + * The MIT License (MIT) + * Copyright (c) 2014 Ben Alpert + */ + +function visitProperty(traverse, node, path, state) { + utils.catchup(node.key.range[0], state); + utils.append('"', state); + utils.catchup(node.key.range[1], state); + utils.append('"', state); + utils.catchup(node.value.range[0], state); + traverse(node.value, path, state); + return false; +} + +visitProperty.test = function(node) { + return node.type === Syntax.Property && + node.key.type === Syntax.Identifier && + !node.method && + !node.shorthand && + !node.computed && + reserverdWordsHelper.isES3ReservedWord(node.key.name); +}; + +function visitMemberExpression(traverse, node, path, state) { + traverse(node.object, path, state); + utils.catchup(node.property.range[0] - 1, state); + utils.append('[', state); + utils.catchupWhiteSpace(node.property.range[0], state); + utils.append('"', state); + utils.catchup(node.property.range[1], state); + utils.append('"]', state); + return false; +} + +visitMemberExpression.test = function(node) { + return node.type === Syntax.MemberExpression && + node.property.type === Syntax.Identifier && + reserverdWordsHelper.isES3ReservedWord(node.property.name); +}; + +exports.visitorList = [ + visitProperty, + visitMemberExpression +]; + +},{"../src/utils":23,"./reserved-words-helper":34,"esprima-fb":9}],36:[function(_dereq_,module,exports){ +var esprima = _dereq_('esprima-fb'); +var utils = _dereq_('../src/utils'); + +var Syntax = esprima.Syntax; + +function _isFunctionNode(node) { + return node.type === Syntax.FunctionDeclaration + || node.type === Syntax.FunctionExpression + || node.type === Syntax.ArrowFunctionExpression; +} + +function visitClassProperty(traverse, node, path, state) { + utils.catchup(node.range[0], state); + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitClassProperty.test = function(node, path, state) { + return node.type === Syntax.ClassProperty; +}; + +function visitTypeAlias(traverse, node, path, state) { + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitTypeAlias.test = function(node, path, state) { + return node.type === Syntax.TypeAlias; +}; + +function visitTypeCast(traverse, node, path, state) { + path.unshift(node); + traverse(node.expression, path, state); + path.shift(); + + utils.catchup(node.typeAnnotation.range[0], state); + utils.catchupWhiteOut(node.typeAnnotation.range[1], state); + return false; +} +visitTypeCast.test = function(node, path, state) { + return node.type === Syntax.TypeCastExpression; +}; + +function visitInterfaceDeclaration(traverse, node, path, state) { + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitInterfaceDeclaration.test = function(node, path, state) { + return node.type === Syntax.InterfaceDeclaration; +}; + +function visitDeclare(traverse, node, path, state) { + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitDeclare.test = function(node, path, state) { + switch (node.type) { + case Syntax.DeclareVariable: + case Syntax.DeclareFunction: + case Syntax.DeclareClass: + case Syntax.DeclareModule: + return true; + } + return false; +}; + +function visitFunctionParametricAnnotation(traverse, node, path, state) { + utils.catchup(node.range[0], state); + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitFunctionParametricAnnotation.test = function(node, path, state) { + return node.type === Syntax.TypeParameterDeclaration + && path[0] + && _isFunctionNode(path[0]) + && node === path[0].typeParameters; +}; + +function visitFunctionReturnAnnotation(traverse, node, path, state) { + utils.catchup(node.range[0], state); + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitFunctionReturnAnnotation.test = function(node, path, state) { + return path[0] && _isFunctionNode(path[0]) && node === path[0].returnType; +}; + +function visitOptionalFunctionParameterAnnotation(traverse, node, path, state) { + utils.catchup(node.range[0] + node.name.length, state); + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitOptionalFunctionParameterAnnotation.test = function(node, path, state) { + return node.type === Syntax.Identifier + && node.optional + && path[0] + && _isFunctionNode(path[0]); +}; + +function visitTypeAnnotatedIdentifier(traverse, node, path, state) { + utils.catchup(node.typeAnnotation.range[0], state); + utils.catchupWhiteOut(node.typeAnnotation.range[1], state); + return false; +} +visitTypeAnnotatedIdentifier.test = function(node, path, state) { + return node.type === Syntax.Identifier && node.typeAnnotation; +}; + +function visitTypeAnnotatedObjectOrArrayPattern(traverse, node, path, state) { + utils.catchup(node.typeAnnotation.range[0], state); + utils.catchupWhiteOut(node.typeAnnotation.range[1], state); + return false; +} +visitTypeAnnotatedObjectOrArrayPattern.test = function(node, path, state) { + var rightType = node.type === Syntax.ObjectPattern + || node.type === Syntax.ArrayPattern; + return rightType && node.typeAnnotation; +}; + +/** + * Methods cause trouble, since esprima parses them as a key/value pair, where + * the location of the value starts at the method body. For example + * { bar(x:number,...y:Array):number {} } + * is parsed as + * { bar: function(x: number, ...y:Array): number {} } + * except that the location of the FunctionExpression value is 40-something, + * which is the location of the function body. This means that by the time we + * visit the params, rest param, and return type organically, we've already + * catchup()'d passed them. + */ +function visitMethod(traverse, node, path, state) { + path.unshift(node); + traverse(node.key, path, state); + + path.unshift(node.value); + traverse(node.value.params, path, state); + node.value.rest && traverse(node.value.rest, path, state); + node.value.returnType && traverse(node.value.returnType, path, state); + traverse(node.value.body, path, state); + + path.shift(); + + path.shift(); + return false; +} + +visitMethod.test = function(node, path, state) { + return (node.type === "Property" && (node.method || node.kind === "set" || node.kind === "get")) + || (node.type === "MethodDefinition"); +}; + +function visitImportType(traverse, node, path, state) { + utils.catchupWhiteOut(node.range[1], state); + return false; +} +visitImportType.test = function(node, path, state) { + return node.type === 'ImportDeclaration' + && node.isType; +}; + +exports.visitorList = [ + visitClassProperty, + visitDeclare, + visitImportType, + visitInterfaceDeclaration, + visitFunctionParametricAnnotation, + visitFunctionReturnAnnotation, + visitMethod, + visitOptionalFunctionParameterAnnotation, + visitTypeAlias, + visitTypeCast, + visitTypeAnnotatedIdentifier, + visitTypeAnnotatedObjectOrArrayPattern +]; + +},{"../src/utils":23,"esprima-fb":9}],37:[function(_dereq_,module,exports){ +/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +/*global exports:true*/ +'use strict'; +var Syntax = _dereq_('jstransform').Syntax; +var utils = _dereq_('jstransform/src/utils'); + +function renderJSXLiteral(object, isLast, state, start, end) { + var lines = object.value.split(/\r\n|\n|\r/); + + if (start) { + utils.append(start, state); + } + + var lastNonEmptyLine = 0; + + lines.forEach(function(line, index) { + if (line.match(/[^ \t]/)) { + lastNonEmptyLine = index; + } + }); + + lines.forEach(function(line, index) { + var isFirstLine = index === 0; + var isLastLine = index === lines.length - 1; + var isLastNonEmptyLine = index === lastNonEmptyLine; + + // replace rendered whitespace tabs with spaces + var trimmedLine = line.replace(/\t/g, ' '); + + // trim whitespace touching a newline + if (!isFirstLine) { + trimmedLine = trimmedLine.replace(/^[ ]+/, ''); + } + if (!isLastLine) { + trimmedLine = trimmedLine.replace(/[ ]+$/, ''); + } + + if (!isFirstLine) { + utils.append(line.match(/^[ \t]*/)[0], state); + } + + if (trimmedLine || isLastNonEmptyLine) { + utils.append( + JSON.stringify(trimmedLine) + + (!isLastNonEmptyLine ? ' + \' \' +' : ''), + state); + + if (isLastNonEmptyLine) { + if (end) { + utils.append(end, state); + } + if (!isLast) { + utils.append(', ', state); + } + } + + // only restore tail whitespace if line had literals + if (trimmedLine && !isLastLine) { + utils.append(line.match(/[ \t]*$/)[0], state); + } + } + + if (!isLastLine) { + utils.append('\n', state); + } + }); + + utils.move(object.range[1], state); +} + +function renderJSXExpressionContainer(traverse, object, isLast, path, state) { + // Plus 1 to skip `{`. + utils.move(object.range[0] + 1, state); + utils.catchup(object.expression.range[0], state); + traverse(object.expression, path, state); + + if (!isLast && object.expression.type !== Syntax.JSXEmptyExpression) { + // If we need to append a comma, make sure to do so after the expression. + utils.catchup(object.expression.range[1], state, trimLeft); + utils.append(', ', state); + } + + // Minus 1 to skip `}`. + utils.catchup(object.range[1] - 1, state, trimLeft); + utils.move(object.range[1], state); + return false; +} + +function quoteAttrName(attr) { + // Quote invalid JS identifiers. + if (!/^[a-z_$][a-z\d_$]*$/i.test(attr)) { + return '"' + attr + '"'; + } + return attr; +} + +function trimLeft(value) { + return value.replace(/^[ ]+/, ''); +} + +exports.renderJSXExpressionContainer = renderJSXExpressionContainer; +exports.renderJSXLiteral = renderJSXLiteral; +exports.quoteAttrName = quoteAttrName; +exports.trimLeft = trimLeft; + +},{"jstransform":22,"jstransform/src/utils":23}],38:[function(_dereq_,module,exports){ +/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +/*global exports:true*/ +'use strict'; + +var Syntax = _dereq_('jstransform').Syntax; +var utils = _dereq_('jstransform/src/utils'); + +var renderJSXExpressionContainer = + _dereq_('./jsx').renderJSXExpressionContainer; +var renderJSXLiteral = _dereq_('./jsx').renderJSXLiteral; +var quoteAttrName = _dereq_('./jsx').quoteAttrName; + +var trimLeft = _dereq_('./jsx').trimLeft; + +/** + * Customized desugar processor for React JSX. Currently: + * + * => React.createElement(X, null) + * => React.createElement(X, {prop: '1'}, null) + * => React.createElement(X, {prop:'2'}, + * React.createElement(Y, null) + * ) + *
=> React.createElement("div", null) + */ + +/** + * Removes all non-whitespace/parenthesis characters + */ +var reNonWhiteParen = /([^\s\(\)])/g; +function stripNonWhiteParen(value) { + return value.replace(reNonWhiteParen, ''); +} + +var tagConvention = /^[a-z]|\-/; +function isTagName(name) { + return tagConvention.test(name); +} + +function visitReactTag(traverse, object, path, state) { + var openingElement = object.openingElement; + var nameObject = openingElement.name; + var attributesObject = openingElement.attributes; + + utils.catchup(openingElement.range[0], state, trimLeft); + + if (nameObject.type === Syntax.JSXNamespacedName && nameObject.namespace) { + throw new Error('Namespace tags are not supported. ReactJSX is not XML.'); + } + + // We assume that the React runtime is already in scope + utils.append('React.createElement(', state); + + if (nameObject.type === Syntax.JSXIdentifier && isTagName(nameObject.name)) { + utils.append('"' + nameObject.name + '"', state); + utils.move(nameObject.range[1], state); + } else { + // Use utils.catchup in this case so we can easily handle + // JSXMemberExpressions which look like Foo.Bar.Baz. This also handles + // JSXIdentifiers that aren't fallback tags. + utils.move(nameObject.range[0], state); + utils.catchup(nameObject.range[1], state); + } + + utils.append(', ', state); + + var hasAttributes = attributesObject.length; + + var hasAtLeastOneSpreadProperty = attributesObject.some(function(attr) { + return attr.type === Syntax.JSXSpreadAttribute; + }); + + // if we don't have any attributes, pass in null + if (hasAtLeastOneSpreadProperty) { + utils.append('React.__spread({', state); + } else if (hasAttributes) { + utils.append('{', state); + } else { + utils.append('null', state); + } + + // keep track of if the previous attribute was a spread attribute + var previousWasSpread = false; + + // write attributes + attributesObject.forEach(function(attr, index) { + var isLast = index === attributesObject.length - 1; + + if (attr.type === Syntax.JSXSpreadAttribute) { + // Close the previous object or initial object + if (!previousWasSpread) { + utils.append('}, ', state); + } + + // Move to the expression start, ignoring everything except parenthesis + // and whitespace. + utils.catchup(attr.range[0], state, stripNonWhiteParen); + // Plus 1 to skip `{`. + utils.move(attr.range[0] + 1, state); + utils.catchup(attr.argument.range[0], state, stripNonWhiteParen); + + traverse(attr.argument, path, state); + + utils.catchup(attr.argument.range[1], state); + + // Move to the end, ignoring parenthesis and the closing `}` + utils.catchup(attr.range[1] - 1, state, stripNonWhiteParen); + + if (!isLast) { + utils.append(', ', state); + } + + utils.move(attr.range[1], state); + + previousWasSpread = true; + + return; + } + + // If the next attribute is a spread, we're effective last in this object + if (!isLast) { + isLast = attributesObject[index + 1].type === Syntax.JSXSpreadAttribute; + } + + if (attr.name.namespace) { + throw new Error( + 'Namespace attributes are not supported. ReactJSX is not XML.'); + } + var name = attr.name.name; + + utils.catchup(attr.range[0], state, trimLeft); + + if (previousWasSpread) { + utils.append('{', state); + } + + utils.append(quoteAttrName(name), state); + utils.append(': ', state); + + if (!attr.value) { + state.g.buffer += 'true'; + state.g.position = attr.name.range[1]; + if (!isLast) { + utils.append(', ', state); + } + } else { + utils.move(attr.name.range[1], state); + // Use catchupNewlines to skip over the '=' in the attribute + utils.catchupNewlines(attr.value.range[0], state); + if (attr.value.type === Syntax.Literal) { + renderJSXLiteral(attr.value, isLast, state); + } else { + renderJSXExpressionContainer(traverse, attr.value, isLast, path, state); + } + } + + utils.catchup(attr.range[1], state, trimLeft); + + previousWasSpread = false; + + }); + + if (!openingElement.selfClosing) { + utils.catchup(openingElement.range[1] - 1, state, trimLeft); + utils.move(openingElement.range[1], state); + } + + if (hasAttributes && !previousWasSpread) { + utils.append('}', state); + } + + if (hasAtLeastOneSpreadProperty) { + utils.append(')', state); + } + + // filter out whitespace + var childrenToRender = object.children.filter(function(child) { + return !(child.type === Syntax.Literal + && typeof child.value === 'string' + && child.value.match(/^[ \t]*[\r\n][ \t\r\n]*$/)); + }); + if (childrenToRender.length > 0) { + var lastRenderableIndex; + + childrenToRender.forEach(function(child, index) { + if (child.type !== Syntax.JSXExpressionContainer || + child.expression.type !== Syntax.JSXEmptyExpression) { + lastRenderableIndex = index; + } + }); + + if (lastRenderableIndex !== undefined) { + utils.append(', ', state); + } + + childrenToRender.forEach(function(child, index) { + utils.catchup(child.range[0], state, trimLeft); + + var isLast = index >= lastRenderableIndex; + + if (child.type === Syntax.Literal) { + renderJSXLiteral(child, isLast, state); + } else if (child.type === Syntax.JSXExpressionContainer) { + renderJSXExpressionContainer(traverse, child, isLast, path, state); + } else { + traverse(child, path, state); + if (!isLast) { + utils.append(', ', state); + } + } + + utils.catchup(child.range[1], state, trimLeft); + }); + } + + if (openingElement.selfClosing) { + // everything up to /> + utils.catchup(openingElement.range[1] - 2, state, trimLeft); + utils.move(openingElement.range[1], state); + } else { + // everything up to + utils.catchup(object.closingElement.range[0], state, trimLeft); + utils.move(object.closingElement.range[1], state); + } + + utils.append(')', state); + return false; +} + +visitReactTag.test = function(object, path, state) { + return object.type === Syntax.JSXElement; +}; + +exports.visitorList = [ + visitReactTag +]; + +},{"./jsx":37,"jstransform":22,"jstransform/src/utils":23}],39:[function(_dereq_,module,exports){ +/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +/*global exports:true*/ +'use strict'; + +var Syntax = _dereq_('jstransform').Syntax; +var utils = _dereq_('jstransform/src/utils'); + +function addDisplayName(displayName, object, state) { + if (object && + object.type === Syntax.CallExpression && + object.callee.type === Syntax.MemberExpression && + object.callee.object.type === Syntax.Identifier && + object.callee.object.name === 'React' && + object.callee.property.type === Syntax.Identifier && + object.callee.property.name === 'createClass' && + object.arguments.length === 1 && + object.arguments[0].type === Syntax.ObjectExpression) { + // Verify that the displayName property isn't already set + var properties = object.arguments[0].properties; + var safe = properties.every(function(property) { + var value = property.key.type === Syntax.Identifier ? + property.key.name : + property.key.value; + return value !== 'displayName'; + }); + + if (safe) { + utils.catchup(object.arguments[0].range[0] + 1, state); + utils.append('displayName: "' + displayName + '",', state); + } + } +} + +/** + * Transforms the following: + * + * var MyComponent = React.createClass({ + * render: ... + * }); + * + * into: + * + * var MyComponent = React.createClass({ + * displayName: 'MyComponent', + * render: ... + * }); + * + * Also catches: + * + * MyComponent = React.createClass(...); + * exports.MyComponent = React.createClass(...); + * module.exports = {MyComponent: React.createClass(...)}; + */ +function visitReactDisplayName(traverse, object, path, state) { + var left, right; + + if (object.type === Syntax.AssignmentExpression) { + left = object.left; + right = object.right; + } else if (object.type === Syntax.Property) { + left = object.key; + right = object.value; + } else if (object.type === Syntax.VariableDeclarator) { + left = object.id; + right = object.init; + } + + if (left && left.type === Syntax.MemberExpression) { + left = left.property; + } + if (left && left.type === Syntax.Identifier) { + addDisplayName(left.name, right, state); + } +} + +visitReactDisplayName.test = function(object, path, state) { + return ( + object.type === Syntax.AssignmentExpression || + object.type === Syntax.Property || + object.type === Syntax.VariableDeclarator + ); +}; + +exports.visitorList = [ + visitReactDisplayName +]; + +},{"jstransform":22,"jstransform/src/utils":23}],40:[function(_dereq_,module,exports){ +/*global exports:true*/ + +'use strict'; + +var es6ArrowFunctions = + _dereq_('jstransform/visitors/es6-arrow-function-visitors'); +var es6Classes = _dereq_('jstransform/visitors/es6-class-visitors'); +var es6Destructuring = + _dereq_('jstransform/visitors/es6-destructuring-visitors'); +var es6ObjectConciseMethod = + _dereq_('jstransform/visitors/es6-object-concise-method-visitors'); +var es6ObjectShortNotation = + _dereq_('jstransform/visitors/es6-object-short-notation-visitors'); +var es6RestParameters = _dereq_('jstransform/visitors/es6-rest-param-visitors'); +var es6Templates = _dereq_('jstransform/visitors/es6-template-visitors'); +var es6CallSpread = + _dereq_('jstransform/visitors/es6-call-spread-visitors'); +var es7SpreadProperty = + _dereq_('jstransform/visitors/es7-spread-property-visitors'); +var react = _dereq_('./transforms/react'); +var reactDisplayName = _dereq_('./transforms/reactDisplayName'); +var reservedWords = _dereq_('jstransform/visitors/reserved-words-visitors'); + +/** + * Map from transformName => orderedListOfVisitors. + */ +var transformVisitors = { + 'es6-arrow-functions': es6ArrowFunctions.visitorList, + 'es6-classes': es6Classes.visitorList, + 'es6-destructuring': es6Destructuring.visitorList, + 'es6-object-concise-method': es6ObjectConciseMethod.visitorList, + 'es6-object-short-notation': es6ObjectShortNotation.visitorList, + 'es6-rest-params': es6RestParameters.visitorList, + 'es6-templates': es6Templates.visitorList, + 'es6-call-spread': es6CallSpread.visitorList, + 'es7-spread-property': es7SpreadProperty.visitorList, + 'react': react.visitorList.concat(reactDisplayName.visitorList), + 'reserved-words': reservedWords.visitorList +}; + +var transformSets = { + 'harmony': [ + 'es6-arrow-functions', + 'es6-object-concise-method', + 'es6-object-short-notation', + 'es6-classes', + 'es6-rest-params', + 'es6-templates', + 'es6-destructuring', + 'es6-call-spread', + 'es7-spread-property' + ], + 'es3': [ + 'reserved-words' + ], + 'react': [ + 'react' + ] +}; + +/** + * Specifies the order in which each transform should run. + */ +var transformRunOrder = [ + 'reserved-words', + 'es6-arrow-functions', + 'es6-object-concise-method', + 'es6-object-short-notation', + 'es6-classes', + 'es6-rest-params', + 'es6-templates', + 'es6-destructuring', + 'es6-call-spread', + 'es7-spread-property', + 'react' +]; + +/** + * Given a list of transform names, return the ordered list of visitors to be + * passed to the transform() function. + * + * @param {array?} excludes + * @return {array} + */ +function getAllVisitors(excludes) { + var ret = []; + for (var i = 0, il = transformRunOrder.length; i < il; i++) { + if (!excludes || excludes.indexOf(transformRunOrder[i]) === -1) { + ret = ret.concat(transformVisitors[transformRunOrder[i]]); + } + } + return ret; +} + +/** + * Given a list of visitor set names, return the ordered list of visitors to be + * passed to jstransform. + * + * @param {array} + * @return {array} + */ +function getVisitorsBySet(sets) { + var visitorsToInclude = sets.reduce(function(visitors, set) { + if (!transformSets.hasOwnProperty(set)) { + throw new Error('Unknown visitor set: ' + set); + } + transformSets[set].forEach(function(visitor) { + visitors[visitor] = true; + }); + return visitors; + }, {}); + + var visitorList = []; + for (var i = 0; i < transformRunOrder.length; i++) { + if (visitorsToInclude.hasOwnProperty(transformRunOrder[i])) { + visitorList = visitorList.concat(transformVisitors[transformRunOrder[i]]); + } + } + + return visitorList; +} + +exports.getVisitorsBySet = getVisitorsBySet; +exports.getAllVisitors = getAllVisitors; +exports.transformVisitors = transformVisitors; + +},{"./transforms/react":38,"./transforms/reactDisplayName":39,"jstransform/visitors/es6-arrow-function-visitors":24,"jstransform/visitors/es6-call-spread-visitors":25,"jstransform/visitors/es6-class-visitors":26,"jstransform/visitors/es6-destructuring-visitors":27,"jstransform/visitors/es6-object-concise-method-visitors":28,"jstransform/visitors/es6-object-short-notation-visitors":29,"jstransform/visitors/es6-rest-param-visitors":30,"jstransform/visitors/es6-template-visitors":31,"jstransform/visitors/es7-spread-property-visitors":33,"jstransform/visitors/reserved-words-visitors":35}],41:[function(_dereq_,module,exports){ +/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +'use strict'; +/*eslint-disable no-undef*/ +var Buffer = _dereq_('buffer').Buffer; + +function inlineSourceMap(sourceMap, sourceCode, sourceFilename) { + // This can be used with a sourcemap that has already has toJSON called on it. + // Check first. + var json = sourceMap; + if (typeof sourceMap.toJSON === 'function') { + json = sourceMap.toJSON(); + } + json.sources = [sourceFilename]; + json.sourcesContent = [sourceCode]; + var base64 = Buffer(JSON.stringify(json)).toString('base64'); + return '//# sourceMappingURL=data:application/json;base64,' + base64; +} + +module.exports = inlineSourceMap; + +},{"buffer":3}]},{},[1])(1) +}); \ No newline at end of file diff --git a/public/javascripts/wechat/browser.min.js b/public/javascripts/wechat/browser.min.js new file mode 100644 index 000000000..7566e1a59 --- /dev/null +++ b/public/javascripts/wechat/browser.min.js @@ -0,0 +1,44 @@ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.babel=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o=0){var next_line=out.indexOf("\n",idx+1);out=out.substring(next_line+1)}this.stack=out}}};util.inherits(assert.AssertionError,Error);function replacer(key,value){if(util.isUndefined(value)){return""+value}if(util.isNumber(value)&&!isFinite(value)){return value.toString()}if(util.isFunction(value)||util.isRegExp(value)){return value.toString()}return value}function truncate(s,n){if(util.isString(s)){return s.length=0;i--){if(ka[i]!=kb[i])return false}for(i=ka.length-1;i>=0;i--){key=ka[i];if(!_deepEqual(a[key],b[key]))return false}return true}assert.notDeepEqual=function notDeepEqual(actual,expected,message){if(_deepEqual(actual,expected)){fail(actual,expected,message,"notDeepEqual",assert.notDeepEqual)}};assert.strictEqual=function strictEqual(actual,expected,message){if(actual!==expected){fail(actual,expected,message,"===",assert.strictEqual)}};assert.notStrictEqual=function notStrictEqual(actual,expected,message){if(actual===expected){fail(actual,expected,message,"!==",assert.notStrictEqual)}};function expectedException(actual,expected){if(!actual||!expected){return false}if(Object.prototype.toString.call(expected)=="[object RegExp]"){return expected.test(actual)}else if(actual instanceof expected){return true}else if(expected.call({},actual)===true){return true}return false}function _throws(shouldThrow,block,expected,message){var actual;if(util.isString(expected)){message=expected;expected=null}try{block()}catch(e){actual=e}message=(expected&&expected.name?" ("+expected.name+").":".")+(message?" "+message:".");if(shouldThrow&&!actual){fail(actual,expected,"Missing expected exception"+message)}if(!shouldThrow&&expectedException(actual,expected)){fail(actual,expected,"Got unwanted exception"+message)}if(shouldThrow&&actual&&expected&&!expectedException(actual,expected)||!shouldThrow&&actual){throw actual}}assert.throws=function(block,error,message){_throws.apply(this,[true].concat(pSlice.call(arguments)))};assert.doesNotThrow=function(block,message){_throws.apply(this,[false].concat(pSlice.call(arguments)))};assert.ifError=function(err){if(err){throw err}};var objectKeys=Object.keys||function(obj){var keys=[];for(var key in obj){if(hasOwn.call(obj,key))keys.push(key)}return keys}},{"util/":30}],3:[function(require,module,exports){arguments[4][1][0].apply(exports,arguments)},{dup:1}],4:[function(require,module,exports){var base64=require("base64-js");var ieee754=require("ieee754");var isArray=require("is-array");exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;Buffer.poolSize=8192;var rootParent={};Buffer.TYPED_ARRAY_SUPPORT=function(){function Bar(){}try{var arr=new Uint8Array(1);arr.foo=function(){return 42};arr.constructor=Bar;return arr.foo()===42&&arr.constructor===Bar&&typeof arr.subarray==="function"&&arr.subarray(1,1).byteLength===0}catch(e){return false}}();function kMaxLength(){return Buffer.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function Buffer(arg){if(!(this instanceof Buffer)){if(arguments.length>1)return new Buffer(arg,arguments[1]);return new Buffer(arg)}this.length=0;this.parent=undefined;if(typeof arg==="number"){return fromNumber(this,arg)}if(typeof arg==="string"){return fromString(this,arg,arguments.length>1?arguments[1]:"utf8")}return fromObject(this,arg)}function fromNumber(that,length){that=allocate(that,length<0?0:checked(length)|0);if(!Buffer.TYPED_ARRAY_SUPPORT){for(var i=0;i>>1;if(fromPool)that.parent=rootParent;return that}function checked(length){if(length>=kMaxLength()){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+kMaxLength().toString(16)+" bytes")}return length|0}function SlowBuffer(subject,encoding){if(!(this instanceof SlowBuffer))return new SlowBuffer(subject,encoding);var buf=new Buffer(subject,encoding);delete buf.parent;return buf}Buffer.isBuffer=function isBuffer(b){return!!(b!=null&&b._isBuffer)};Buffer.compare=function compare(a,b){if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError("Arguments must be Buffers")}if(a===b)return 0;var x=a.length;var y=b.length;var i=0;var len=Math.min(x,y);while(i>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase)return utf8ToBytes(string).length;encoding=(""+encoding).toLowerCase();loweredCase=true}}}Buffer.byteLength=byteLength;Buffer.prototype.length=undefined;Buffer.prototype.parent=undefined;function slowToString(encoding,start,end){var loweredCase=false;start=start|0;end=end===undefined||end===Infinity?this.length:end|0;if(!encoding)encoding="utf8";if(start<0)start=0;if(end>this.length)end=this.length;if(end<=start)return"";while(true){switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"binary":return binarySlice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase();loweredCase=true}}}Buffer.prototype.toString=function toString(){var length=this.length|0;if(length===0)return"";if(arguments.length===0)return utf8Slice(this,0,length);return slowToString.apply(this,arguments)};Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return true;return Buffer.compare(this,b)===0};Buffer.prototype.inspect=function inspect(){var str="";var max=exports.INSPECT_MAX_BYTES;if(this.length>0){str=this.toString("hex",0,max).match(/.{2}/g).join(" ");if(this.length>max)str+=" ... "}return""};Buffer.prototype.compare=function compare(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return 0;return Buffer.compare(this,b)};Buffer.prototype.indexOf=function indexOf(val,byteOffset){if(byteOffset>2147483647)byteOffset=2147483647;else if(byteOffset<-2147483648)byteOffset=-2147483648;byteOffset>>=0;if(this.length===0)return-1;if(byteOffset>=this.length)return-1;if(byteOffset<0)byteOffset=Math.max(this.length+byteOffset,0);if(typeof val==="string"){if(val.length===0)return-1;return String.prototype.indexOf.call(this,val,byteOffset)}if(Buffer.isBuffer(val)){return arrayIndexOf(this,val,byteOffset)}if(typeof val==="number"){if(Buffer.TYPED_ARRAY_SUPPORT&&Uint8Array.prototype.indexOf==="function"){return Uint8Array.prototype.indexOf.call(this,val,byteOffset)}return arrayIndexOf(this,[val],byteOffset)}function arrayIndexOf(arr,val,byteOffset){var foundIndex=-1;for(var i=0;byteOffset+iremaining){length=remaining}}var strLen=string.length;if(strLen%2!==0)throw new Error("Invalid hex string");if(length>strLen/2){length=strLen/2}for(var i=0;iremaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError("attempt to write outside buffer bounds")}if(!encoding)encoding="utf8";var loweredCase=false;for(;;){switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":return asciiWrite(this,string,offset,length);case"binary":return binaryWrite(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase();loweredCase=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf)}else{return base64.fromByteArray(buf.slice(start,end))}}function utf8Slice(buf,start,end){var res="";var tmp="";end=Math.min(buf.length,end);for(var i=start;ilen)end=len;var out="";for(var i=start;ilen){start=len}if(end<0){end+=len;if(end<0)end=0}else if(end>len){end=len}if(endlength)throw new RangeError("Trying to access beyond buffer length")}Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i0&&(mul*=256)){val+=this[offset+--byteLength]*mul}return val};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);return this[offset]};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*16777216+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8)};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError("buffer must be a Buffer instance");if(value>max||valuebuf.length)throw new RangeError("index out of range")}Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkInt(this,value,offset,byteLength,Math.pow(2,8*byteLength),0);var mul=1;var i=0;this[offset]=value&255;while(++i=0&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,255,0);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);this[offset]=value;return offset+1};function objectWriteUInt16(buf,value,offset,littleEndian){if(value<0)value=65535+value+1;for(var i=0,j=Math.min(buf.length-offset,2);i>>(littleEndian?i:1-i)*8}}Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value}else{objectWriteUInt16(this,value,offset,false)}return offset+2};function objectWriteUInt32(buf,value,offset,littleEndian){if(value<0)value=4294967295+value+1;for(var i=0,j=Math.min(buf.length-offset,4);i>>(littleEndian?i:3-i)*8&255}}Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value}else{objectWriteUInt32(this,value,offset,false)}return offset+4};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=0;var mul=1;var sub=value<0?1:0;this[offset]=value&255;while(++i>0)-sub&255}return offset+byteLength};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=byteLength-1;var mul=1;var sub=value<0?1:0;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,127,-128);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);if(value<0)value=255+value+1;this[offset]=value;return offset+1};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value}else{objectWriteUInt16(this,value,offset,false)}return offset+2};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(value<0)value=4294967295+value+1;if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value}else{objectWriteUInt32(this,value,offset,false)}return offset+4};function checkIEEE754(buf,value,offset,ext,max,min){if(value>max||valuebuf.length)throw new RangeError("index out of range");if(offset<0)throw new RangeError("index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,4,3.4028234663852886e38,-3.4028234663852886e38)}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert)};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert)};function writeDouble(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,8,1.7976931348623157e308,-1.7976931348623157e308)}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert)};Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end=this.length)throw new RangeError("sourceStart out of bounds");if(end<0)throw new RangeError("sourceEnd out of bounds");if(end>this.length)end=this.length;if(target.length-targetStart=0;i--){target[i+targetStart]=this[i+start]}}else if(len<1e3||!Buffer.TYPED_ARRAY_SUPPORT){for(i=0;i=this.length)throw new RangeError("start out of bounds");if(end<0||end>this.length)throw new RangeError("end out of bounds");var i;if(typeof value==="number"){for(i=start;i55295&&codePoint<57344){if(leadSurrogate){if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}else{codePoint=leadSurrogate-55296<<10|codePoint-56320|65536;leadSurrogate=null}}else{if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}else{leadSurrogate=codePoint;continue}}}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=null}if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<2097152){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function asciiToBytes(str){var byteArray=[];for(var i=0;i>8;lo=c%256;byteArray.push(lo);byteArray.push(hi)}return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i=dst.length||i>=src.length)break;dst[i+offset]=src[i]}return i}function decodeUtf8Char(str){try{return decodeURIComponent(str)}catch(err){return String.fromCharCode(65533)}}},{"base64-js":5,ieee754:6,"is-array":7}],5:[function(require,module,exports){var lookup="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";(function(exports){"use strict";var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var PLUS="+".charCodeAt(0);var SLASH="/".charCodeAt(0);var NUMBER="0".charCodeAt(0);var LOWER="a".charCodeAt(0);var UPPER="A".charCodeAt(0);var PLUS_URL_SAFE="-".charCodeAt(0);var SLASH_URL_SAFE="_".charCodeAt(0);function decode(elt){var code=elt.charCodeAt(0);if(code===PLUS||code===PLUS_URL_SAFE)return 62;if(code===SLASH||code===SLASH_URL_SAFE)return 63;if(code0){throw new Error("Invalid string. Length must be a multiple of 4")}var len=b64.length;placeHolders="="===b64.charAt(len-2)?2:"="===b64.charAt(len-1)?1:0;arr=new Arr(b64.length*3/4-placeHolders);l=placeHolders>0?b64.length-4:b64.length;var L=0;function push(v){arr[L++]=v}for(i=0,j=0;i>16);push((tmp&65280)>>8);push(tmp&255)}if(placeHolders===2){tmp=decode(b64.charAt(i))<<2|decode(b64.charAt(i+1))>>4;push(tmp&255)}else if(placeHolders===1){tmp=decode(b64.charAt(i))<<10|decode(b64.charAt(i+1))<<4|decode(b64.charAt(i+2))>>2;push(tmp>>8&255);push(tmp&255)}return arr}function uint8ToBase64(uint8){var i,extraBytes=uint8.length%3,output="",temp,length;function encode(num){return lookup.charAt(num)}function tripletToBase64(num){return encode(num>>18&63)+encode(num>>12&63)+encode(num>>6&63)+encode(num&63)}for(i=0,length=uint8.length-extraBytes;i>2);output+=encode(temp<<4&63);output+="==";break;case 2:temp=(uint8[uint8.length-2]<<8)+uint8[uint8.length-1];output+=encode(temp>>10);output+=encode(temp>>4&63);output+=encode(temp<<2&63);output+="=";break}return output}exports.toByteArray=b64ToByteArray;exports.fromByteArray=uint8ToBase64})(typeof exports==="undefined"?this.base64js={}:exports)},{}],6:[function(require,module,exports){exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8-mLen-1;var eMax=(1<>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],i+=d,nBits-=8){}if(e===0){e=1-eBias}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity}else{m=m+Math.pow(2,mLen);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2}if(e+eBias>=1){value+=rt/c}else{value+=rt*Math.pow(2,1-eBias)}if(value*c>=2){e++;c/=2}if(e+eBias>=eMax){m=0;e=eMax}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0}}for(;mLen>=8;buffer[offset+i]=m&255,i+=d,m/=256,mLen-=8){}e=e<0;buffer[offset+i]=e&255,i+=d,e/=256,eLen-=8){}buffer[offset+i-d]|=s*128}},{}],7:[function(require,module,exports){var isArray=Array.isArray;var str=Object.prototype.toString;module.exports=isArray||function(val){return!!val&&"[object Array]"==str.call(val)}},{}],8:[function(require,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};if(type==="error"){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er}throw TypeError('Uncaught, unspecified "error" event.')}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:len=arguments.length;args=new Array(len-1);for(i=1;i0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-->0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else{while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.listenerCount=function(emitter,type){var ret;if(!emitter._events||!emitter._events[type])ret=0;else if(isFunction(emitter._events[type]))ret=1;else ret=emitter._events[type].length;return ret};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],9:[function(require,module,exports){if(typeof Object.create==="function"){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}}},{}],10:[function(require,module,exports){module.exports=Array.isArray||function(arr){return Object.prototype.toString.call(arr)=="[object Array]"}},{}],11:[function(require,module,exports){(function(process){function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1)};exports.resolve=function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){continue}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=normalizeArray(filter(resolvedPath.split("/"),function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==="/";path=normalizeArray(filter(path.split("/"),function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path};exports.isAbsolute=function(path){return path.charAt(0)==="/"};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=="string"){throw new TypeError("Arguments to path.join must be strings")}return p}).join("/"))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i1){for(var i=1;i0){if(state.ended&&!addToFront){var e=new Error("stream.push() after EOF");stream.emit("error",e)}else if(state.endEmitted&&addToFront){var e=new Error("stream.unshift() after end event");stream.emit("error",e)}else{if(state.decoder&&!addToFront&&!encoding)chunk=state.decoder.write(chunk);if(!addToFront)state.reading=false;if(state.flowing&&state.length===0&&!state.sync){stream.emit("data",chunk);stream.read(0)}else{state.length+=state.objectMode?1:chunk.length;if(addToFront)state.buffer.unshift(chunk);else state.buffer.push(chunk);if(state.needReadable)emitReadable(stream)}maybeReadMore(stream,state)}}else if(!addToFront){state.reading=false}return needMoreData(state)}function needMoreData(state){return!state.ended&&(state.needReadable||state.length=MAX_HWM){n=MAX_HWM}else{n--;for(var p=1;p<32;p<<=1)n|=n>>p;n++}return n}function howMuchToRead(n,state){if(state.length===0&&state.ended)return 0;if(state.objectMode)return n===0?0:1;if(n===null||isNaN(n)){if(state.flowing&&state.buffer.length)return state.buffer[0].length;else return state.length}if(n<=0)return 0;if(n>state.highWaterMark)state.highWaterMark=roundUpToNextPowerOf2(n);if(n>state.length){if(!state.ended){state.needReadable=true;return 0}else{return state.length}}return n}Readable.prototype.read=function(n){debug("read",n);var state=this._readableState;var nOrig=n;if(typeof n!=="number"||n>0)state.emittedReadable=false;if(n===0&&state.needReadable&&(state.length>=state.highWaterMark||state.ended)){debug("read: emitReadable",state.length,state.ended);if(state.length===0&&state.ended)endReadable(this);else emitReadable(this);return null}n=howMuchToRead(n,state);if(n===0&&state.ended){if(state.length===0)endReadable(this);return null}var doRead=state.needReadable;debug("need readable",doRead);if(state.length===0||state.length-n0)ret=fromList(n,state);else ret=null;if(ret===null){state.needReadable=true;n=0}state.length-=n;if(state.length===0&&!state.ended)state.needReadable=true;if(nOrig!==n&&state.ended&&state.length===0)endReadable(this);if(ret!==null)this.emit("data",ret);return ret};function chunkInvalid(state,chunk){var er=null;if(!Buffer.isBuffer(chunk)&&typeof chunk!=="string"&&chunk!==null&&chunk!==undefined&&!state.objectMode){er=new TypeError("Invalid non-string/buffer chunk")}return er}function onEofChunk(stream,state){if(state.ended)return;if(state.decoder){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length}}state.ended=true;emitReadable(stream)}function emitReadable(stream){var state=stream._readableState;state.needReadable=false;if(!state.emittedReadable){debug("emitReadable",state.flowing);state.emittedReadable=true;if(state.sync)processNextTick(emitReadable_,stream);else emitReadable_(stream)}}function emitReadable_(stream){debug("emit readable");stream.emit("readable");flow(stream)}function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;processNextTick(maybeReadMore_,stream,state)}}function maybeReadMore_(stream,state){var len=state.length;while(!state.reading&&!state.flowing&&!state.ended&&state.length=length){if(stringMode)ret=list.join("");else ret=Buffer.concat(list,length);list.length=0}else{if(n0)throw new Error("endReadable called on non-empty stream");if(!state.endEmitted){state.ended=true;processNextTick(endReadableNT,state,stream)}}function endReadableNT(state,stream){if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit("end")}}function forEach(xs,f){for(var i=0,l=xs.length;i-1))throw new TypeError("Unknown encoding: "+encoding);this._writableState.defaultEncoding=encoding};function decodeChunk(state,chunk,encoding){if(!state.objectMode&&state.decodeStrings!==false&&typeof chunk==="string"){chunk=new Buffer(chunk,encoding)}return chunk}function writeOrBuffer(stream,state,chunk,encoding,cb){chunk=decodeChunk(state,chunk,encoding);if(Buffer.isBuffer(chunk))encoding="buffer";var len=state.objectMode?1:chunk.length;state.length+=len;var ret=state.length=this.charLength-this.charReceived?this.charLength-this.charReceived:buffer.length;buffer.copy(this.charBuffer,this.charReceived,0,available);this.charReceived+=available;if(this.charReceived=55296&&charCode<=56319){this.charLength+=this.surrogateSize;charStr="";continue}this.charReceived=this.charLength=0;if(buffer.length===0){return charStr}break}this.detectIncompleteChar(buffer);var end=buffer.length;if(this.charLength){buffer.copy(this.charBuffer,0,buffer.length-this.charReceived,end);end-=this.charReceived}charStr+=buffer.toString(this.encoding,0,end);var end=charStr.length-1;var charCode=charStr.charCodeAt(end);if(charCode>=55296&&charCode<=56319){var size=this.surrogateSize;this.charLength+=size;this.charReceived+=size;this.charBuffer.copy(this.charBuffer,size,0,size);buffer.copy(this.charBuffer,0,0,size);return charStr.substring(0,end)}return charStr};StringDecoder.prototype.detectIncompleteChar=function(buffer){var i=buffer.length>=3?3:buffer.length;for(;i>0;i--){var c=buffer[buffer.length-i];if(i==1&&c>>5==6){this.charLength=2;break}if(i<=2&&c>>4==14){this.charLength=3;break}if(i<=3&&c>>3==30){this.charLength=4;break}}this.charReceived=i};StringDecoder.prototype.end=function(buffer){var res="";if(buffer&&buffer.length)res=this.write(buffer);if(this.charReceived){var cr=this.charReceived;var buf=this.charBuffer;var enc=this.encoding;res+=buf.slice(0,cr).toString(enc)}return res};function passThroughWrite(buffer){return buffer.toString(this.encoding)}function utf16DetectIncompleteChar(buffer){this.charReceived=buffer.length%2;this.charLength=this.charReceived?2:0}function base64DetectIncompleteChar(buffer){this.charReceived=buffer.length%3;this.charLength=this.charReceived?3:0}},{buffer:4}],28:[function(require,module,exports){exports.isatty=function(){return false};function ReadStream(){throw new Error("tty.ReadStream is not implemented")}exports.ReadStream=ReadStream;function WriteStream(){throw new Error("tty.ReadStream is not implemented")}exports.WriteStream=WriteStream},{}],29:[function(require,module,exports){module.exports=function isBuffer(arg){return arg&&typeof arg==="object"&&typeof arg.copy==="function"&&typeof arg.fill==="function"&&typeof arg.readUInt8==="function"}},{}],30:[function(require,module,exports){(function(process,global){var formatRegExp=/%[sdj%]/g;exports.format=function(f){if(!isString(f)){var objects=[];for(var i=0;i=len)return x;switch(x){case"%s":return String(args[i++]);case"%d":return Number(args[i++]);case"%j":try{return JSON.stringify(args[i++])}catch(_){return"[Circular]"}default:return x}});for(var x=args[i];i=3)ctx.depth=arguments[2];if(arguments.length>=4)ctx.colors=arguments[3];if(isBoolean(opts)){ctx.showHidden=opts}else if(opts){exports._extend(ctx,opts)}if(isUndefined(ctx.showHidden))ctx.showHidden=false;if(isUndefined(ctx.depth))ctx.depth=2;if(isUndefined(ctx.colors))ctx.colors=false;if(isUndefined(ctx.customInspect))ctx.customInspect=true;if(ctx.colors)ctx.stylize=stylizeWithColor;return formatValue(ctx,obj,ctx.depth)}exports.inspect=inspect;inspect.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};inspect.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"};function stylizeWithColor(str,styleType){var style=inspect.styles[styleType];if(style){return"["+inspect.colors[style][0]+"m"+str+"["+inspect.colors[style][1]+"m"}else{return str}}function stylizeNoColor(str,styleType){return str}function arrayToHash(array){var hash={};array.forEach(function(val,idx){hash[val]=true});return hash}function formatValue(ctx,value,recurseTimes){if(ctx.customInspect&&value&&isFunction(value.inspect)&&value.inspect!==exports.inspect&&!(value.constructor&&value.constructor.prototype===value)){var ret=value.inspect(recurseTimes,ctx);if(!isString(ret)){ret=formatValue(ctx,ret,recurseTimes)}return ret}var primitive=formatPrimitive(ctx,value);if(primitive){return primitive}var keys=Object.keys(value);var visibleKeys=arrayToHash(keys);if(ctx.showHidden){keys=Object.getOwnPropertyNames(value)}if(isError(value)&&(keys.indexOf("message")>=0||keys.indexOf("description")>=0)){return formatError(value)}if(keys.length===0){if(isFunction(value)){var name=value.name?": "+value.name:"";return ctx.stylize("[Function"+name+"]","special")}if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),"regexp")}if(isDate(value)){return ctx.stylize(Date.prototype.toString.call(value),"date")}if(isError(value)){return formatError(value)}}var base="",array=false,braces=["{","}"];if(isArray(value)){array=true;braces=["[","]"]}if(isFunction(value)){var n=value.name?": "+value.name:"";base=" [Function"+n+"]"}if(isRegExp(value)){base=" "+RegExp.prototype.toString.call(value)}if(isDate(value)){base=" "+Date.prototype.toUTCString.call(value)}if(isError(value)){base=" "+formatError(value)}if(keys.length===0&&(!array||value.length==0)){return braces[0]+base+braces[1]}if(recurseTimes<0){if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),"regexp")}else{return ctx.stylize("[Object]","special")}}ctx.seen.push(value);var output;if(array){output=formatArray(ctx,value,recurseTimes,visibleKeys,keys)}else{output=keys.map(function(key){return formatProperty(ctx,value,recurseTimes,visibleKeys,key,array)})}ctx.seen.pop();return reduceToSingleString(output,base,braces)}function formatPrimitive(ctx,value){if(isUndefined(value))return ctx.stylize("undefined","undefined");if(isString(value)){var simple="'"+JSON.stringify(value).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return ctx.stylize(simple,"string")}if(isNumber(value))return ctx.stylize(""+value,"number");if(isBoolean(value))return ctx.stylize(""+value,"boolean");if(isNull(value))return ctx.stylize("null","null")}function formatError(value){return"["+Error.prototype.toString.call(value)+"]"}function formatArray(ctx,value,recurseTimes,visibleKeys,keys){var output=[];for(var i=0,l=value.length;i-1){if(array){str=str.split("\n").map(function(line){return" "+line}).join("\n").substr(2)}else{str="\n"+str.split("\n").map(function(line){return" "+line}).join("\n")}}}else{str=ctx.stylize("[Circular]","special")}}if(isUndefined(name)){if(array&&key.match(/^\d+$/)){return str}name=JSON.stringify(""+key);if(name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)){name=name.substr(1,name.length-2);name=ctx.stylize(name,"name")}else{name=name.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'");name=ctx.stylize(name,"string")}}return name+": "+str}function reduceToSingleString(output,base,braces){var numLinesEst=0;var length=output.reduce(function(prev,cur){numLinesEst++;if(cur.indexOf("\n")>=0)numLinesEst++;return prev+cur.replace(/\u001b\[\d\d?m/g,"").length+1},0);if(length>60){return braces[0]+(base===""?"":base+"\n ")+" "+output.join(",\n ")+" "+braces[1]}return braces[0]+base+" "+output.join(", ")+" "+braces[1]}function isArray(ar){return Array.isArray(ar)}exports.isArray=isArray;function isBoolean(arg){return typeof arg==="boolean"}exports.isBoolean=isBoolean;function isNull(arg){return arg===null}exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null}exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==="number"}exports.isNumber=isNumber;function isString(arg){return typeof arg==="string"}exports.isString=isString;function isSymbol(arg){return typeof arg==="symbol"}exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0}exports.isUndefined=isUndefined;function isRegExp(re){return isObject(re)&&objectToString(re)==="[object RegExp]"}exports.isRegExp=isRegExp;function isObject(arg){return typeof arg==="object"&&arg!==null}exports.isObject=isObject;function isDate(d){return isObject(d)&&objectToString(d)==="[object Date]"}exports.isDate=isDate;function isError(e){return isObject(e)&&(objectToString(e)==="[object Error]"||e instanceof Error)}exports.isError=isError;function isFunction(arg){return typeof arg==="function"}exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==="boolean"||typeof arg==="number"||typeof arg==="string"||typeof arg==="symbol"||typeof arg==="undefined"}exports.isPrimitive=isPrimitive;exports.isBuffer=require("./support/isBuffer");function objectToString(o){return Object.prototype.toString.call(o)}function pad(n){return n<10?"0"+n.toString(10):n.toString(10)}var months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function timestamp(){var d=new Date;var time=[pad(d.getHours()),pad(d.getMinutes()),pad(d.getSeconds())].join(":");return[d.getDate(),months[d.getMonth()],time].join(" ")}exports.log=function(){console.log("%s - %s",timestamp(),exports.format.apply(exports,arguments))};exports.inherits=require("inherits");exports._extend=function(origin,add){if(!add||!isObject(add))return origin;var keys=Object.keys(add);var i=keys.length;while(i--){origin[keys[i]]=add[keys[i]]}return origin};function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./support/isBuffer":29,_process:12,inherits:9}],31:[function(require,module,exports){(function(global){"use strict";require("./node");var transform=module.exports=require("../transformation");transform.options=require("../transformation/file/options");transform.version=require("../../package").version;transform.transform=transform;transform.run=function(code){var opts=arguments.length<=1||arguments[1]===undefined?{}:arguments[1];opts.sourceMaps="inline";return new Function(transform(code,opts).code)()};transform.load=function(url,callback,opts,hold){if(opts===undefined)opts={};opts.filename=opts.filename||url;var xhr=global.ActiveXObject?new global.ActiveXObject("Microsoft.XMLHTTP"):new global.XMLHttpRequest;xhr.open("GET",url,true);if("overrideMimeType"in xhr)xhr.overrideMimeType("text/plain");xhr.onreadystatechange=function(){if(xhr.readyState!==4)return;var status=xhr.status;if(status===0||status===200){var param=[xhr.responseText,opts];if(!hold)transform.run.apply(transform,param);if(callback)callback(param)}else{throw new Error("Could not load "+url)}};xhr.send(null)};var runScripts=function runScripts(){var scripts=[];var types=["text/ecmascript-6","text/6to5","text/babel","module"];var index=0;var exec=function exec(){var param=scripts[index];if(param instanceof Array){transform.run.apply(transform,param);index++;exec()}};var run=function run(script,i){var opts={};if(script.src){transform.load(script.src,function(param){scripts[i]=param;exec()},opts,true)}else{opts.filename="embedded";scripts[i]=[script.innerHTML,opts]}};var _scripts=global.document.getElementsByTagName("script");for(var i=0;i<_scripts.length;++i){var _script=_scripts[i];if(types.indexOf(_script.type)>=0)scripts.push(_script)}for(i in scripts){run(scripts[i],i)}exec()};if(global.addEventListener){global.addEventListener("DOMContentLoaded",runScripts,false)}else if(global.attachEvent){global.attachEvent("onload",runScripts)}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"../../package":631,"../transformation":83,"../transformation/file/options":66,"./node":32}],32:[function(require,module,exports){"use strict";exports.__esModule=true;exports.register=register;exports.polyfill=polyfill;exports.transformFile=transformFile;exports.transformFileSync=transformFileSync;exports.parse=parse;function _interopRequire(obj){return obj&&obj.__esModule?obj["default"]:obj}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _lodashLangIsFunction=require("lodash/lang/isFunction");var _lodashLangIsFunction2=_interopRequireDefault(_lodashLangIsFunction);var _transformation=require("../transformation");var _transformation2=_interopRequireDefault(_transformation);var _babylon=require("babylon");var babylon=_interopRequireWildcard(_babylon);var _util=require("../util");var util=_interopRequireWildcard(_util);var _fs=require("fs");var _fs2=_interopRequireDefault(_fs);var _types=require("../types");var t=_interopRequireWildcard(_types);exports.util=util;exports.acorn=babylon;exports.transform=_transformation2["default"];exports.pipeline=_transformation.pipeline;exports.canCompile=_util.canCompile;var _transformationFile=require("../transformation/file");exports.File=_interopRequire(_transformationFile);var _transformationFileOptionsConfig=require("../transformation/file/options/config");exports.options=_interopRequire(_transformationFileOptionsConfig);var _transformationPlugin=require("../transformation/plugin");exports.Plugin=_interopRequire(_transformationPlugin);var _transformationTransformer=require("../transformation/transformer");exports.Transformer=_interopRequire(_transformationTransformer);var _transformationPipeline=require("../transformation/pipeline");exports.Pipeline=_interopRequire(_transformationPipeline);var _traversal=require("../traversal");exports.traverse=_interopRequire(_traversal);var _toolsBuildExternalHelpers=require("../tools/build-external-helpers");exports.buildExternalHelpers=_interopRequire(_toolsBuildExternalHelpers);var _package=require("../../package");exports.version=_package.version; +exports.types=t;function register(opts){var callback=require("./register/node-polyfill");if(opts!=null)callback(opts);return callback}function polyfill(){require("../polyfill")}function transformFile(filename,opts,callback){if(_lodashLangIsFunction2["default"](opts)){callback=opts;opts={}}opts.filename=filename;_fs2["default"].readFile(filename,function(err,code){if(err)return callback(err);var result;try{result=_transformation2["default"](code,opts)}catch(err){return callback(err)}callback(null,result)})}function transformFileSync(filename){var opts=arguments.length<=1||arguments[1]===undefined?{}:arguments[1];opts.filename=filename;return _transformation2["default"](_fs2["default"].readFileSync(filename,"utf8"),opts)}function parse(code){var opts=arguments.length<=1||arguments[1]===undefined?{}:arguments[1];opts.allowHashBang=true;opts.sourceType="module";opts.ecmaVersion=Infinity;opts.plugins={jsx:true,flow:true};opts.features={};for(var key in _transformation2["default"].pipeline.transformers){opts.features[key]=true}var ast=babylon.parse(code,opts);if(opts.onToken){var _opts$onToken;(_opts$onToken=opts.onToken).push.apply(_opts$onToken,ast.tokens)}if(opts.onComment){var _opts$onComment;(_opts$onComment=opts.onComment).push.apply(_opts$onComment,ast.comments)}return ast.program}},{"../../package":631,"../polyfill":61,"../tools/build-external-helpers":62,"../transformation":83,"../transformation/file":63,"../transformation/file/options/config":65,"../transformation/pipeline":97,"../transformation/plugin":99,"../transformation/transformer":100,"../traversal":165,"../types":196,"../util":199,"./register/node-polyfill":34,babylon:633,fs:1,"lodash/lang/isFunction":526}],33:[function(require,module,exports){"use strict";exports.__esModule=true;require("../../polyfill");exports["default"]=function(){};module.exports=exports["default"]},{"../../polyfill":61}],34:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequire(obj){return obj&&obj.__esModule?obj["default"]:obj}require("../../polyfill");var _node=require("./node");exports["default"]=_interopRequire(_node);module.exports=exports["default"]},{"../../polyfill":61,"./node":33}],35:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var _repeating=require("repeating");var _repeating2=_interopRequireDefault(_repeating);var _trimRight=require("trim-right");var _trimRight2=_interopRequireDefault(_trimRight);var _lodashLangIsBoolean=require("lodash/lang/isBoolean");var _lodashLangIsBoolean2=_interopRequireDefault(_lodashLangIsBoolean);var _lodashCollectionIncludes=require("lodash/collection/includes");var _lodashCollectionIncludes2=_interopRequireDefault(_lodashCollectionIncludes);var _lodashLangIsNumber=require("lodash/lang/isNumber");var _lodashLangIsNumber2=_interopRequireDefault(_lodashLangIsNumber);var Buffer=function(){function Buffer(position,format){_classCallCheck(this,Buffer);this.parenPushNewlineState=null;this.position=position;this._indent=format.indent.base;this.format=format;this.buf=""}Buffer.prototype.get=function get(){return _trimRight2["default"](this.buf)};Buffer.prototype.getIndent=function getIndent(){if(this.format.compact||this.format.concise){return""}else{return _repeating2["default"](this.format.indent.style,this._indent)}};Buffer.prototype.indentSize=function indentSize(){return this.getIndent().length};Buffer.prototype.indent=function indent(){this._indent++};Buffer.prototype.dedent=function dedent(){this._indent--};Buffer.prototype.semicolon=function semicolon(){this.push(";")};Buffer.prototype.ensureSemicolon=function ensureSemicolon(){if(!this.isLast(";"))this.semicolon()};Buffer.prototype.rightBrace=function rightBrace(){this.newline(true);this.push("}")};Buffer.prototype.keyword=function keyword(name){this.push(name);this.space()};Buffer.prototype.space=function space(force){if(!force&&this.format.compact)return;if(force||this.buf&&!this.isLast(" ")&&!this.isLast("\n")){this.push(" ")}};Buffer.prototype.removeLast=function removeLast(cha){if(this.format.compact)return;if(!this.isLast(cha))return;this.buf=this.buf.substr(0,this.buf.length-1);this.position.unshift(cha)};Buffer.prototype.startTerminatorless=function startTerminatorless(){return this.parenPushNewlineState={printed:false}};Buffer.prototype.endTerminatorless=function endTerminatorless(state){if(state.printed){this.dedent();this.newline();this.push(")")}};Buffer.prototype.newline=function newline(i,removeLast){if(this.format.compact||this.format.retainLines)return;if(this.format.concise){this.space();return}removeLast=removeLast||false;if(_lodashLangIsNumber2["default"](i)){i=Math.min(2,i);if(this.endsWith("{\n")||this.endsWith(":\n"))i--;if(i<=0)return;while(i>0){this._newline(removeLast);i--}return}if(_lodashLangIsBoolean2["default"](i)){removeLast=i}this._newline(removeLast)};Buffer.prototype._newline=function _newline(removeLast){if(this.endsWith("\n\n"))return;if(removeLast&&this.isLast("\n"))this.removeLast("\n");this.removeLast(" ");this._removeSpacesAfterLastNewline();this._push("\n")};Buffer.prototype._removeSpacesAfterLastNewline=function _removeSpacesAfterLastNewline(){var lastNewlineIndex=this.buf.lastIndexOf("\n");if(lastNewlineIndex===-1){return}var index=this.buf.length-1;while(index>lastNewlineIndex){if(this.buf[index]!==" "){break}index--}if(index===lastNewlineIndex){this.buf=this.buf.substring(0,index+1)}};Buffer.prototype.push=function push(str,noIndent){if(!this.format.compact&&this._indent&&!noIndent&&str!=="\n"){var indent=this.getIndent();str=str.replace(/\n/g,"\n"+indent);if(this.isLast("\n"))this._push(indent)}this._push(str)};Buffer.prototype._push=function _push(str){var parenPushNewlineState=this.parenPushNewlineState;if(parenPushNewlineState){for(var i=0;i")}this.space();print.plain(node.returnType)}function FunctionTypeParam(node,print){print.plain(node.name);if(node.optional)this.push("?");this.push(":");this.space();print.plain(node.typeAnnotation)}function InterfaceExtends(node,print){print.plain(node.id);print.plain(node.typeParameters)}exports.ClassImplements=InterfaceExtends;exports.GenericTypeAnnotation=InterfaceExtends;function _interfaceish(node,print){print.plain(node.id);print.plain(node.typeParameters);if(node["extends"].length){this.push(" extends ");print.join(node["extends"],{separator:", "})}this.space();print.plain(node.body)}function InterfaceDeclaration(node,print){this.push("interface ");this._interfaceish(node,print)}function IntersectionTypeAnnotation(node,print){print.join(node.types,{separator:" & "})}function MixedTypeAnnotation(){this.push("mixed")}function NullableTypeAnnotation(node,print){this.push("?");print.plain(node.typeAnnotation)}var _types2=require("./types");exports.NumberLiteralTypeAnnotation=_types2.Literal;function NumberTypeAnnotation(){this.push("number")}function StringLiteralTypeAnnotation(node){this.push(this._stringLiteral(node.value))}function StringTypeAnnotation(){this.push("string")}function TupleTypeAnnotation(node,print){this.push("[");print.join(node.types,{separator:", "});this.push("]")}function TypeofTypeAnnotation(node,print){this.push("typeof ");print.plain(node.argument)}function TypeAlias(node,print){this.push("type ");print.plain(node.id);print.plain(node.typeParameters);this.space();this.push("=");this.space();print.plain(node.right);this.semicolon()}function TypeAnnotation(node,print){this.push(":");this.space();if(node.optional)this.push("?");print.plain(node.typeAnnotation)}function TypeParameterInstantiation(node,print){this.push("<");print.join(node.params,{separator:", ",iterator:function iterator(node){print.plain(node.typeAnnotation)}});this.push(">")}exports.TypeParameterDeclaration=TypeParameterInstantiation;function ObjectTypeAnnotation(node,print){var _this=this;this.push("{");var props=node.properties.concat(node.callProperties,node.indexers);if(props.length){this.space();print.list(props,{separator:false,indent:true,iterator:function iterator(){if(props.length!==1){_this.semicolon();_this.space()}}});this.space()}this.push("}")}function ObjectTypeCallProperty(node,print){if(node["static"])this.push("static ");print.plain(node.value)}function ObjectTypeIndexer(node,print){if(node["static"])this.push("static ");this.push("[");print.plain(node.id);this.push(":");this.space();print.plain(node.key);this.push("]");this.push(":");this.space();print.plain(node.value)}function ObjectTypeProperty(node,print){if(node["static"])this.push("static ");print.plain(node.key);if(node.optional)this.push("?");if(!t.isFunctionTypeAnnotation(node.value)){this.push(":");this.space()}print.plain(node.value)}function QualifiedTypeIdentifier(node,print){print.plain(node.qualification);this.push(".");print.plain(node.id)}function UnionTypeAnnotation(node,print){print.join(node.types,{separator:" | "})}function TypeCastExpression(node,print){this.push("(");print.plain(node.expression);print.plain(node.typeAnnotation);this.push(")")}function VoidTypeAnnotation(){this.push("void")}},{"../../types":196,"./types":46}],41:[function(require,module,exports){"use strict";exports.__esModule=true;exports.JSXAttribute=JSXAttribute;exports.JSXIdentifier=JSXIdentifier;exports.JSXNamespacedName=JSXNamespacedName;exports.JSXMemberExpression=JSXMemberExpression;exports.JSXSpreadAttribute=JSXSpreadAttribute;exports.JSXExpressionContainer=JSXExpressionContainer;exports.JSXElement=JSXElement;exports.JSXOpeningElement=JSXOpeningElement;exports.JSXClosingElement=JSXClosingElement;exports.JSXEmptyExpression=JSXEmptyExpression;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../types");var t=_interopRequireWildcard(_types);function JSXAttribute(node,print){print.plain(node.name);if(node.value){this.push("=");print.plain(node.value)}}function JSXIdentifier(node){this.push(node.name)}function JSXNamespacedName(node,print){print.plain(node.namespace);this.push(":");print.plain(node.name)}function JSXMemberExpression(node,print){print.plain(node.object);this.push(".");print.plain(node.property)}function JSXSpreadAttribute(node,print){this.push("{...");print.plain(node.argument);this.push("}")}function JSXExpressionContainer(node,print){this.push("{");print.plain(node.expression);this.push("}")}function JSXElement(node,print){var open=node.openingElement;print.plain(open);if(open.selfClosing)return;this.indent();var _arr=node.children;for(var _i=0;_i<_arr.length;_i++){var child=_arr[_i];if(t.isLiteral(child)){this.push(child.value,true)}else{print.plain(child)}}this.dedent();print.plain(node.closingElement)}function JSXOpeningElement(node,print){this.push("<");print.plain(node.name);if(node.attributes.length>0){this.push(" ");print.join(node.attributes,{separator:" "})}this.push(node.selfClosing?" />":">")}function JSXClosingElement(node,print){this.push("")}function JSXEmptyExpression(){}},{"../../types":196}],42:[function(require,module,exports){"use strict";exports.__esModule=true;exports._params=_params;exports._method=_method;exports.FunctionExpression=FunctionExpression;exports.ArrowFunctionExpression=ArrowFunctionExpression;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../types");var t=_interopRequireWildcard(_types);function _params(node,print){var _this=this;print.plain(node.typeParameters);this.push("(");print.list(node.params,{iterator:function iterator(node){if(node.optional)_this.push("?");print.plain(node.typeAnnotation)}});this.push(")");if(node.returnType){print.plain(node.returnType)}}function _method(node,print){var value=node.value;var kind=node.kind;var key=node.key;if(kind==="method"||kind==="init"){if(value.generator){this.push("*")}}if(kind==="get"||kind==="set"){this.push(kind+" ")}if(value.async)this.push("async ");if(node.computed){this.push("[");print.plain(key);this.push("]")}else{print.plain(key)}this._params(value,print);this.space();print.plain(value.body)}function FunctionExpression(node,print){if(node.async)this.push("async ");this.push("function");if(node.generator)this.push("*");if(node.id){this.push(" ");print.plain(node.id)}else{this.space()}this._params(node,print);this.space();print.plain(node.body)}exports.FunctionDeclaration=FunctionExpression;function ArrowFunctionExpression(node,print){if(node.async)this.push("async ");if(node.params.length===1&&t.isIdentifier(node.params[0])){print.plain(node.params[0])}else{this._params(node,print)}this.push(" => ");var bodyNeedsParens=t.isObjectExpression(node.body);if(bodyNeedsParens){this.push("(")}print.plain(node.body);if(bodyNeedsParens){this.push(")")}}},{"../../types":196}],43:[function(require,module,exports){"use strict";exports.__esModule=true;exports.ImportSpecifier=ImportSpecifier;exports.ImportDefaultSpecifier=ImportDefaultSpecifier;exports.ExportDefaultSpecifier=ExportDefaultSpecifier;exports.ExportSpecifier=ExportSpecifier;exports.ExportNamespaceSpecifier=ExportNamespaceSpecifier;exports.ExportAllDeclaration=ExportAllDeclaration;exports.ExportNamedDeclaration=ExportNamedDeclaration;exports.ExportDefaultDeclaration=ExportDefaultDeclaration;exports.ImportDeclaration=ImportDeclaration;exports.ImportNamespaceSpecifier=ImportNamespaceSpecifier;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../types");var t=_interopRequireWildcard(_types);function ImportSpecifier(node,print){print.plain(node.imported);if(node.local&&node.local.name!==node.imported.name){this.push(" as ");print.plain(node.local)}}function ImportDefaultSpecifier(node,print){print.plain(node.local)}function ExportDefaultSpecifier(node,print){print.plain(node.exported)}function ExportSpecifier(node,print){print.plain(node.local);if(node.exported&&node.local.name!==node.exported.name){this.push(" as ");print.plain(node.exported)}}function ExportNamespaceSpecifier(node,print){this.push("* as ");print.plain(node.exported)}function ExportAllDeclaration(node,print){this.push("export *");if(node.exported){this.push(" as ");print.plain(node.exported)}this.push(" from ");print.plain(node.source);this.semicolon()}function ExportNamedDeclaration(node,print){this.push("export ");ExportDeclaration.call(this,node,print)}function ExportDefaultDeclaration(node,print){this.push("export default ");ExportDeclaration.call(this,node,print)}function ExportDeclaration(node,print){var specifiers=node.specifiers;if(node.declaration){var declar=node.declaration;print.plain(declar);if(t.isStatement(declar)||t.isFunction(declar)||t.isClass(declar))return}else{if(node.exportKind==="type"){this.push("type ")}var first=specifiers[0];var hasSpecial=false;if(t.isExportDefaultSpecifier(first)||t.isExportNamespaceSpecifier(first)){hasSpecial=true;print.plain(specifiers.shift());if(specifiers.length){this.push(", ")}}if(specifiers.length||!specifiers.length&&!hasSpecial){this.push("{");if(specifiers.length){this.space();print.join(specifiers,{separator:", "});this.space()}this.push("}")}if(node.source){this.push(" from ");print.plain(node.source)}}this.ensureSemicolon()}function ImportDeclaration(node,print){this.push("import ");if(node.importKind==="type"||node.importKind==="typeof"){this.push(node.importKind+" ")}var specfiers=node.specifiers;if(specfiers&&specfiers.length){var first=node.specifiers[0];if(t.isImportDefaultSpecifier(first)||t.isImportNamespaceSpecifier(first)){print.plain(node.specifiers.shift());if(node.specifiers.length){this.push(", ")}}if(node.specifiers.length){this.push("{");this.space();print.join(node.specifiers,{separator:", "});this.space();this.push("}")}this.push(" from ")}print.plain(node.source);this.semicolon()}function ImportNamespaceSpecifier(node,print){this.push("* as ");print.plain(node.local)}},{"../../types":196}],44:[function(require,module,exports){"use strict";exports.__esModule=true;exports.WithStatement=WithStatement;exports.IfStatement=IfStatement;exports.ForStatement=ForStatement;exports.WhileStatement=WhileStatement;exports.DoWhileStatement=DoWhileStatement;exports.LabeledStatement=LabeledStatement;exports.TryStatement=TryStatement;exports.CatchClause=CatchClause;exports.SwitchStatement=SwitchStatement;exports.SwitchCase=SwitchCase;exports.DebuggerStatement=DebuggerStatement;exports.VariableDeclaration=VariableDeclaration;exports.VariableDeclarator=VariableDeclarator;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _repeating=require("repeating");var _repeating2=_interopRequireDefault(_repeating);var _types=require("../../types");var t=_interopRequireWildcard(_types);function WithStatement(node,print){this.keyword("with");this.push("(");print.plain(node.object);this.push(")");print.block(node.body)}function IfStatement(node,print){this.keyword("if");this.push("(");print.plain(node.test);this.push(")");this.space();print.indentOnComments(node.consequent);if(node.alternate){if(this.isLast("}"))this.space();this.push("else ");print.indentOnComments(node.alternate)}}function ForStatement(node,print){this.keyword("for");this.push("(");print.plain(node.init);this.push(";");if(node.test){this.space();print.plain(node.test)}this.push(";");if(node.update){this.space();print.plain(node.update)}this.push(")");print.block(node.body)}function WhileStatement(node,print){this.keyword("while");this.push("(");print.plain(node.test);this.push(")");print.block(node.body)}var buildForXStatement=function buildForXStatement(op){return function(node,print){this.keyword("for");this.push("(");print.plain(node.left);this.push(" "+op+" ");print.plain(node.right);this.push(")");print.block(node.body)}};var ForInStatement=buildForXStatement("in");exports.ForInStatement=ForInStatement;var ForOfStatement=buildForXStatement("of");exports.ForOfStatement=ForOfStatement;function DoWhileStatement(node,print){this.push("do ");print.plain(node.body);this.space();this.keyword("while");this.push("(");print.plain(node.test);this.push(");")}var buildLabelStatement=function buildLabelStatement(prefix){var key=arguments.length<=1||arguments[1]===undefined?"label":arguments[1];return function(node,print){this.push(prefix);var label=node[key];if(label){this.push(" ");var terminatorState=this.startTerminatorless();print.plain(label);this.endTerminatorless(terminatorState)}this.semicolon()}};var ContinueStatement=buildLabelStatement("continue");exports.ContinueStatement=ContinueStatement;var ReturnStatement=buildLabelStatement("return","argument");exports.ReturnStatement=ReturnStatement;var BreakStatement=buildLabelStatement("break");exports.BreakStatement=BreakStatement;var ThrowStatement=buildLabelStatement("throw","argument");exports.ThrowStatement=ThrowStatement;function LabeledStatement(node,print){print.plain(node.label);this.push(": ");print.plain(node.body)}function TryStatement(node,print){this.keyword("try");print.plain(node.block);this.space();if(node.handlers){print.plain(node.handlers[0])}else{print.plain(node.handler)}if(node.finalizer){this.space();this.push("finally ");print.plain(node.finalizer)}}function CatchClause(node,print){this.keyword("catch");this.push("(");print.plain(node.param);this.push(") ");print.plain(node.body)}function SwitchStatement(node,print){this.keyword("switch");this.push("(");print.plain(node.discriminant);this.push(")");this.space();this.push("{");print.sequence(node.cases,{indent:true,addNewlines:function addNewlines(leading,cas){if(!leading&&node.cases[node.cases.length-1]===cas)return-1}});this.push("}"); +}function SwitchCase(node,print){if(node.test){this.push("case ");print.plain(node.test);this.push(":")}else{this.push("default:")}if(node.consequent.length){this.newline();print.sequence(node.consequent,{indent:true})}}function DebuggerStatement(){this.push("debugger;")}function VariableDeclaration(node,print,parent){this.push(node.kind+" ");var hasInits=false;if(!t.isFor(parent)){var _arr=node.declarations;for(var _i=0;_i<_arr.length;_i++){var declar=_arr[_i];if(declar.init){hasInits=true}}}var sep;if(!this.format.compact&&!this.format.concise&&hasInits&&!this.format.retainLines){sep=",\n"+_repeating2["default"](" ",node.kind.length+1)}print.list(node.declarations,{separator:sep});if(t.isFor(parent)){if(parent.left===node||parent.init===node)return}this.semicolon()}function VariableDeclarator(node,print){print.plain(node.id);print.plain(node.id.typeAnnotation);if(node.init){this.space();this.push("=");this.space();print.plain(node.init)}}},{"../../types":196,repeating:611}],45:[function(require,module,exports){"use strict";exports.__esModule=true;exports.TaggedTemplateExpression=TaggedTemplateExpression;exports.TemplateElement=TemplateElement;exports.TemplateLiteral=TemplateLiteral;function TaggedTemplateExpression(node,print){print.plain(node.tag);print.plain(node.quasi)}function TemplateElement(node){this._push(node.value.raw)}function TemplateLiteral(node,print){this.push("`");var quasis=node.quasis;var len=quasis.length;for(var i=0;i0)this.space();print.plain(elem);if(i1e5;if(format.compact){console.error("[BABEL] "+messages.get("codeGeneratorDeopt",opts.filename,"100KB"))}}if(format.compact){format.indent.adjustMultilineComment=false}return format};CodeGenerator.findCommonStringDelimiter=function findCommonStringDelimiter(code,tokens){var occurences={single:0,"double":0};var checked=0;for(var i=0;i=3)break}if(occurences.single>occurences.double){return"single"}else{return"double"}};CodeGenerator.prototype.generate=function generate(){var ast=this.ast;this.print(ast);if(ast.comments){var comments=[];var _arr=ast.comments;for(var _i=0;_i<_arr.length;_i++){var comment=_arr[_i];if(!comment._displayed)comments.push(comment)}this._printComments(comments)}return{map:this.map.get(),code:this.buffer.get()}};CodeGenerator.prototype.buildPrint=function buildPrint(parent){return new _nodePrinter2["default"](this,parent)};CodeGenerator.prototype.catchUp=function catchUp(node){if(node.loc&&this.format.retainLines&&this.buffer.buf){while(this.position.line=0||comment.value.indexOf("@preserve")>=0){return true}else{return this.format.comments}}};CodeGenerator.prototype._printComments=function _printComments(comments){if(!comments||!comments.length)return;var _arr3=comments;for(var _i3=0;_i3<_arr3.length;_i3++){var comment=_arr3[_i3];if(!this.shouldPrintComment(comment))continue;if(comment._displayed)continue;comment._displayed=true;this.catchUp(comment);this.newline(this.whitespace.getNewlinesBefore(comment));var column=this.position.column;var val=this.generateComment(comment);if(column&&!this.isLast(["\n"," ","[","{"])){this._push(" ");column++}if(comment.type==="CommentBlock"&&this.format.indent.adjustMultilineComment){var offset=comment.loc&&comment.loc.start.column;if(offset){var newlineRegex=new RegExp("\\n\\s{1,"+offset+"}","g");val=val.replace(newlineRegex,"\n")}var indent=Math.max(this.indentSize(),column);val=val.replace(/\n/g,"\n"+_repeating2["default"](" ",indent))}if(column===0){val=this.getIndent()+val}if((this.format.compact||this.format.retainLines)&&comment.type==="CommentLine"){val+="\n"}this._push(val);this.newline(this.whitespace.getNewlinesAfter(comment))}};_createClass(CodeGenerator,null,[{key:"generators",value:{templateLiterals:require("./generators/template-literals"),comprehensions:require("./generators/comprehensions"),expressions:require("./generators/expressions"),statements:require("./generators/statements"),classes:require("./generators/classes"),methods:require("./generators/methods"),modules:require("./generators/modules"),types:require("./generators/types"),flow:require("./generators/flow"),base:require("./generators/base"),jsx:require("./generators/jsx")},enumerable:true}]);return CodeGenerator}();_lodashCollectionEach2["default"](_buffer2["default"].prototype,function(fn,key){CodeGenerator.prototype[key]=function(){return fn.apply(this.buffer,arguments)}});_lodashCollectionEach2["default"](CodeGenerator.generators,function(generator){_lodashObjectExtend2["default"](CodeGenerator.prototype,generator)});module.exports=function(ast,opts,code){var gen=new CodeGenerator(ast,opts,code);return gen.generate()};module.exports.CodeGenerator=CodeGenerator},{"../messages":60,"../types":196,"./buffer":35,"./generators/base":36,"./generators/classes":37,"./generators/comprehensions":38,"./generators/expressions":39,"./generators/flow":40,"./generators/jsx":41,"./generators/methods":42,"./generators/modules":43,"./generators/statements":44,"./generators/template-literals":45,"./generators/types":46,"./node":48,"./node/printer":50,"./position":52,"./source-map":53,"./whitespace":54,"detect-indent":409,"lodash/collection/each":437,"lodash/object/extend":537,repeating:611}],48:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var _whitespace=require("./whitespace");var _whitespace2=_interopRequireDefault(_whitespace);var _parentheses=require("./parentheses");var parens=_interopRequireWildcard(_parentheses);var _lodashCollectionEach=require("lodash/collection/each");var _lodashCollectionEach2=_interopRequireDefault(_lodashCollectionEach);var _lodashCollectionSome=require("lodash/collection/some");var _lodashCollectionSome2=_interopRequireDefault(_lodashCollectionSome);var _types=require("../../types");var t=_interopRequireWildcard(_types);var find=function find(obj,node,parent){if(!obj)return;var result;var types=Object.keys(obj);for(var i=0;i","<=",">=","in","instanceof"],[">>","<<",">>>"],["+","-"],["*","/","%"],["**"]],function(tier,i){_lodashCollectionEach2["default"](tier,function(op){PRECEDENCE[op]=i})});function NullableTypeAnnotation(node,parent){return t.isArrayTypeAnnotation(parent)}exports.FunctionTypeAnnotation=NullableTypeAnnotation;function UpdateExpression(node,parent){if(t.isMemberExpression(parent)&&parent.object===node){return true}}function ObjectExpression(node,parent){if(t.isExpressionStatement(parent)){return true}if(t.isMemberExpression(parent)&&parent.object===node){return true}return false}function Binary(node,parent){if((t.isCallExpression(parent)||t.isNewExpression(parent))&&parent.callee===node){return true}if(t.isUnaryLike(parent)){return true}if(t.isMemberExpression(parent)&&parent.object===node){return true}if(t.isBinary(parent)){var parentOp=parent.operator;var parentPos=PRECEDENCE[parentOp];var nodeOp=node.operator;var nodePos=PRECEDENCE[nodeOp];if(parentPos>nodePos){return true}if(parentPos===nodePos&&parent.right===node){return true}}}function BinaryExpression(node,parent){if(node.operator==="in"){if(t.isVariableDeclarator(parent)){return true}if(t.isFor(parent)){return true}}}function SequenceExpression(node,parent){if(t.isForStatement(parent)){return false}if(t.isExpressionStatement(parent)&&parent.expression===node){return false}return true}function YieldExpression(node,parent){return t.isBinary(parent)||t.isUnaryLike(parent)||t.isCallExpression(parent)||t.isMemberExpression(parent)||t.isNewExpression(parent)||t.isConditionalExpression(parent)||t.isYieldExpression(parent)}function ClassExpression(node,parent){return t.isExpressionStatement(parent)}function UnaryLike(node,parent){return t.isMemberExpression(parent)&&parent.object===node}function FunctionExpression(node,parent){if(t.isExpressionStatement(parent)){return true}if(t.isMemberExpression(parent)&&parent.object===node){return true}if(t.isCallExpression(parent)&&parent.callee===node){return true}}function ConditionalExpression(node,parent){if(t.isUnaryLike(parent)){return true}if(t.isBinary(parent)){return true}if(t.isCallExpression(parent)||t.isNewExpression(parent)){if(parent.callee===node){return true}}if(t.isConditionalExpression(parent)&&parent.test===node){return true}if(t.isMemberExpression(parent)&&parent.object===node){return true}return false}function AssignmentExpression(node){if(t.isObjectPattern(node.left)){return true}else{return ConditionalExpression.apply(undefined,arguments)}}},{"../../types":196,"lodash/collection/each":437}],50:[function(require,module,exports){"use strict";exports.__esModule=true;function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var NodePrinter=function(){function NodePrinter(generator,parent){_classCallCheck(this,NodePrinter);this.generator=generator;this.parent=parent}NodePrinter.prototype.printInnerComments=function printInnerComments(){if(!this.parent.innerComments)return;var gen=this.generator;gen.indent();gen._printComments(this.parent.innerComments);gen.dedent()};NodePrinter.prototype.plain=function plain(node,opts){return this.generator.print(node,this.parent,opts)};NodePrinter.prototype.sequence=function sequence(nodes){var opts=arguments.length<=1||arguments[1]===undefined?{}:arguments[1];opts.statement=true;return this.generator.printJoin(this,nodes,opts)};NodePrinter.prototype.join=function join(nodes,opts){return this.generator.printJoin(this,nodes,opts)};NodePrinter.prototype.list=function list(items){var opts=arguments.length<=1||arguments[1]===undefined?{}:arguments[1];if(opts.separator==null){opts.separator=",";if(!this.generator.format.compact)opts.separator+=" "}return this.join(items,opts)};NodePrinter.prototype.block=function block(node){return this.generator.printBlock(this,node)};NodePrinter.prototype.indentOnComments=function indentOnComments(node){return this.generator.printAndIndentOnComments(this,node)};return NodePrinter}();exports["default"]=NodePrinter;module.exports=exports["default"]},{}],51:[function(require,module,exports){"use strict";function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _lodashLangIsBoolean=require("lodash/lang/isBoolean");var _lodashLangIsBoolean2=_interopRequireDefault(_lodashLangIsBoolean);var _lodashCollectionEach=require("lodash/collection/each");var _lodashCollectionEach2=_interopRequireDefault(_lodashCollectionEach);var _lodashCollectionMap=require("lodash/collection/map");var _lodashCollectionMap2=_interopRequireDefault(_lodashCollectionMap);var _types=require("../../types");var t=_interopRequireWildcard(_types);function crawl(node){var state=arguments.length<=1||arguments[1]===undefined?{}:arguments[1];if(t.isMemberExpression(node)){crawl(node.object,state);if(node.computed)crawl(node.property,state)}else if(t.isBinary(node)||t.isAssignmentExpression(node)){crawl(node.left,state);crawl(node.right,state)}else if(t.isCallExpression(node)){state.hasCall=true;crawl(node.callee,state)}else if(t.isFunction(node)){state.hasFunction=true}else if(t.isIdentifier(node)){state.hasHelper=state.hasHelper||isHelper(node.callee)}return state}function isHelper(node){if(t.isMemberExpression(node)){return isHelper(node.object)||isHelper(node.property)}else if(t.isIdentifier(node)){return node.name==="require"||node.name[0]==="_"}else if(t.isCallExpression(node)){return isHelper(node.callee)}else if(t.isBinary(node)||t.isAssignmentExpression(node)){return t.isIdentifier(node.left)&&isHelper(node.left)||isHelper(node.right)}else{return false}}function isType(node){return t.isLiteral(node)||t.isObjectExpression(node)||t.isArrayExpression(node)||t.isIdentifier(node)||t.isMemberExpression(node)}exports.nodes={AssignmentExpression:function AssignmentExpression(node){var state=crawl(node.right);if(state.hasCall&&state.hasHelper||state.hasFunction){return{before:state.hasFunction,after:true}}},SwitchCase:function SwitchCase(node,parent){return{before:node.consequent.length||parent.cases[0]===node}},LogicalExpression:function LogicalExpression(node){if(t.isFunction(node.left)||t.isFunction(node.right)){return{after:true}}},Literal:function Literal(node){if(node.value==="use strict"){return{after:true}}},CallExpression:function CallExpression(node){if(t.isFunction(node.callee)||isHelper(node)){return{before:true,after:true}}},VariableDeclaration:function VariableDeclaration(node){for(var i=0;i=max){i-=max}return i}var Whitespace=function(){function Whitespace(tokens){_classCallCheck(this,Whitespace);this.tokens=tokens;this.used={};this._lastFoundIndex=0}Whitespace.prototype.getNewlinesBefore=function getNewlinesBefore(node){var startToken;var endToken;var tokens=this.tokens;for(var j=0;j")}}).join("\n");if(highlighted){return _chalk2["default"].reset(frame)}else{return frame}};module.exports=exports["default"]},{chalk:217,esutils:413,"js-tokens":427,"line-numbers":429,repeating:611}],56:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _lodashObjectMerge=require("lodash/object/merge");var _lodashObjectMerge2=_interopRequireDefault(_lodashObjectMerge);exports["default"]=function(dest,src){if(!dest||!src)return;return _lodashObjectMerge2["default"](dest,src,function(a,b){if(b&&Array.isArray(a)){var c=a.slice(0);for(var _iterator=b,_isArray=Array.isArray(_iterator),_i=0,_iterator=_isArray?_iterator:_iterator[Symbol.iterator]();;){var _ref;if(_isArray){if(_i>=_iterator.length)break;_ref=_iterator[_i++]}else{_i=_iterator.next();if(_i.done)break;_ref=_i.value}var v=_ref;if(a.indexOf(v)<0){c.push(v)}}return c}})};module.exports=exports["default"]},{"lodash/object/merge":541}],57:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../types");var t=_interopRequireWildcard(_types);exports["default"]=function(ast,comments,tokens){if(ast&&ast.type==="Program"){return t.file(ast,comments||[],tokens||[])}else{throw new Error("Not a valid ast?")}};module.exports=exports["default"]},{"../types":196}],58:[function(require,module,exports){"use strict";exports.__esModule=true;exports["default"]=function(){return Object.create(null)};module.exports=exports["default"]},{}],59:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _babylon=require("babylon");var babylon=_interopRequireWildcard(_babylon);exports["default"]=function(code){var opts=arguments.length<=1||arguments[1]===undefined?{}:arguments[1];var parseOpts={allowImportExportEverywhere:opts.looseModules,allowReturnOutsideFunction:opts.looseModules,allowHashBang:true,ecmaVersion:6,strictMode:opts.strictMode,sourceType:opts.sourceType,locations:true,features:opts.features||{},plugins:opts.plugins||{}};if(opts.nonStandard){parseOpts.plugins.jsx=true;parseOpts.plugins.flow=true}return babylon.parse(code,parseOpts)};module.exports=exports["default"]},{babylon:633}],60:[function(require,module,exports){"use strict";exports.__esModule=true;exports.get=get;exports.parseArgs=parseArgs;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _util=require("util");var util=_interopRequireWildcard(_util);var MESSAGES={tailCallReassignmentDeopt:"Function reference has been reassigned, so it will probably be dereferenced, therefore we can't optimise this with confidence",JSXNamespacedTags:"Namespace tags are not supported. ReactJSX is not XML.",classesIllegalBareSuper:"Illegal use of bare super",classesIllegalSuperCall:"Direct super call is illegal in non-constructor, use super.$1() instead",scopeDuplicateDeclaration:"Duplicate declaration $1",settersNoRest:"Setters aren't allowed to have a rest",noAssignmentsInForHead:"No assignments allowed in for-in/of head",expectedMemberExpressionOrIdentifier:"Expected type MemberExpression or Identifier",invalidParentForThisNode:"We don't know how to handle this node within the current parent - please open an issue",readOnly:"$1 is read-only",unknownForHead:"Unknown node type $1 in ForStatement",didYouMean:"Did you mean $1?",codeGeneratorDeopt:"Note: The code generator has deoptimised the styling of $1 as it exceeds the max of $2.",missingTemplatesDirectory:"no templates directory - this is most likely the result of a broken `npm publish`. Please report to https://github.com/babel/babel/issues",unsupportedOutputType:"Unsupported output type $1",illegalMethodName:"Illegal method name $1",lostTrackNodePath:"We lost track of this node's position, likely because the AST was directly manipulated",modulesIllegalExportName:"Illegal export $1",modulesDuplicateDeclarations:"Duplicate module declarations with the same source but in different scopes",undeclaredVariable:"Reference to undeclared variable $1",undeclaredVariableType:"Referencing a type alias outside of a type annotation",undeclaredVariableSuggestion:"Reference to undeclared variable $1 - did you mean $2?",traverseNeedsParent:"You must pass a scope and parentPath unless traversing a Program/File got a $1 node",traverseVerifyRootFunction:"You passed `traverse()` a function when it expected a visitor object, are you sure you didn't mean `{ enter: Function }`?",traverseVerifyVisitorProperty:"You passed `traverse()` a visitor object with the property $1 that has the invalid property $2",traverseVerifyNodeType:"You gave us a visitor for the node type $1 but it's not a valid type",pluginIllegalKind:"Illegal kind $1 for plugin $2",pluginIllegalPosition:"Illegal position $1 for plugin $2",pluginKeyCollision:"The plugin $1 collides with another of the same name",pluginNotTransformer:"The plugin $1 didn't export a Plugin instance",pluginUnknown:"Unknown plugin $1",pluginNotFile:"Plugin $1 is resolving to a different Babel version than what is performing the transformation.",pluginInvalidProperty:"Plugin $1 provided an invalid property of $2.",pluginInvalidPropertyVisitor:'Define your visitor methods inside a `visitor` property like so:\n\n new Plugin("foobar", {\n visitor: {\n // define your visitor methods here!\n }\n });\n'};exports.MESSAGES=MESSAGES;function get(key){for(var _len=arguments.length,args=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key]}var msg=MESSAGES[key];if(!msg)throw new ReferenceError("Unknown message "+JSON.stringify(key));args=parseArgs(args);return msg.replace(/\$(\d+)/g,function(str,i){return args[--i]})}function parseArgs(args){return args.map(function(val){if(val!=null&&val.inspect){return val.inspect()}else{try{return JSON.stringify(val)||val+""}catch(e){return util.inspect(val)}}})}},{util:30}],61:[function(require,module,exports){(function(global){"use strict";require("core-js/shim");require("regenerator/runtime");if(global._babelPolyfill){throw new Error("only one instance of babel/polyfill is allowed")}global._babelPolyfill=true}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"core-js/shim":405,"regenerator/runtime":604}],62:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _generation=require("../generation");var _generation2=_interopRequireDefault(_generation);var _messages=require("../messages");var messages=_interopRequireWildcard(_messages);var _util=require("../util");var util=_interopRequireWildcard(_util);var _transformationFile=require("../transformation/file");var _transformationFile2=_interopRequireDefault(_transformationFile);var _lodashCollectionEach=require("lodash/collection/each");var _lodashCollectionEach2=_interopRequireDefault(_lodashCollectionEach);var _types=require("../types");var t=_interopRequireWildcard(_types);function buildGlobal(namespace,builder){var body=[];var container=t.functionExpression(null,[t.identifier("global")],t.blockStatement(body));var tree=t.program([t.expressionStatement(t.callExpression(container,[util.template("helper-self-global")]))]);body.push(t.variableDeclaration("var",[t.variableDeclarator(namespace,t.assignmentExpression("=",t.memberExpression(t.identifier("global"),namespace),t.objectExpression([])))]));builder(body);return tree}function buildUmd(namespace,builder){var body=[];body.push(t.variableDeclaration("var",[t.variableDeclarator(namespace,t.identifier("global"))]));builder(body);var container=util.template("umd-commonjs-strict",{FACTORY_PARAMETERS:t.identifier("global"),BROWSER_ARGUMENTS:t.assignmentExpression("=",t.memberExpression(t.identifier("root"),namespace),t.objectExpression({})),COMMON_ARGUMENTS:t.identifier("exports"),AMD_ARGUMENTS:t.arrayExpression([t.literal("exports")]),FACTORY_BODY:body,UMD_ROOT:t.identifier("this")});return t.program([container])}function buildVar(namespace,builder){var body=[];body.push(t.variableDeclaration("var",[t.variableDeclarator(namespace,t.objectExpression({}))]));builder(body);return t.program(body)}function buildHelpers(body,namespace,whitelist){_lodashCollectionEach2["default"](_transformationFile2["default"].helpers,function(name){if(whitelist&&whitelist.indexOf(name)===-1)return;var key=t.identifier(t.toIdentifier(name));body.push(t.expressionStatement(t.assignmentExpression("=",t.memberExpression(namespace,key),util.template("helper-"+name))))})}exports["default"]=function(whitelist){var outputType=arguments.length<=1||arguments[1]===undefined?"global":arguments[1];var namespace=t.identifier("babelHelpers");var builder=function builder(body){return buildHelpers(body,namespace,whitelist)};var tree;var build={global:buildGlobal,umd:buildUmd,"var":buildVar}[outputType];if(build){tree=build(namespace,builder)}else{throw new Error(messages.get("unsupportedOutputType",outputType))}return _generation2["default"](tree).code};module.exports=exports["default"]},{"../generation":47,"../messages":60,"../transformation/file":63,"../types":196,"../util":199,"lodash/collection/each":437}],63:[function(require,module,exports){(function(process){"use strict";exports.__esModule=true;var _createClass=function(){function defineProperties(target,props){for(var i=0;i=0)continue;var group=pass.plugin.metadata.group;if(!pass.canTransform()||!group){stack.push(pass);continue}var mergeStack=[];var _arr4=_stack;for(var _i4=0;_i4<_arr4.length;_i4++){var _pass=_arr4[_i4];if(_pass.plugin.metadata.group===group){mergeStack.push(_pass);ignore.push(_pass)}}var visitors=[];var _arr5=mergeStack;for(var _i5=0;_i5<_arr5.length;_i5++){var _pass2=_arr5[_i5];visitors.push(_pass2.plugin.visitor)}var visitor=_traversal2["default"].visitors.merge(visitors);var mergePlugin=new _plugin2["default"](group,{visitor:visitor});stack.push(mergePlugin.buildPass(this))}return stack};File.prototype.set=function set(key,val){return this.data[key]=val};File.prototype.setDynamic=function setDynamic(key,fn){this.dynamicData[key]=fn};File.prototype.get=function get(key){var data=this.data[key];if(data){return data}else{var dynamic=this.dynamicData[key];if(dynamic){return this.set(key,dynamic())}}};File.prototype.resolveModuleSource=function resolveModuleSource(source){var resolveModuleSource=this.opts.resolveModuleSource;if(resolveModuleSource)source=resolveModuleSource(source,this.opts.filename);return source};File.prototype.addImport=function addImport(source,name,type){name=name||source;var id=this.dynamicImportIds[name];if(!id){source=this.resolveModuleSource(source);id=this.dynamicImportIds[name]=this.scope.generateUidIdentifier(name);var specifiers=[t.importDefaultSpecifier(id)];var declar=t.importDeclaration(specifiers,t.literal(source));declar._blockHoist=3;if(type){var modules=this.dynamicImportTypes[type]=this.dynamicImportTypes[type]||[];modules.push(declar)}if(this.transformers["es6.modules"].canTransform()){this.moduleFormatter.importSpecifier(specifiers[0],declar,this.dynamicImports,this.scope);this.moduleFormatter.hasLocalImports=true}else{this.dynamicImports.push(declar)}}return id};File.prototype.attachAuxiliaryComment=function attachAuxiliaryComment(node){var beforeComment=this.opts.auxiliaryCommentBefore;if(beforeComment){node.leadingComments=node.leadingComments||[];node.leadingComments.push({type:"CommentLine",value:" "+beforeComment})}var afterComment=this.opts.auxiliaryCommentAfter;if(afterComment){node.trailingComments=node.trailingComments||[];node.trailingComments.push({type:"CommentLine",value:" "+afterComment})}return node};File.prototype.addHelper=function addHelper(name){var isSolo=_lodashCollectionIncludes2["default"](File.soloHelpers,name);if(!isSolo&&!_lodashCollectionIncludes2["default"](File.helpers,name)){throw new ReferenceError("Unknown helper "+name)}var declar=this.declarations[name];if(declar)return declar;this.usedHelpers[name]=true;if(!isSolo){var generator=this.get("helperGenerator");var runtime=this.get("helpersNamespace");if(generator){return generator(name)}else if(runtime){var id=t.identifier(t.toIdentifier(name));return t.memberExpression(runtime,id)}}var ref=util.template("helper-"+name);var uid=this.declarations[name]=this.scope.generateUidIdentifier(name);if(t.isFunctionExpression(ref)&&!ref.id){ref.body._compact=true;ref._generated=true;ref.id=uid;ref.type="FunctionDeclaration";this.attachAuxiliaryComment(ref);this.path.unshiftContainer("body",ref)}else{ref._compact=true;this.scope.push({id:uid,init:ref,unique:true})}return uid};File.prototype.addTemplateObject=function addTemplateObject(helperName,strings,raw){var stringIds=raw.elements.map(function(string){return string.value});var name=helperName+"_"+raw.elements.length+"_"+stringIds.join(",");var declar=this.declarations[name];if(declar)return declar;var uid=this.declarations[name]=this.scope.generateUidIdentifier("templateObject");var helperId=this.addHelper(helperName);var init=t.callExpression(helperId,[strings,raw]);init._compact=true;this.scope.push({id:uid,init:init,_blockHoist:1.9});return uid};File.prototype.errorWithNode=function errorWithNode(node,msg){var Error=arguments.length<=2||arguments[2]===undefined?SyntaxError:arguments[2];var err;var loc=node&&(node.loc||node._loc);if(loc){err=new Error("Line "+loc.start.line+": "+msg);err.loc=loc.start}else{err=new Error("There's been an error on a dynamic node. This is almost certainly an internal error. Please report it.")}return err};File.prototype.mergeSourceMap=function mergeSourceMap(map){var opts=this.opts;var inputMap=opts.inputSourceMap;if(inputMap){map.sources[0]=inputMap.file;var inputMapConsumer=new _sourceMap2["default"].SourceMapConsumer(inputMap);var outputMapConsumer=new _sourceMap2["default"].SourceMapConsumer(map);var outputMapGenerator=_sourceMap2["default"].SourceMapGenerator.fromSourceMap(outputMapConsumer);outputMapGenerator.applySourceMap(inputMapConsumer);var mergedMap=outputMapGenerator.toJSON();mergedMap.sources=inputMap.sources;mergedMap.file=inputMap.file;return mergedMap}return map};File.prototype.getModuleFormatter=function getModuleFormatter(type){if(_lodashLangIsFunction2["default"](type)||!_modules2["default"][type]){this.log.deprecate("Custom module formatters are deprecated and will be removed in the next major. Please use Babel plugins instead.")}var ModuleFormatter=_lodashLangIsFunction2["default"](type)?type:_modules2["default"][type];if(!ModuleFormatter){var loc=_tryResolve2["default"].relative(type);if(loc)ModuleFormatter=require(loc)}if(!ModuleFormatter){throw new ReferenceError("Unknown module formatter type "+JSON.stringify(type))}return new ModuleFormatter(this)};File.prototype.parse=function parse(code){var opts=this.opts;var parseOpts={highlightCode:opts.highlightCode,nonStandard:opts.nonStandard,sourceType:opts.sourceType,filename:opts.filename,plugins:{}};var features=parseOpts.features={};for(var key in this.transformers){var transformer=this.transformers[key];features[key]=transformer.canTransform()}parseOpts.looseModules=this.isLoose("es6.modules");parseOpts.strictMode=features.strict;this.log.debug("Parse start");var ast=_helpersParse2["default"](code,parseOpts);this.log.debug("Parse stop");return ast};File.prototype._addAst=function _addAst(ast){this.path=_traversalPath2["default"].get({hub:this.hub,parentPath:null,parent:ast,container:ast,key:"program"}).setContext();this.scope=this.path.scope;this.ast=ast};File.prototype.addAst=function addAst(ast){this.log.debug("Start set AST");this._addAst(ast);this.log.debug("End set AST");this.log.debug("Start module formatter init");var modFormatter=this.moduleFormatter=this.getModuleFormatter(this.opts.modules);if(modFormatter.init&&this.transformers["es6.modules"].canTransform()){modFormatter.init()}this.log.debug("End module formatter init")};File.prototype.transform=function transform(){this.call("pre");var _arr6=this.transformerStack;for(var _i6=0;_i6<_arr6.length;_i6++){var pass=_arr6[_i6];pass.transform()}this.call("post");return this.generate()};File.prototype.wrap=function wrap(code,callback){code=code+"";try{if(this.shouldIgnore()){return this.makeResult({code:code,ignored:true})}else{return callback()}}catch(err){if(err._babel){throw err}else{err._babel=true}var message=err.message=this.opts.filename+": "+err.message;var loc=err.loc;if(loc){err.codeFrame=_helpersCodeFrame2["default"](code,loc.line,loc.column+1,this.opts);message+="\n"+err.codeFrame}if(process.browser){err.message=message}if(err.stack){var newStack=err.stack.replace(err.message,message);try{err.stack=newStack}catch(e){}}throw err}};File.prototype.addCode=function addCode(code){code=(code||"")+"";code=this.parseInputSourceMap(code);this.code=code};File.prototype.parseCode=function parseCode(){this.parseShebang();var ast=this.parse(this.code);this.addAst(ast)};File.prototype.shouldIgnore=function shouldIgnore(){var opts=this.opts;return util.shouldIgnore(opts.filename,opts.ignore,opts.only)};File.prototype.call=function call(key){var _arr7=this.uncollapsedTransformerStack;for(var _i7=0;_i7<_arr7.length;_i7++){var pass=_arr7[_i7];var fn=pass.plugin[key];if(fn)fn(this)}};File.prototype.parseInputSourceMap=function parseInputSourceMap(code){var opts=this.opts;if(opts.inputSourceMap!==false){var inputMap=_convertSourceMap2["default"].fromSource(code);if(inputMap){opts.inputSourceMap=inputMap.toObject();code=_convertSourceMap2["default"].removeComments(code)}}return code};File.prototype.parseShebang=function parseShebang(){var shebangMatch=_shebangRegex2["default"].exec(this.code);if(shebangMatch){this.shebang=shebangMatch[0];this.code=this.code.replace(_shebangRegex2["default"],"")}};File.prototype.makeResult=function makeResult(_ref){var code=_ref.code;var _ref$map=_ref.map;var map=_ref$map===undefined?null:_ref$map;var ast=_ref.ast;var ignored=_ref.ignored;var result={metadata:null,ignored:!!ignored,code:null,ast:null,map:map};if(this.opts.code){result.code=code}if(this.opts.ast){result.ast=ast}if(this.opts.metadata){result.metadata=this.metadata;result.metadata.usedHelpers=Object.keys(this.usedHelpers)}return result};File.prototype.generate=function generate(){var opts=this.opts;var ast=this.ast;var result={ast:ast};if(!opts.code)return this.makeResult(result);this.log.debug("Generation start");var _result=_generation2["default"](ast,opts,this.code);result.code=_result.code;result.map=_result.map;this.log.debug("Generation end");if(this.shebang){result.code=this.shebang+"\n"+result.code}if(result.map){result.map=this.mergeSourceMap(result.map)}if(opts.sourceMaps==="inline"||opts.sourceMaps==="both"){result.code+="\n"+_convertSourceMap2["default"].fromObject(result.map).toComment()}if(opts.sourceMaps==="inline"){result.map=null}return this.makeResult(result)};_createClass(File,null,[{key:"helpers",value:["inherits","defaults","create-class","create-decorated-class","create-decorated-object","define-decorated-property-descriptor","tagged-template-literal","tagged-template-literal-loose","to-array","to-consumable-array","sliced-to-array","sliced-to-array-loose","object-without-properties","has-own","slice","bind","define-property","async-to-generator","interop-export-wildcard","interop-require-wildcard","interop-require-default","typeof","extends","get","set","new-arrow-check","class-call-check","object-destructuring-empty","temporal-undefined","temporal-assert-defined","self-global","default-props","instanceof","interop-require"],enumerable:true},{key:"soloHelpers",value:[],enumerable:true}]);return File}();exports["default"]=File;module.exports=exports["default"]}).call(this,require("_process"))},{"../../generation":47,"../../helpers/code-frame":55,"../../helpers/parse":59,"../../traversal":165,"../../traversal/hub":164,"../../traversal/path":172,"../../types":196,"../../util":199,"../modules":91,"../plugin":99,"./logger":64,"./options/option-manager":67,"./plugin-manager":69,_process:12,"convert-source-map":225,"lodash/collection/includes":439,"lodash/lang/isFunction":526,"lodash/object/defaults":536,path:11,"shebang-regex":614,"source-map":616,"try-resolve":630}],64:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var _debugNode=require("debug/node");var _debugNode2=_interopRequireDefault(_debugNode);var verboseDebug=_debugNode2["default"]("babel:verbose");var generalDebug=_debugNode2["default"]("babel");var seenDeprecatedMessages=[];var Logger=function(){function Logger(file,filename){_classCallCheck(this,Logger);this.filename=filename;this.file=file}Logger.prototype._buildMessage=function _buildMessage(msg){var parts="[BABEL] "+this.filename;if(msg)parts+=": "+msg;return parts};Logger.prototype.warn=function warn(msg){console.warn(this._buildMessage(msg))};Logger.prototype.error=function error(msg){var Constructor=arguments.length<=1||arguments[1]===undefined?Error:arguments[1];throw new Constructor(this._buildMessage(msg))};Logger.prototype.deprecate=function deprecate(msg){if(this.file.opts&&this.file.opts.suppressDeprecationMessages)return;msg=this._buildMessage(msg);if(seenDeprecatedMessages.indexOf(msg)>=0)return;seenDeprecatedMessages.push(msg);console.error(msg)};Logger.prototype.verbose=function verbose(msg){if(verboseDebug.enabled)verboseDebug(this._buildMessage(msg))};Logger.prototype.debug=function debug(msg){if(generalDebug.enabled)generalDebug(this._buildMessage(msg))};Logger.prototype.deopt=function deopt(node,msg){this.debug(msg)};return Logger}();exports["default"]=Logger;module.exports=exports["default"]},{"debug/node":407}],65:[function(require,module,exports){module.exports={filename:{type:"filename",description:"filename to use when reading from stdin - this will be used in source-maps, errors etc","default":"unknown",shorthand:"f"},filenameRelative:{hidden:true,type:"string"},inputSourceMap:{hidden:true},extra:{hidden:true,"default":{}},env:{hidden:true,"default":{}},moduleId:{description:"specify a custom name for module ids",type:"string"},getModuleId:{hidden:true},retainLines:{type:"boolean","default":false,description:"retain line numbers - will result in really ugly code"},nonStandard:{type:"boolean","default":true,description:"enable/disable support for JSX and Flow (on by default)"},experimental:{type:"boolean",description:"allow use of experimental transformers","default":false},highlightCode:{description:"enable/disable ANSI syntax highlighting of code frames (on by default)",type:"boolean","default":true},suppressDeprecationMessages:{type:"boolean","default":false,hidden:true},resolveModuleSource:{hidden:true},stage:{description:"ECMAScript proposal stage version to allow [0-4]",shorthand:"e",type:"number","default":2},blacklist:{type:"transformerList",description:"blacklist of transformers to NOT use",shorthand:"b","default":[]},whitelist:{type:"transformerList",optional:true,description:"whitelist of transformers to ONLY use",shorthand:"l"},optional:{type:"transformerList",description:"list of optional transformers to enable","default":[]},modules:{type:"string",description:"module formatter type to use [common]","default":"common",shorthand:"m"},moduleIds:{type:"boolean","default":false,shorthand:"M",description:"insert an explicit id for modules"},loose:{type:"transformerList",description:"list of transformers to enable loose mode ON",shorthand:"L"},jsxPragma:{type:"string",description:"custom pragma to use with JSX (same functionality as @jsx comments)", +"default":"React.createElement",shorthand:"P"},plugins:{type:"list",description:"","default":[]},ignore:{type:"list",description:"list of glob paths to **not** compile","default":[]},only:{type:"list",description:"list of glob paths to **only** compile"},code:{hidden:true,"default":true,type:"boolean"},metadata:{hidden:true,"default":true,type:"boolean"},ast:{hidden:true,"default":true,type:"boolean"},comments:{type:"boolean","default":true,description:"strip/output comments in generated output (on by default)"},shouldPrintComment:{hidden:true,description:"optional callback to control whether a comment should be inserted, when this is used the comments option is ignored"},compact:{type:"booleanString","default":"auto",description:"do not include superfluous whitespace characters and line terminators [true|false|auto]"},keepModuleIdExtensions:{type:"boolean",description:"keep extensions when generating module ids","default":false,shorthand:"k"},auxiliaryComment:{deprecated:"renamed to auxiliaryCommentBefore",shorthand:"a",alias:"auxiliaryCommentBefore"},auxiliaryCommentBefore:{type:"string","default":"",description:"attach a comment before all helper declarations and auxiliary code"},auxiliaryCommentAfter:{type:"string","default":"",description:"attach a comment after all helper declarations and auxiliary code"},externalHelpers:{type:"boolean","default":false,shorthand:"r",description:"uses a reference to `babelHelpers` instead of placing helpers at the top of your code."},metadataUsedHelpers:{deprecated:"Not required anymore as this is enabled by default",type:"boolean","default":false,hidden:true},sourceMap:{alias:"sourceMaps",hidden:true},sourceMaps:{type:"booleanString",description:"[true|false|inline]","default":false,shorthand:"s"},sourceMapName:{alias:"sourceMapTarget",description:"DEPRECATED - Please use sourceMapTarget"},sourceMapTarget:{type:"string",description:"set `file` on returned source map"},sourceFileName:{type:"string",description:"set `sources[0]` on returned source map"},sourceRoot:{type:"filename",description:"the root from which all sources are relative"},moduleRoot:{type:"filename",description:"optional prefix for the AMD module formatter that will be prepend to the filename on module definitions"},breakConfig:{type:"boolean","default":false,hidden:true,description:"stop trying to load .babelrc files"},babelrc:{description:"Specify a custom list of babelrc files to use",type:"list"},sourceType:{description:"","default":"module"}}},{}],66:[function(require,module,exports){"use strict";exports.__esModule=true;exports.validateOption=validateOption;exports.normaliseOptions=normaliseOptions;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _parsers=require("./parsers");var parsers=_interopRequireWildcard(_parsers);var _config=require("./config");var _config2=_interopRequireDefault(_config);exports.config=_config2["default"];function validateOption(key,val,pipeline){var opt=_config2["default"][key];var parser=opt&&parsers[opt.type];if(parser&&parser.validate){return parser.validate(key,val,pipeline)}else{return val}}function normaliseOptions(){var options=arguments.length<=0||arguments[0]===undefined?{}:arguments[0];for(var key in options){var val=options[key];if(val==null)continue;var opt=_config2["default"][key];if(!opt)continue;var parser=parsers[opt.type];if(parser)val=parser(val);options[key]=val}return options}},{"./config":65,"./parsers":68}],67:[function(require,module,exports){(function(process){"use strict";exports.__esModule=true;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var _index=require("./index");var _json5=require("json5");var _json52=_interopRequireDefault(_json5);var _pathIsAbsolute=require("path-is-absolute");var _pathIsAbsolute2=_interopRequireDefault(_pathIsAbsolute);var _pathExists=require("path-exists");var _pathExists2=_interopRequireDefault(_pathExists);var _lodashLangClone=require("lodash/lang/clone");var _lodashLangClone2=_interopRequireDefault(_lodashLangClone);var _helpersMerge=require("../../../helpers/merge");var _helpersMerge2=_interopRequireDefault(_helpersMerge);var _config=require("./config");var _config2=_interopRequireDefault(_config);var _path=require("path");var _path2=_interopRequireDefault(_path);var _fs=require("fs");var _fs2=_interopRequireDefault(_fs);var existsCache={};var jsonCache={};var BABELIGNORE_FILENAME=".babelignore";var BABELRC_FILENAME=".babelrc";var PACKAGE_FILENAME="package.json";function exists(filename){var cached=existsCache[filename];if(cached!=null){return cached}else{return existsCache[filename]=_pathExists2["default"].sync(filename)}}var OptionManager=function(){function OptionManager(log,pipeline){_classCallCheck(this,OptionManager);this.resolvedConfigs=[];this.options=OptionManager.createBareOptions();this.pipeline=pipeline;this.log=log}OptionManager.createBareOptions=function createBareOptions(){var opts={};for(var key in _config2["default"]){var opt=_config2["default"][key];opts[key]=_lodashLangClone2["default"](opt["default"])}return opts};OptionManager.prototype.addConfig=function addConfig(loc,key){var json=arguments.length<=2||arguments[2]===undefined?_json52["default"]:arguments[2];if(this.resolvedConfigs.indexOf(loc)>=0)return;var content=_fs2["default"].readFileSync(loc,"utf8");var opts;try{opts=jsonCache[content]=jsonCache[content]||json.parse(content);if(key)opts=opts[key]}catch(err){err.message=loc+": Error while parsing JSON - "+err.message;throw err}this.mergeOptions(opts,loc);this.resolvedConfigs.push(loc)};OptionManager.prototype.mergeOptions=function mergeOptions(opts){var alias=arguments.length<=1||arguments[1]===undefined?"foreign":arguments[1];if(!opts)return;for(var key in opts){if(key[0]==="_")continue;var option=_config2["default"][key];if(!option)this.log.error("Unknown option: "+alias+"."+key,ReferenceError)}_index.normaliseOptions(opts);_helpersMerge2["default"](this.options,opts)};OptionManager.prototype.addIgnoreConfig=function addIgnoreConfig(loc){var file=_fs2["default"].readFileSync(loc,"utf8");var lines=file.split("\n");lines=lines.map(function(line){return line.replace(/#(.*?)$/,"").trim()}).filter(function(line){return!!line});this.mergeOptions({ignore:lines},loc)};OptionManager.prototype.findConfigs=function findConfigs(loc){if(!loc)return;if(!_pathIsAbsolute2["default"](loc)){loc=_path2["default"].join(process.cwd(),loc)}while(loc!==(loc=_path2["default"].dirname(loc))){if(this.options.breakConfig)return;var configLoc=_path2["default"].join(loc,BABELRC_FILENAME);if(exists(configLoc))this.addConfig(configLoc);var pkgLoc=_path2["default"].join(loc,PACKAGE_FILENAME);if(exists(pkgLoc))this.addConfig(pkgLoc,"babel",JSON);var ignoreLoc=_path2["default"].join(loc,BABELIGNORE_FILENAME);if(exists(ignoreLoc))this.addIgnoreConfig(ignoreLoc)}};OptionManager.prototype.normaliseOptions=function normaliseOptions(){var opts=this.options;for(var key in _config2["default"]){var option=_config2["default"][key];var val=opts[key];if(!val&&option.optional)continue;if(this.log&&val&&option.deprecated){this.log.deprecate("Deprecated option "+key+": "+option.deprecated)}if(this.pipeline&&val){val=_index.validateOption(key,val,this.pipeline)}if(option.alias){opts[option.alias]=opts[option.alias]||val}else{opts[key]=val}}};OptionManager.prototype.init=function init(opts){this.mergeOptions(opts,"direct");if(opts.babelrc){var _arr=opts.babelrc;for(var _i=0;_i<_arr.length;_i++){var loc=_arr[_i];this.addConfig(loc)}}if(opts.babelrc!==false){this.findConfigs(opts.filename)}var envKey=process.env.BABEL_ENV||process.env.NODE_ENV||"development";if(this.options.env){this.mergeOptions(this.options.env[envKey],"direct.env."+envKey)}this.normaliseOptions(opts);return this.options};return OptionManager}();exports["default"]=OptionManager;module.exports=exports["default"]}).call(this,require("_process"))},{"../../../helpers/merge":56,"./config":65,"./index":66,_process:12,fs:1,json5:428,"lodash/lang/clone":520,path:11,"path-exists":552,"path-is-absolute":553}],68:[function(require,module,exports){"use strict";exports.__esModule=true;exports.transformerList=transformerList;exports.number=number;exports.boolean=boolean;exports.booleanString=booleanString;exports.list=list;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _slash=require("slash");var _slash2=_interopRequireDefault(_slash);var _util=require("../../../util");var util=_interopRequireWildcard(_util);function transformerList(val){return util.arrayify(val)}transformerList.validate=function(key,val,pipeline){if(val.indexOf("all")>=0||val.indexOf(true)>=0){val=Object.keys(pipeline.transformers)}return pipeline._ensureTransformerNames(key,val)};function number(val){return+val}var filename=_slash2["default"];exports.filename=filename;function boolean(val){return!!val}function booleanString(val){return util.booleanify(val)}function list(val){return util.list(val)}},{"../../../util":199,slash:615}],69:[function(require,module,exports){"use strict";exports.__esModule=true;var _createClass=function(){function defineProperties(target,props){for(var i=0;i=3){callExpr._prettyCall=true}return t.inherits(callExpr,node)}};return visitor};module.exports=exports["default"]},{"../../messages":60,"../../types":196,"./react":79,esutils:413,"lodash/lang/isString":532}],73:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../types");var t=_interopRequireWildcard(_types);var visitor={enter:function enter(node,parent,scope,state){if(this.isThisExpression()||this.isReferencedIdentifier({name:"arguments"})){state.found=true;this.stop()}},Function:function Function(){this.skip()}};exports["default"]=function(node,scope){var container=t.functionExpression(null,[],node.body,node.generator,node.async);var callee=container;var args=[];var state={found:false};scope.traverse(node,visitor,state);if(state.found){callee=t.memberExpression(container,t.identifier("apply"));args=[t.thisExpression(),t.identifier("arguments")]}var call=t.callExpression(callee,args);if(node.generator)call=t.yieldExpression(call,true);return t.returnStatement(call)};module.exports=exports["default"]},{"../../types":196}],74:[function(require,module,exports){"use strict";exports.__esModule=true;exports.push=push;exports.hasComputed=hasComputed;exports.toComputedObjectFromClass=toComputedObjectFromClass;exports.toClassObject=toClassObject;exports.toDefineObject=toDefineObject;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _lodashCollectionEach=require("lodash/collection/each");var _lodashCollectionEach2=_interopRequireDefault(_lodashCollectionEach);var _lodashObjectHas=require("lodash/object/has");var _lodashObjectHas2=_interopRequireDefault(_lodashObjectHas);var _types=require("../../types");var t=_interopRequireWildcard(_types);function push(mutatorMap,node,kind,file){var alias=t.toKeyAlias(node);var map={};if(_lodashObjectHas2["default"](mutatorMap,alias))map=mutatorMap[alias];mutatorMap[alias]=map;map._inherits=map._inherits||[];map._inherits.push(node);map._key=node.key;if(node.computed){map._computed=true}if(node.decorators){var decorators=map.decorators=map.decorators||t.arrayExpression([]);decorators.elements=decorators.elements.concat(node.decorators.map(function(dec){return dec.expression}).reverse())}if(map.value||map.initializer){throw file.errorWithNode(node,"Key conflict with sibling node")}if(node.value){if(node.kind==="init")kind="value";if(node.kind==="get")kind="get";if(node.kind==="set")kind="set";t.inheritsComments(node.value,node);map[kind]=node.value}return map}function hasComputed(mutatorMap){for(var key in mutatorMap){if(mutatorMap[key]._computed){return true}}return false}function toComputedObjectFromClass(obj){var objExpr=t.arrayExpression([]);for(var i=0;i=0}function pullFlag(node,flag){var flags=node.regex.flags.split("");if(node.regex.flags.indexOf(flag)<0)return;_lodashArrayPull2["default"](flags,flag);node.regex.flags=flags.join("")}},{"../../types":196,"lodash/array/pull":434}],81:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../types");var t=_interopRequireWildcard(_types);var awaitVisitor={Function:function Function(){this.skip()},AwaitExpression:function AwaitExpression(node){node.type="YieldExpression";if(node.all){node.all=false;node.argument=t.callExpression(t.memberExpression(t.identifier("Promise"),t.identifier("all")),[node.argument])}}};var referenceVisitor={ReferencedIdentifier:function ReferencedIdentifier(node,parent,scope,state){var name=state.id.name;if(node.name===name&&scope.bindingIdentifierEquals(name,state.id)){return state.ref=state.ref||scope.generateUidIdentifier(name)}}};exports["default"]=function(path,callId){var node=path.node;node.async=false;node.generator=true;path.traverse(awaitVisitor,state);var call=t.callExpression(callId,[node]);var id=node.id;node.id=null;if(t.isFunctionDeclaration(node)){var declar=t.variableDeclaration("let",[t.variableDeclarator(id,call)]);declar._blockHoist=true;return declar}else{if(id){var state={id:id};path.traverse(referenceVisitor,state);if(state.ref){path.scope.parent.push({id:state.ref});return t.assignmentExpression("=",state.ref,call)}}return call}};module.exports=exports["default"]},{"../../types":196}],82:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var _messages=require("../../messages");var messages=_interopRequireWildcard(_messages);var _types=require("../../types");var t=_interopRequireWildcard(_types);function isIllegalBareSuper(node,parent){if(!t.isSuper(node))return false;if(t.isMemberExpression(parent,{computed:false}))return false;if(t.isCallExpression(parent,{callee:node}))return false;return true}function isMemberExpressionSuper(node){return t.isMemberExpression(node)&&t.isSuper(node.object)}var visitor={enter:function enter(node,parent,scope,state){var topLevel=state.topLevel;var self=state.self;if(t.isFunction(node)&&!t.isArrowFunctionExpression(node)){self.traverseLevel(this,false);return this.skip()}if(t.isProperty(node,{method:true})||t.isMethodDefinition(node)){return this.skip()}var getThisReference=topLevel?t.thisExpression:self.getThisReference.bind(self);var callback=self.specHandle;if(self.isLoose)callback=self.looseHandle;var result=callback.call(self,this,getThisReference);if(result)this.hasSuper=true;if(result===true)return;return result}};var ReplaceSupers=function(){function ReplaceSupers(opts){var inClass=arguments.length<=1||arguments[1]===undefined?false:arguments[1];_classCallCheck(this,ReplaceSupers);this.topLevelThisReference=opts.topLevelThisReference;this.methodPath=opts.methodPath;this.methodNode=opts.methodNode;this.superRef=opts.superRef;this.isStatic=opts.isStatic;this.hasSuper=false;this.inClass=inClass;this.isLoose=opts.isLoose;this.scope=opts.scope;this.file=opts.file;this.opts=opts}ReplaceSupers.prototype.getObjectRef=function getObjectRef(){return this.opts.objectRef||this.opts.getObjectRef()};ReplaceSupers.prototype.setSuperProperty=function setSuperProperty(property,value,isComputed,thisExpression){return t.callExpression(this.file.addHelper("set"),[t.callExpression(t.memberExpression(t.identifier("Object"),t.identifier("getPrototypeOf")),[this.isStatic?this.getObjectRef():t.memberExpression(this.getObjectRef(),t.identifier("prototype"))]),isComputed?property:t.literal(property.name),value,thisExpression])};ReplaceSupers.prototype.getSuperProperty=function getSuperProperty(property,isComputed,thisExpression){return t.callExpression(this.file.addHelper("get"),[t.callExpression(t.memberExpression(t.identifier("Object"),t.identifier("getPrototypeOf")),[this.isStatic?this.getObjectRef():t.memberExpression(this.getObjectRef(),t.identifier("prototype"))]),isComputed?property:t.literal(property.name),thisExpression])};ReplaceSupers.prototype.replace=function replace(){this.traverseLevel(this.methodPath.get("value"),true)};ReplaceSupers.prototype.traverseLevel=function traverseLevel(path,topLevel){var state={self:this,topLevel:topLevel};path.traverse(visitor,state)};ReplaceSupers.prototype.getThisReference=function getThisReference(){if(this.topLevelThisReference){return this.topLevelThisReference}else{var ref=this.topLevelThisReference=this.scope.generateUidIdentifier("this");this.methodNode.value.body.body.unshift(t.variableDeclaration("var",[t.variableDeclarator(this.topLevelThisReference,t.thisExpression())]));return ref}};ReplaceSupers.prototype.getLooseSuperProperty=function getLooseSuperProperty(id,parent){var methodNode=this.methodNode;var methodName=methodNode.key;var superRef=this.superRef||t.identifier("Function");if(parent.property===id){return}else if(t.isCallExpression(parent,{callee:id})){parent.arguments.unshift(t.thisExpression());if(methodName.name==="constructor"){if(parent.arguments.length===2&&t.isSpreadElement(parent.arguments[1])&&t.isIdentifier(parent.arguments[1].argument,{name:"arguments"})){parent.arguments[1]=parent.arguments[1].argument;return t.memberExpression(superRef,t.identifier("apply"))}else{return t.memberExpression(superRef,t.identifier("call"))}}else{id=superRef;if(!methodNode["static"]){id=t.memberExpression(id,t.identifier("prototype"))}id=t.memberExpression(id,methodName,methodNode.computed);return t.memberExpression(id,t.identifier("call"))}}else if(t.isMemberExpression(parent)&&!methodNode["static"]){return t.memberExpression(superRef,t.identifier("prototype"))}else{return superRef}};ReplaceSupers.prototype.looseHandle=function looseHandle(path,getThisReference){var node=path.node;if(path.isSuper()){return this.getLooseSuperProperty(node,path.parent)}else if(path.isCallExpression()){var callee=node.callee;if(!t.isMemberExpression(callee))return;if(!t.isSuper(callee.object))return;t.appendToMemberExpression(callee,t.identifier("call"));node.arguments.unshift(getThisReference());return true}};ReplaceSupers.prototype.specHandleAssignmentExpression=function specHandleAssignmentExpression(ref,path,node,getThisReference){if(node.operator==="="){return this.setSuperProperty(node.left.property,node.right,node.left.computed,getThisReference())}else{ref=ref||path.scope.generateUidIdentifier("ref");return[t.variableDeclaration("var",[t.variableDeclarator(ref,node.left)]),t.expressionStatement(t.assignmentExpression("=",node.left,t.binaryExpression(node.operator[0],ref,node.right)))]}};ReplaceSupers.prototype.specHandle=function specHandle(path,getThisReference){var methodNode=this.methodNode;var property;var computed;var args;var thisReference;var parent=path.parent;var node=path.node;if(isIllegalBareSuper(node,parent)){throw path.errorWithNode(messages.get("classesIllegalBareSuper"))}if(t.isCallExpression(node)){var callee=node.callee;if(t.isSuper(callee)){property=methodNode.key;computed=methodNode.computed;args=node.arguments;if(methodNode.key.name!=="constructor"||!this.inClass){var methodName=methodNode.key.name||"METHOD_NAME";throw this.file.errorWithNode(node,messages.get("classesIllegalSuperCall",methodName))}}else if(isMemberExpressionSuper(callee)){property=callee.property;computed=callee.computed;args=node.arguments}}else if(t.isMemberExpression(node)&&t.isSuper(node.object)){property=node.property;computed=node.computed}else if(t.isUpdateExpression(node)&&isMemberExpressionSuper(node.argument)){var binary=t.binaryExpression(node.operator[0],node.argument,t.literal(1));if(node.prefix){return this.specHandleAssignmentExpression(null,path,binary,getThisReference)}else{var ref=path.scope.generateUidIdentifier("ref");return this.specHandleAssignmentExpression(ref,path,binary,getThisReference).concat(t.expressionStatement(ref))}}else if(t.isAssignmentExpression(node)&&isMemberExpressionSuper(node.left)){return this.specHandleAssignmentExpression(null,path,node,getThisReference)}if(!property)return;thisReference=getThisReference();var superProperty=this.getSuperProperty(property,computed,thisReference);if(args){if(args.length===1&&t.isSpreadElement(args[0])){return t.callExpression(t.memberExpression(superProperty,t.identifier("apply")),[thisReference,args[0].argument])}else{return t.callExpression(t.memberExpression(superProperty,t.identifier("call")),[thisReference].concat(args))}}else{return superProperty}};return ReplaceSupers}();exports["default"]=ReplaceSupers;module.exports=exports["default"]},{"../../messages":60,"../../types":196}],83:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _pipeline=require("./pipeline");var _pipeline2=_interopRequireDefault(_pipeline);var _transformers=require("./transformers");var _transformers2=_interopRequireDefault(_transformers);var _transformersDeprecated=require("./transformers/deprecated");var _transformersDeprecated2=_interopRequireDefault(_transformersDeprecated);var _transformersAliases=require("./transformers/aliases");var _transformersAliases2=_interopRequireDefault(_transformersAliases);var _transformersFilters=require("./transformers/filters");var filters=_interopRequireWildcard(_transformersFilters);var pipeline=new _pipeline2["default"];for(var key in _transformers2["default"]){var transformer=_transformers2["default"][key];if(typeof transformer==="object"){var metadata=transformer.metadata=transformer.metadata||{};metadata.group=metadata.group||"builtin-basic"}}pipeline.addTransformers(_transformers2["default"]);pipeline.addDeprecated(_transformersDeprecated2["default"]);pipeline.addAliases(_transformersAliases2["default"]);pipeline.addFilter(filters.internal);pipeline.addFilter(filters.blacklist);pipeline.addFilter(filters.whitelist);pipeline.addFilter(filters.stage);pipeline.addFilter(filters.optional);var transform=pipeline.transform.bind(pipeline);transform.fromAst=pipeline.transformFromAst.bind(pipeline);transform.pipeline=pipeline;exports["default"]=transform;module.exports=exports["default"]},{"./pipeline":97,"./transformers":143,"./transformers/aliases":101,"./transformers/deprecated":102,"./transformers/filters":142}],84:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var _libMetadata=require("./lib/metadata");var metadataVisitor=_interopRequireWildcard(_libMetadata);var _messages=require("../../messages");var messages=_interopRequireWildcard(_messages);var _libRemaps=require("./lib/remaps");var _libRemaps2=_interopRequireDefault(_libRemaps);var _helpersObject=require("../../helpers/object");var _helpersObject2=_interopRequireDefault(_helpersObject);var _util=require("../../util");var util=_interopRequireWildcard(_util);var _types=require("../../types");var t=_interopRequireWildcard(_types);var DefaultFormatter=function(){function DefaultFormatter(file){_classCallCheck(this,DefaultFormatter);this.sourceScopes=_helpersObject2["default"]();this.defaultIds=_helpersObject2["default"]();this.ids=_helpersObject2["default"]();this.remaps=new _libRemaps2["default"](file,this);this.scope=file.scope;this.file=file;this.hasNonDefaultExports=false;this.hasLocalExports=false;this.hasLocalImports=false;this.localExports=_helpersObject2["default"]();this.localImports=_helpersObject2["default"]();this.metadata=file.metadata.modules;this.getMetadata()}DefaultFormatter.prototype.addScope=function addScope(path){var source=path.node.source&&path.node.source.value;if(!source)return;var existingScope=this.sourceScopes[source];if(existingScope&&existingScope!==path.scope){throw path.errorWithNode(messages.get("modulesDuplicateDeclarations"))}this.sourceScopes[source]=path.scope};DefaultFormatter.prototype.isModuleType=function isModuleType(node,type){var modules=this.file.dynamicImportTypes[type];return modules&&modules.indexOf(node)>=0};DefaultFormatter.prototype.transform=function transform(){this.remapAssignments()};DefaultFormatter.prototype.doDefaultExportInterop=function doDefaultExportInterop(node){return(t.isExportDefaultDeclaration(node)||t.isSpecifierDefault(node))&&!this.noInteropRequireExport&&!this.hasNonDefaultExports};DefaultFormatter.prototype.getMetadata=function getMetadata(){var has=false;var _arr=this.file.ast.program.body;for(var _i=0;_i<_arr.length;_i++){var node=_arr[_i];if(t.isModuleDeclaration(node)){has=true;break}}if(has||this.isLoose()){this.file.path.traverse(metadataVisitor,this)}};DefaultFormatter.prototype.remapAssignments=function remapAssignments(){if(this.hasLocalExports||this.hasLocalImports){this.remaps.run()}};DefaultFormatter.prototype.remapExportAssignment=function remapExportAssignment(node,exported){var assign=node;for(var i=0;i=0)continue;var msgType="pluginInvalidProperty";if(t.TYPES.indexOf(key)>=0)msgType="pluginInvalidPropertyVisitor";throw new Error(messages.get(msgType,name,key))}for(var key in plugin.metadata){if(VALID_METADATA_PROPERTES.indexOf(key)>=0)continue;throw new Error(messages.get("pluginInvalidProperty",name,"metadata."+key))}};Plugin.prototype.normalize=function normalize(visitor){_traversal2["default"].explode(visitor);return visitor};Plugin.prototype.buildPass=function buildPass(file){if(!(file instanceof _file2["default"])){throw new TypeError(messages.get("pluginNotFile",this.key))}return new _pluginPass2["default"](file,this)};return Plugin}();exports["default"]=Plugin;module.exports=exports["default"]},{"../messages":60,"../traversal":165,"../types":196,"./file":63,"./plugin-pass":98,"lodash/lang/clone":520,"lodash/object/assign":535}],100:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var _plugin=require("./plugin");var _plugin2=_interopRequireDefault(_plugin);var Transformer=function Transformer(key,obj){_classCallCheck(this,Transformer);var plugin={};plugin.metadata=obj.metadata;delete obj.metadata;plugin.visitor=obj;return new _plugin2["default"](key,plugin)};exports["default"]=Transformer;module.exports=exports["default"]},{"./plugin":99}],101:[function(require,module,exports){module.exports={useStrict:"strict","es5.runtime":"runtime","es6.runtime":"runtime","minification.inlineExpressions":"minification.constantFolding"}},{}],102:[function(require,module,exports){module.exports={selfContained:"runtime","unicode-regex":"regex.unicode","spec.typeofSymbol":"es6.spec.symbols","es6.symbols":"es6.spec.symbols","es6.blockScopingTDZ":"es6.spec.blockScoping","utility.inlineExpressions":"minification.constantFolding","utility.deadCodeElimination":"minification.deadCodeElimination","utility.removeConsoleCalls":"minification.removeConsole","utility.removeDebugger":"minification.removeDebugger","es6.parameters.rest":"es6.parameters","es6.parameters.default":"es6.parameters"}},{}],103:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={group:"builtin-trailing"};exports.metadata=metadata;var visitor={MemberExpression:{exit:function exit(node){var prop=node.property;if(!node.computed&&t.isIdentifier(prop)&&!t.isValidIdentifier(prop.name)){node.property=t.literal(prop.name);node.computed=true}}}};exports.visitor=visitor},{"../../../types":196}],104:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={group:"builtin-trailing"};exports.metadata=metadata;var visitor={Property:{exit:function exit(node){var key=node.key;if(!node.computed&&t.isIdentifier(key)&&!t.isValidIdentifier(key.name)){node.key=t.literal(key.name)}}}};exports.visitor=visitor},{"../../../types":196}],105:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _helpersDefineMap=require("../../helpers/define-map");var defineMap=_interopRequireWildcard(_helpersDefineMap);var _types=require("../../../types");var t=_interopRequireWildcard(_types);var visitor={ObjectExpression:function ObjectExpression(node,parent,scope,file){var hasAny=false;var _arr=node.properties;for(var _i=0;_i<_arr.length;_i++){var prop=_arr[_i];if(prop.kind==="get"||prop.kind==="set"){hasAny=true;break}}if(!hasAny)return;var mutatorMap={};node.properties=node.properties.filter(function(prop){if(prop.kind==="get"||prop.kind==="set"){defineMap.push(mutatorMap,prop,prop.kind,file);return false}else{return true}});return t.callExpression(t.memberExpression(t.identifier("Object"),t.identifier("defineProperties")),[node,defineMap.toDefineObject(mutatorMap)])}};exports.visitor=visitor},{"../../../types":196,"../../helpers/define-map":74}],106:[function(require,module,exports){"use strict";exports.__esModule=true;var visitor={ArrowFunctionExpression:function ArrowFunctionExpression(node){this.ensureBlock();node.expression=false;node.type="FunctionExpression";node.shadow=node.shadow||true}};exports.visitor=visitor; +},{}],107:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var _traversal=require("../../../traversal");var _traversal2=_interopRequireDefault(_traversal);var _helpersObject=require("../../../helpers/object");var _helpersObject2=_interopRequireDefault(_helpersObject);var _util=require("../../../util");var util=_interopRequireWildcard(_util);var _types=require("../../../types");var t=_interopRequireWildcard(_types);var _lodashObjectValues=require("lodash/object/values");var _lodashObjectValues2=_interopRequireDefault(_lodashObjectValues);var _lodashObjectExtend=require("lodash/object/extend");var _lodashObjectExtend2=_interopRequireDefault(_lodashObjectExtend);function isLet(node,parent){if(!t.isVariableDeclaration(node))return false;if(node._let)return true;if(node.kind!=="let")return false;if(isLetInitable(node,parent)){for(var i=0;i=0){return}loopText=loopText+"|"+node.label.name}else{if(state.ignoreLabeless)return;if(state.inSwitchCase)return;if(t.isBreakStatement(node)&&t.isSwitchCase(parent))return}state.hasBreakContinue=true;state.map[loopText]=node;replace=t.literal(loopText)}if(this.isReturnStatement()){state.hasReturn=true;replace=t.objectExpression([t.property("init",t.identifier("v"),node.argument||t.identifier("undefined"))])}if(replace){replace=t.returnStatement(replace);this.skip();return t.inherits(replace,node)}}};var BlockScoping=function(){function BlockScoping(loopPath,blockPath,parent,scope,file){_classCallCheck(this,BlockScoping);this.parent=parent;this.scope=scope;this.file=file;this.blockPath=blockPath;this.block=blockPath.node;this.outsideLetReferences=_helpersObject2["default"]();this.hasLetReferences=false;this.letReferences=this.block._letReferences=_helpersObject2["default"]();this.body=[];if(loopPath){this.loopParent=loopPath.parent;this.loopLabel=t.isLabeledStatement(this.loopParent)&&this.loopParent.label;this.loopPath=loopPath;this.loop=loopPath.node}}BlockScoping.prototype.run=function run(){var block=this.block;if(block._letDone)return;block._letDone=true;var needsClosure=this.getLetReferences();if(t.isFunction(this.parent)||t.isProgram(this.block))return;if(!this.hasLetReferences)return;if(needsClosure){this.wrapClosure()}else{this.remap()}if(this.loopLabel&&!t.isLabeledStatement(this.loopParent)){return t.labeledStatement(this.loopLabel,this.loop)}};BlockScoping.prototype.remap=function remap(){var hasRemaps=false;var letRefs=this.letReferences;var scope=this.scope;var remaps=_helpersObject2["default"]();for(var key in letRefs){var ref=letRefs[key];if(scope.parentHasBinding(key)||scope.hasGlobal(key)){var uid=scope.generateUidIdentifier(ref.name).name;ref.name=uid;hasRemaps=true;remaps[key]=remaps[uid]={binding:ref,uid:uid}}}if(!hasRemaps)return;var loop=this.loop;if(loop){traverseReplace(loop.right,loop,scope,remaps);traverseReplace(loop.test,loop,scope,remaps);traverseReplace(loop.update,loop,scope,remaps)}this.blockPath.traverse(replaceVisitor,remaps)};BlockScoping.prototype.wrapClosure=function wrapClosure(){var block=this.block;var outsideRefs=this.outsideLetReferences;if(this.loop){for(var name in outsideRefs){var id=outsideRefs[name];if(this.scope.hasGlobal(id.name)||this.scope.parentHasBinding(id.name)){delete outsideRefs[id.name];delete this.letReferences[id.name];this.scope.rename(id.name);this.letReferences[id.name]=id;outsideRefs[id.name]=id}}}this.has=this.checkLoop();this.hoistVarDeclarations();var params=_lodashObjectValues2["default"](outsideRefs);var args=_lodashObjectValues2["default"](outsideRefs);var fn=t.functionExpression(null,params,t.blockStatement(block.body));fn.shadow=true;this.addContinuations(fn);block.body=this.body;var ref=fn;if(this.loop){ref=this.scope.generateUidIdentifier("loop");this.loopPath.insertBefore(t.variableDeclaration("var",[t.variableDeclarator(ref,fn)]))}var call=t.callExpression(ref,args);var ret=this.scope.generateUidIdentifier("ret");var hasYield=_traversal2["default"].hasType(fn.body,this.scope,"YieldExpression",t.FUNCTION_TYPES);if(hasYield){fn.generator=true;call=t.yieldExpression(call,true)}var hasAsync=_traversal2["default"].hasType(fn.body,this.scope,"AwaitExpression",t.FUNCTION_TYPES);if(hasAsync){fn.async=true;call=t.awaitExpression(call)}this.buildClosure(ret,call)};BlockScoping.prototype.buildClosure=function buildClosure(ret,call){var has=this.has;if(has.hasReturn||has.hasBreakContinue){this.buildHas(ret,call)}else{this.body.push(t.expressionStatement(call))}};BlockScoping.prototype.addContinuations=function addContinuations(fn){var state={reassignments:{},outsideReferences:this.outsideLetReferences};this.scope.traverse(fn,continuationVisitor,state);for(var i=0;i=spreadPropIndex)break;if(t.isSpreadProperty(prop))continue;var key=prop.key;if(t.isIdentifier(key)&&!prop.computed)key=t.literal(prop.key.name);keys.push(key)}keys=t.arrayExpression(keys);var value=t.callExpression(this.file.addHelper("object-without-properties"),[objRef,keys]);this.nodes.push(this.buildVariableAssignment(spreadProp.argument,value))};DestructuringTransformer.prototype.pushObjectProperty=function pushObjectProperty(prop,propRef){if(t.isLiteral(prop.key))prop.computed=true;var pattern=prop.value;var objRef=t.memberExpression(propRef,prop.key,prop.computed);if(t.isPattern(pattern)){this.push(pattern,objRef)}else{this.nodes.push(this.buildVariableAssignment(pattern,objRef))}};DestructuringTransformer.prototype.pushObjectPattern=function pushObjectPattern(pattern,objRef){if(!pattern.properties.length){this.nodes.push(t.expressionStatement(t.callExpression(this.file.addHelper("object-destructuring-empty"),[objRef])))}if(pattern.properties.length>1&&!this.scope.isStatic(objRef)){var temp=this.scope.generateUidIdentifierBasedOnNode(objRef);this.nodes.push(this.buildVariableDeclaration(temp,objRef));objRef=temp}for(var i=0;iarr.elements.length)return;if(pattern.elements.length0){elemRef=t.callExpression(t.memberExpression(elemRef,t.identifier("slice")),[t.literal(i)])}elem=elem.argument}else{elemRef=t.memberExpression(arrayRef,t.literal(i),true)}this.push(elem,elemRef)}};DestructuringTransformer.prototype.init=function init(pattern,ref){if(!t.isArrayExpression(ref)&&!t.isMemberExpression(ref)){var memo=this.scope.maybeGenerateMemoised(ref,true);if(memo){this.nodes.push(this.buildVariableDeclaration(memo,ref));ref=memo}}this.push(pattern,ref);return this.nodes};return DestructuringTransformer}()},{"../../../messages":60,"../../../types":196}],113:[function(require,module,exports){"use strict";exports.__esModule=true;exports._ForOfStatementArray=_ForOfStatementArray;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _messages=require("../../../messages");var messages=_interopRequireWildcard(_messages);var _util=require("../../../util");var util=_interopRequireWildcard(_util);var _types=require("../../../types");var t=_interopRequireWildcard(_types);var visitor={ForOfStatement:function ForOfStatement(node,parent,scope,file){if(this.get("right").isArrayExpression()){return _ForOfStatementArray.call(this,node,scope,file)}var callback=spec;if(file.isLoose("es6.forOf"))callback=loose;var build=callback(node,parent,scope,file);var declar=build.declar;var loop=build.loop;var block=loop.body;this.ensureBlock();if(declar){block.body.push(declar)}block.body=block.body.concat(node.body.body);t.inherits(loop,node);t.inherits(loop.body,node.body);if(build.replaceParent){this.parentPath.replaceWithMultiple(build.node);this.dangerouslyRemove()}else{return build.node}}};exports.visitor=visitor;function _ForOfStatementArray(node,scope){var nodes=[];var right=node.right;if(!t.isIdentifier(right)||!scope.hasBinding(right.name)){var uid=scope.generateUidIdentifier("arr");nodes.push(t.variableDeclaration("var",[t.variableDeclarator(uid,right)]));right=uid}var iterationKey=scope.generateUidIdentifier("i");var loop=util.template("for-of-array",{BODY:node.body,KEY:iterationKey,ARR:right});t.inherits(loop,node);t.ensureBlock(loop);var iterationValue=t.memberExpression(right,iterationKey,true);var left=node.left;if(t.isVariableDeclaration(left)){left.declarations[0].init=iterationValue;loop.body.body.unshift(left)}else{loop.body.body.unshift(t.expressionStatement(t.assignmentExpression("=",left,iterationValue)))}if(this.parentPath.isLabeledStatement()){loop=t.labeledStatement(this.parentPath.node.label,loop)}nodes.push(loop);return nodes}var loose=function loose(node,parent,scope,file){var left=node.left;var declar,id;if(t.isIdentifier(left)||t.isPattern(left)||t.isMemberExpression(left)){id=left}else if(t.isVariableDeclaration(left)){id=scope.generateUidIdentifier("ref");declar=t.variableDeclaration(left.kind,[t.variableDeclarator(left.declarations[0].id,id)])}else{throw file.errorWithNode(left,messages.get("unknownForHead",left.type))}var iteratorKey=scope.generateUidIdentifier("iterator");var isArrayKey=scope.generateUidIdentifier("isArray");var loop=util.template("for-of-loose",{LOOP_OBJECT:iteratorKey,IS_ARRAY:isArrayKey,OBJECT:node.right,INDEX:scope.generateUidIdentifier("i"),ID:id});if(!declar){loop.body.body.shift()}return{declar:declar,node:loop,loop:loop}};var spec=function spec(node,parent,scope,file){var left=node.left;var declar;var stepKey=scope.generateUidIdentifier("step");var stepValue=t.memberExpression(stepKey,t.identifier("value"));if(t.isIdentifier(left)||t.isPattern(left)||t.isMemberExpression(left)){declar=t.expressionStatement(t.assignmentExpression("=",left,stepValue))}else if(t.isVariableDeclaration(left)){declar=t.variableDeclaration(left.kind,[t.variableDeclarator(left.declarations[0].id,stepValue)])}else{throw file.errorWithNode(left,messages.get("unknownForHead",left.type))}var iteratorKey=scope.generateUidIdentifier("iterator");var template=util.template("for-of",{ITERATOR_HAD_ERROR_KEY:scope.generateUidIdentifier("didIteratorError"),ITERATOR_COMPLETION:scope.generateUidIdentifier("iteratorNormalCompletion"),ITERATOR_ERROR_KEY:scope.generateUidIdentifier("iteratorError"),ITERATOR_KEY:iteratorKey,STEP_KEY:stepKey,OBJECT:node.right,BODY:null});var isLabeledParent=t.isLabeledStatement(parent);var tryBody=template[3].block.body;var loop=tryBody[0];if(isLabeledParent){tryBody[0]=t.labeledStatement(parent.label,loop)}return{replaceParent:isLabeledParent,declar:declar,loop:loop,node:template}}},{"../../../messages":60,"../../../types":196,"../../../util":199}],114:[function(require,module,exports){"use strict";exports.__esModule=true;var metadata={group:"builtin-pre"};exports.metadata=metadata;var visitor={Literal:function Literal(node){if(typeof node.value==="number"&&/^0[ob]/i.test(node.raw)){node.raw=undefined}if(typeof node.value==="string"&&/\\[u]/gi.test(node.raw)){node.raw=undefined}}};exports.visitor=visitor},{}],115:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);function keepBlockHoist(node,nodes){if(node._blockHoist){for(var i=0;ilastNonDefaultParam}var lastNonDefaultParam=_helpersGetFunctionArity2["default"](node);var params=this.get("params");for(var i=0;i",len,start),t.binaryExpression("-",len,start),t.literal(0))}var loop=util.template("rest",{ARRAY_TYPE:restParam.typeAnnotation,ARGUMENTS:argsId,ARRAY_KEY:arrKey,ARRAY_LEN:arrLen,START:start,ARRAY:rest,KEY:key,LEN:len});if(state.deopted){loop._blockHoist=node.params.length+1;node.body.body.unshift(loop)}else{loop._blockHoist=1;var target=this.getEarliestCommonAncestorFrom(state.references).getStatementParent();var highestLoop;target.findParent(function(path){if(path.isLoop()){highestLoop=path}else if(path.isFunction()){return true}});if(highestLoop)target=highestLoop;target.insertBefore(loop)}}};exports.visitor=visitor},{"../../../../types":196,"../../../../util":199}],120:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);function loose(node,body,objId){var _arr=node.properties;for(var _i=0;_i<_arr.length;_i++){var prop=_arr[_i];body.push(t.expressionStatement(t.assignmentExpression("=",t.memberExpression(objId,prop.key,prop.computed||t.isLiteral(prop.key)),prop.value)))}}function spec(node,body,objId,initProps,file){var _arr2=node.properties;for(var _i2=0;_i2<_arr2.length;_i2++){var prop=_arr2[_i2];if(t.isLiteral(t.toComputedKey(prop),{value:"__proto__"})){initProps.push(prop);continue}var key=prop.key;if(t.isIdentifier(key)&&!prop.computed){key=t.literal(key.name)}var bodyNode=t.callExpression(file.addHelper("define-property"),[objId,key,prop.value]);body.push(t.expressionStatement(bodyNode))}if(body.length===1){var first=body[0].expression;if(t.isCallExpression(first)){first.arguments[0]=t.objectExpression(initProps);return first}}}var visitor={ObjectExpression:{exit:function exit(node,parent,scope,file){var hasComputed=false;var _arr3=node.properties;for(var _i3=0;_i3<_arr3.length;_i3++){var prop=_arr3[_i3];hasComputed=t.isProperty(prop,{computed:true,kind:"init"});if(hasComputed)break}if(!hasComputed)return;var initProps=[];var stopInits=false;node.properties=node.properties.filter(function(prop){if(prop.computed){stopInits=true}if(prop.kind!=="init"||!stopInits){initProps.push(prop);return false}else{return true}});var objId=scope.generateUidIdentifierBasedOnNode(parent);var body=[];var callback=spec;if(file.isLoose("es6.properties.computed"))callback=loose;var result=callback(node,body,objId,initProps,file);if(result)return result;body.unshift(t.variableDeclaration("var",[t.variableDeclarator(objId,t.objectExpression(initProps))]));body.push(t.expressionStatement(objId));return body}}};exports.visitor=visitor},{"../../../types":196}],121:[function(require,module,exports){"use strict";exports.__esModule=true;var visitor={Property:function Property(node){if(node.method){node.method=false}if(node.shorthand){node.shorthand=false}}};exports.visitor=visitor},{}],122:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _helpersRegex=require("../../helpers/regex");var regex=_interopRequireWildcard(_helpersRegex);var _types=require("../../../types");var t=_interopRequireWildcard(_types);var visitor={Literal:function Literal(node){if(!regex.is(node,"y"))return;return t.newExpression(t.identifier("RegExp"),[t.literal(node.regex.pattern),t.literal(node.regex.flags)])}};exports.visitor=visitor},{"../../../types":196,"../../helpers/regex":80}],123:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _regexpuRewritePattern=require("regexpu/rewrite-pattern");var _regexpuRewritePattern2=_interopRequireDefault(_regexpuRewritePattern);var _helpersRegex=require("../../helpers/regex");var regex=_interopRequireWildcard(_helpersRegex);var visitor={Literal:function Literal(node){if(!regex.is(node,"u"))return;node.regex.pattern=_regexpuRewritePattern2["default"](node.regex.pattern,node.regex.flags);regex.pullFlag(node,"u")}};exports.visitor=visitor},{"../../helpers/regex":80,"regexpu/rewrite-pattern":610}],124:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={group:"builtin-pre",optional:true};exports.metadata=metadata;var visitor={ArrowFunctionExpression:function ArrowFunctionExpression(node,parent,scope,file){if(node.shadow)return;node.shadow={"this":false};var boundThis=t.thisExpression();boundThis._forceShadow=this;t.ensureBlock(node);this.get("body").unshiftContainer("body",t.expressionStatement(t.callExpression(file.addHelper("new-arrow-check"),[t.thisExpression(),boundThis])));return t.callExpression(t.memberExpression(node,t.identifier("bind")),[t.thisExpression()])}};exports.visitor=visitor},{"../../../types":196}],125:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);function buildAssert(node,file){return t.callExpression(file.addHelper("temporal-assert-defined"),[node,t.literal(node.name),file.addHelper("temporal-undefined")])}function references(node,scope,state){var declared=state.letRefs[node.name];if(!declared)return false;return scope.getBindingIdentifier(node.name)===declared}var refVisitor={ReferencedIdentifier:function ReferencedIdentifier(node,parent,scope,state){if(t.isFor(parent)&&parent.left===node)return;if(!references(node,scope,state))return;var assert=buildAssert(node,state.file);this.skip();if(t.isUpdateExpression(parent)){if(parent._ignoreBlockScopingTDZ)return;this.parentPath.replaceWith(t.sequenceExpression([assert,parent]))}else{return t.logicalExpression("&&",assert,node)}},AssignmentExpression:{exit:function exit(node,parent,scope,state){if(node._ignoreBlockScopingTDZ)return;var nodes=[];var ids=this.getBindingIdentifiers();for(var name in ids){var id=ids[name];if(references(id,scope,state)){nodes.push(buildAssert(id,state.file))}}if(nodes.length){node._ignoreBlockScopingTDZ=true;nodes.push(node);return nodes.map(t.expressionStatement)}}}};var metadata={optional:true,group:"builtin-advanced"};exports.metadata=metadata;var visitor={"Program|Loop|BlockStatement":{exit:function exit(node,parent,scope,file){var letRefs=node._letReferences;if(!letRefs)return;this.traverse(refVisitor,{letRefs:letRefs,file:file})}}};exports.visitor=visitor},{"../../../types":196}],126:[function(require,module,exports){"use strict";exports.__esModule=true; +function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={group:"builtin-pre",optional:true};exports.metadata=metadata;var visitor={Program:function Program(){var id=this.scope.generateUidIdentifier("null");this.unshiftContainer("body",[t.variableDeclaration("var",[t.variableDeclarator(id,t.literal(null))]),t.exportNamedDeclaration(null,[t.exportSpecifier(id,t.identifier("__proto__"))])])}};exports.visitor=visitor},{"../../../types":196}],127:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={optional:true};exports.metadata=metadata;var visitor={UnaryExpression:function UnaryExpression(node,parent,scope,file){if(node._ignoreSpecSymbols)return;if(this.parentPath.isBinaryExpression()&&t.EQUALITY_BINARY_OPERATORS.indexOf(parent.operator)>=0){var opposite=this.getOpposite();if(opposite.isLiteral()&&opposite.node.value!=="symbol"&&opposite.node.value!=="object")return}if(node.operator==="typeof"){var call=t.callExpression(file.addHelper("typeof"),[node.argument]);if(this.get("argument").isIdentifier()){var undefLiteral=t.literal("undefined");var unary=t.unaryExpression("typeof",node.argument);unary._ignoreSpecSymbols=true;return t.conditionalExpression(t.binaryExpression("===",unary,undefLiteral),undefLiteral,call)}else{return call}}},BinaryExpression:function BinaryExpression(node,parent,scope,file){if(node.operator==="instanceof"){return t.callExpression(file.addHelper("instanceof"),[node.left,node.right])}},"VariableDeclaration|FunctionDeclaration":function VariableDeclarationFunctionDeclaration(node){if(node._generated)this.skip()}};exports.visitor=visitor},{"../../../types":196}],128:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={optional:true,group:"builtin-pre"};exports.metadata=metadata;var visitor={TemplateLiteral:function TemplateLiteral(node,parent){if(t.isTaggedTemplateExpression(parent))return;for(var i=0;i0){var declarations=_lodashArrayFlatten2["default"](_lodashCollectionMap2["default"](this.vars,function(decl){return decl.declarations}));var assignment=_lodashCollectionReduceRight2["default"](declarations,function(expr,decl){return t.assignmentExpression("=",decl.id,expr)},t.identifier("undefined"));var statement=t.expressionStatement(assignment);statement._blockHoist=Infinity;body.unshift(statement)}var paramDecls=this.paramDecls;if(paramDecls.length>0){var paramDecl=t.variableDeclaration("var",paramDecls);paramDecl._blockHoist=Infinity;body.unshift(paramDecl)}body.unshift(t.expressionStatement(t.assignmentExpression("=",this.getAgainId(),t.literal(false))));node.body=util.template("tail-call-body",{FUNCTION_ID:this.getFunctionId(),AGAIN_ID:this.getAgainId(),BLOCK:node.body});var topVars=[];if(this.needsThis){var _arr=this.thisPaths;for(var _i=0;_i<_arr.length;_i++){var path=_arr[_i];path.replaceWith(this.getThisId())}topVars.push(t.variableDeclarator(this.getThisId(),t.thisExpression()))}if(this.needsArguments||this.setsArguments){var _arr2=this.argumentsPaths;for(var _i2=0;_i2<_arr2.length;_i2++){var _path=_arr2[_i2];_path.replaceWith(this.argumentsId)}var decl=t.variableDeclarator(this.argumentsId);if(this.argumentsId){decl.init=t.identifier("arguments");decl.init._shadowedFunctionLiteral=this.path}topVars.push(decl)}var leftId=this.leftId;if(leftId){topVars.push(t.variableDeclarator(leftId))}if(topVars.length>0){node.body.body.unshift(t.variableDeclaration("var",topVars))}};TailCallTransformer.prototype.subTransform=function subTransform(node){if(!node)return;var handler=this["subTransform"+node.type];if(handler)return handler.call(this,node)};TailCallTransformer.prototype.subTransformConditionalExpression=function subTransformConditionalExpression(node){var callConsequent=this.subTransform(node.consequent);var callAlternate=this.subTransform(node.alternate);if(!callConsequent&&!callAlternate){return}node.type="IfStatement";node.consequent=callConsequent?t.toBlock(callConsequent):returnBlock(node.consequent);if(callAlternate){node.alternate=t.isIfStatement(callAlternate)?callAlternate:t.toBlock(callAlternate)}else{node.alternate=returnBlock(node.alternate)}return[node]};TailCallTransformer.prototype.subTransformLogicalExpression=function subTransformLogicalExpression(node){var callRight=this.subTransform(node.right);if(!callRight)return;var leftId=this.getLeftId();var testExpr=t.assignmentExpression("=",leftId,node.left);if(node.operator==="&&"){testExpr=t.unaryExpression("!",testExpr)}return[t.ifStatement(testExpr,returnBlock(leftId))].concat(callRight)};TailCallTransformer.prototype.subTransformSequenceExpression=function subTransformSequenceExpression(node){var seq=node.expressions;var lastCall=this.subTransform(seq[seq.length-1]);if(!lastCall){return}if(--seq.length===1){node=seq[0]}return[t.expressionStatement(node)].concat(lastCall)};TailCallTransformer.prototype.subTransformCallExpression=function subTransformCallExpression(node){var callee=node.callee;var thisBinding,args;if(t.isMemberExpression(callee,{computed:false})&&t.isIdentifier(callee.property)){switch(callee.property.name){case"call":args=t.arrayExpression(node.arguments.slice(1));break;case"apply":args=node.arguments[1]||t.identifier("undefined");this.needsArguments=true;break;default:return}thisBinding=node.arguments[0];callee=callee.object}if(!t.isIdentifier(callee)||!this.scope.bindingIdentifierEquals(callee.name,this.ownerId)){return}this.hasTailRecursion=true;if(this.hasDeopt())return;var body=[];if(this.needsThis&&!t.isThisExpression(thisBinding)){body.push(t.expressionStatement(t.assignmentExpression("=",this.getThisId(),thisBinding||t.identifier("undefined"))))}if(!args){args=t.arrayExpression(node.arguments)}var argumentsId=this.getArgumentsId();var params=this.getParams();if(this.needsArguments){body.push(t.expressionStatement(t.assignmentExpression("=",argumentsId,args)))}if(t.isArrayExpression(args)){var elems=args.elements;while(elems.length1){var root=buildBinaryExpression(nodes.shift(),nodes.shift());var _arr3=nodes;for(var _i3=0;_i3<_arr3.length;_i3++){var _node=_arr3[_i3];root=buildBinaryExpression(root,_node)}this.replaceWith(root)}else{return nodes[0]}}};exports.visitor=visitor},{"../../../types":196}],132:[function(require,module,exports){"use strict";exports.__esModule=true;var metadata={stage:2};exports.metadata=metadata},{}],133:[function(require,module,exports){"use strict";exports.__esModule=true;var metadata={stage:0,dependencies:["es6.classes"]};exports.metadata=metadata},{}],134:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _helpersBuildComprehension=require("../../helpers/build-comprehension");var _helpersBuildComprehension2=_interopRequireDefault(_helpersBuildComprehension);var _traversal=require("../../../traversal");var _traversal2=_interopRequireDefault(_traversal);var _util=require("../../../util");var util=_interopRequireWildcard(_util);var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={stage:0};exports.metadata=metadata;var visitor={ComprehensionExpression:function ComprehensionExpression(node,parent,scope){var callback=array;if(node.generator)callback=generator;return callback(node,parent,scope)}};exports.visitor=visitor;function generator(node){var body=[];var container=t.functionExpression(null,[],t.blockStatement(body),true);container.shadow=true;body.push(_helpersBuildComprehension2["default"](node,function(){return t.expressionStatement(t.yieldExpression(node.body))}));return t.callExpression(container,[])}function array(node,parent,scope){var uid=scope.generateUidIdentifierBasedOnNode(parent);var container=util.template("array-comprehension-container",{KEY:uid});container.callee.shadow=true;var block=container.callee.body;var body=block.body;if(_traversal2["default"].hasType(node,scope,"YieldExpression",t.FUNCTION_TYPES)){container.callee.generator=true;container=t.yieldExpression(container,true)}var returnStatement=body.pop();body.push(_helpersBuildComprehension2["default"](node,function(){return util.template("array-push",{STATEMENT:node.body,KEY:uid},true)}));body.push(returnStatement);return container}},{"../../../traversal":165,"../../../types":196,"../../../util":199,"../../helpers/build-comprehension":71}],135:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _helpersMemoiseDecorators=require("../../helpers/memoise-decorators");var _helpersMemoiseDecorators2=_interopRequireDefault(_helpersMemoiseDecorators);var _helpersDefineMap=require("../../helpers/define-map");var defineMap=_interopRequireWildcard(_helpersDefineMap);var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={dependencies:["es6.classes"],optional:true,stage:1};exports.metadata=metadata;var visitor={ObjectExpression:function ObjectExpression(node,parent,scope,file){var hasDecorators=false;for(var i=0;i=1){nodes.push(node)}return nodes}};exports.visitor=visitor},{"../../../types":196}],139:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={optional:true,stage:0};exports.metadata=metadata;function getTempId(scope){var id=scope.path.getData("functionBind");if(id)return id;id=scope.generateDeclaredUidIdentifier("context");return scope.path.setData("functionBind",id)}function getStaticContext(bind,scope){var object=bind.object||bind.callee.object;return scope.isStatic(object)&&object}function inferBindContext(bind,scope){var staticContext=getStaticContext(bind,scope);if(staticContext)return staticContext;var tempId=getTempId(scope);if(bind.object){bind.callee=t.sequenceExpression([t.assignmentExpression("=",tempId,bind.object),bind.callee])}else{bind.callee.object=t.assignmentExpression("=",tempId,bind.callee.object)}return tempId}var visitor={CallExpression:function CallExpression(node,parent,scope){var bind=node.callee;if(!t.isBindExpression(bind))return;var context=inferBindContext(bind,scope);node.callee=t.memberExpression(bind.callee,t.identifier("call"));node.arguments.unshift(context)},BindExpression:function BindExpression(node,parent,scope){var context=inferBindContext(node,scope);return t.callExpression(t.memberExpression(node.callee,t.identifier("bind")),[context])}};exports.visitor=visitor},{"../../../types":196}],140:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={stage:2,dependencies:["es6.destructuring"]};exports.metadata=metadata;var hasSpread=function hasSpread(node){for(var i=0;i=opts.stage)return true}function optional(transformer,opts){if(transformer.metadata.optional&&!_lodashCollectionIncludes2["default"](opts.optional,transformer.key))return false}},{"lodash/collection/includes":439}],143:[function(require,module,exports){"use strict";exports.__esModule=true;exports["default"]={"minification.constantFolding":require("babel-plugin-constant-folding"),strict:require("./other/strict"),eval:require("babel-plugin-eval"),_validation:require("./internal/validation"),_hoistDirectives:require("./internal/hoist-directives"),"minification.removeDebugger":require("babel-plugin-remove-debugger"),"minification.removeConsole":require("babel-plugin-remove-console"),"utility.inlineEnvironmentVariables":require("babel-plugin-inline-environment-variables"),"minification.deadCodeElimination":require("babel-plugin-dead-code-elimination"),_modules:require("./internal/modules"),"react.displayName":require("babel-plugin-react-display-name"),"es6.spec.modules":require("./es6/spec.modules"),"es6.spec.arrowFunctions":require("./es6/spec.arrow-functions"),"es6.spec.templateLiterals":require("./es6/spec.template-literals"),"es6.templateLiterals":require("./es6/template-literals"),"es6.literals":require("./es6/literals"),"validation.undeclaredVariableCheck":require("babel-plugin-undeclared-variables-check"),"spec.functionName":require("./spec/function-name"),"es7.classProperties":require("./es7/class-properties"),"es7.trailingFunctionCommas":require("./es7/trailing-function-commas"),"es7.asyncFunctions":require("./es7/async-functions"),"es7.decorators":require("./es7/decorators"),"validation.react":require("./validation/react"),"es6.arrowFunctions":require("./es6/arrow-functions"),"spec.blockScopedFunctions":require("./spec/block-scoped-functions"),"optimisation.react.constantElements":require("babel-plugin-react-constant-elements"),"optimisation.react.inlineElements":require("./optimisation/react.inline-elements"),"es7.comprehensions":require("./es7/comprehensions"),"es6.classes":require("./es6/classes"),asyncToGenerator:require("./other/async-to-generator"),bluebirdCoroutines:require("./other/bluebird-coroutines"),"es6.objectSuper":require("./es6/object-super"),"es7.objectRestSpread":require("./es7/object-rest-spread"),"es7.exponentiationOperator":require("./es7/exponentiation-operator"),"es5.properties.mutators":require("./es5/properties.mutators"),"es6.properties.shorthand":require("./es6/properties.shorthand"),"es6.properties.computed":require("./es6/properties.computed"),"optimisation.flow.forOf":require("./optimisation/flow.for-of"),"es6.forOf":require("./es6/for-of"),"es6.regex.sticky":require("./es6/regex.sticky"),"es6.regex.unicode":require("./es6/regex.unicode"),"es6.constants":require("./es6/constants"),"es7.exportExtensions":require("./es7/export-extensions"),"spec.protoToAssign":require("babel-plugin-proto-to-assign"),"es7.doExpressions":require("./es7/do-expressions"),"es6.spec.symbols":require("./es6/spec.symbols"),"es7.functionBind":require("./es7/function-bind"),"spec.undefinedToVoid":require("babel-plugin-undefined-to-void"),"es6.spread":require("./es6/spread"),"es6.parameters":require("./es6/parameters"),"es6.destructuring":require("./es6/destructuring"),"es6.blockScoping":require("./es6/block-scoping"),"es6.spec.blockScoping":require("./es6/spec.block-scoping"),reactCompat:require("./other/react-compat"),react:require("./other/react"),regenerator:require("./other/regenerator"),runtime:require("babel-plugin-runtime"),"es6.modules":require("./es6/modules"),_moduleFormatter:require("./internal/module-formatter"), +"es6.tailCall":require("./es6/tail-call"),_shadowFunctions:require("./internal/shadow-functions"),"es3.propertyLiterals":require("./es3/property-literals"),"es3.memberExpressionLiterals":require("./es3/member-expression-literals"),"minification.memberExpressionLiterals":require("babel-plugin-member-expression-literals"),"minification.propertyLiterals":require("babel-plugin-property-literals"),_blockHoist:require("./internal/block-hoist"),jscript:require("babel-plugin-jscript"),flow:require("./other/flow"),"optimisation.modules.system":require("./optimisation/modules.system")};module.exports=exports["default"]},{"./es3/member-expression-literals":103,"./es3/property-literals":104,"./es5/properties.mutators":105,"./es6/arrow-functions":106,"./es6/block-scoping":107,"./es6/classes":108,"./es6/constants":111,"./es6/destructuring":112,"./es6/for-of":113,"./es6/literals":114,"./es6/modules":115,"./es6/object-super":116,"./es6/parameters":118,"./es6/properties.computed":120,"./es6/properties.shorthand":121,"./es6/regex.sticky":122,"./es6/regex.unicode":123,"./es6/spec.arrow-functions":124,"./es6/spec.block-scoping":125,"./es6/spec.modules":126,"./es6/spec.symbols":127,"./es6/spec.template-literals":128,"./es6/spread":129,"./es6/tail-call":130,"./es6/template-literals":131,"./es7/async-functions":132,"./es7/class-properties":133,"./es7/comprehensions":134,"./es7/decorators":135,"./es7/do-expressions":136,"./es7/exponentiation-operator":137,"./es7/export-extensions":138,"./es7/function-bind":139,"./es7/object-rest-spread":140,"./es7/trailing-function-commas":141,"./internal/block-hoist":144,"./internal/hoist-directives":145,"./internal/module-formatter":146,"./internal/modules":147,"./internal/shadow-functions":148,"./internal/validation":149,"./optimisation/flow.for-of":150,"./optimisation/modules.system":151,"./optimisation/react.inline-elements":152,"./other/async-to-generator":153,"./other/bluebird-coroutines":154,"./other/flow":155,"./other/react":157,"./other/react-compat":156,"./other/regenerator":158,"./other/strict":159,"./spec/block-scoped-functions":160,"./spec/function-name":161,"./validation/react":162,"babel-plugin-constant-folding":200,"babel-plugin-dead-code-elimination":201,"babel-plugin-eval":202,"babel-plugin-inline-environment-variables":203,"babel-plugin-jscript":204,"babel-plugin-member-expression-literals":205,"babel-plugin-property-literals":206,"babel-plugin-proto-to-assign":207,"babel-plugin-react-constant-elements":208,"babel-plugin-react-display-name":209,"babel-plugin-remove-console":210,"babel-plugin-remove-debugger":211,"babel-plugin-runtime":213,"babel-plugin-undeclared-variables-check":214,"babel-plugin-undefined-to-void":216}],144:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _lodashCollectionSortBy=require("lodash/collection/sortBy");var _lodashCollectionSortBy2=_interopRequireDefault(_lodashCollectionSortBy);var metadata={group:"builtin-trailing"};exports.metadata=metadata;var visitor={Block:{exit:function exit(node){var hasChange=false;for(var i=0;i=0){comment.value=comment.value.replace(FLOW_DIRECTIVE,"");if(!comment.value.replace(/\*/g,"").trim())comment._displayed=true}}},Flow:function Flow(){this.dangerouslyRemove()},ClassProperty:function ClassProperty(node){node.typeAnnotation=null;if(!node.value)this.dangerouslyRemove()},Class:function Class(node){node["implements"]=null},Function:function Function(node){for(var i=0;i0){nodePath=nodePath.get(keysAlongPath.pop())}return nodePath}},{"../../../types":196,regenerator:561}],159:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var metadata={group:"builtin-pre"};exports.metadata=metadata;var THIS_BREAK_KEYS=["FunctionExpression","FunctionDeclaration","ClassProperty"];function isUseStrict(node){if(!t.isLiteral(node))return false;if(node.raw&&node.rawValue===node.value){return node.rawValue==="use strict"}else{return node.value==="use strict"}}var visitor={Program:{enter:function enter(program){var first=program.body[0];var directive;if(t.isExpressionStatement(first)&&isUseStrict(first.expression)){directive=first}else{directive=t.expressionStatement(t.literal("use strict"));this.unshiftContainer("body",directive);if(first){directive.leadingComments=first.leadingComments;first.leadingComments=[]}}directive._blockHoist=Infinity}},ThisExpression:function ThisExpression(){if(!this.findParent(function(path){return!path.is("shadow")&&THIS_BREAK_KEYS.indexOf(path.type)>=0})){return t.identifier("undefined")}}};exports.visitor=visitor},{"../../../types":196}],160:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);function statementList(key,path){var paths=path.get(key);for(var i=0;i=0)continue;visited.push(path.node);if(path.visit()){stop=true;break}}var _arr3=queue;for(var _i3=0;_i3<_arr3.length;_i3++){var path=_arr3[_i3];path.shiftContext()}this.queue=null;return stop};TraversalContext.prototype.visitSingle=function visitSingle(node,key){if(this.shouldVisit(node[key])){var path=this.create(node,node,key);path.visit();path.shiftContext()}};TraversalContext.prototype.visit=function visit(node,key){var nodes=node[key];if(!nodes)return;if(Array.isArray(nodes)){return this.visitMultiple(nodes,node,key)}else{return this.visitSingle(node,key)}};return TraversalContext}();exports["default"]=TraversalContext;module.exports=exports["default"]},{"../types":196,"./path":172}],164:[function(require,module,exports){"use strict";exports.__esModule=true;function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var Hub=function Hub(file){_classCallCheck(this,Hub);this.file=file};exports["default"]=Hub;module.exports=exports["default"]},{}],165:[function(require,module,exports){"use strict";exports.__esModule=true;exports["default"]=traverse;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _context=require("./context");var _context2=_interopRequireDefault(_context);var _visitors=require("./visitors");var visitors=_interopRequireWildcard(_visitors);var _messages=require("../messages");var messages=_interopRequireWildcard(_messages);var _lodashCollectionIncludes=require("lodash/collection/includes");var _lodashCollectionIncludes2=_interopRequireDefault(_lodashCollectionIncludes);var _types=require("../types");var t=_interopRequireWildcard(_types);function traverse(parent,opts,scope,state,parentPath){if(!parent)return;if(!opts)opts={};if(!opts.noScope&&!scope){if(parent.type!=="Program"&&parent.type!=="File"){throw new Error(messages.get("traverseNeedsParent",parent.type))}}visitors.explode(opts);if(Array.isArray(parent)){for(var i=0;icurrentKeyIndex){earliest=path}}return earliest})}function getDeepestCommonAncestorFrom(paths,filter){var _this=this;if(!paths.length){return this}if(paths.length===1){return paths[0]}var minDepth=Infinity;var lastCommonIndex,lastCommon;var ancestries=paths.map(function(path){var ancestry=[];do{ancestry.unshift(path)}while((path=path.parentPath)&&path!==_this);if(ancestry.length-1}function visit(){if(this.isBlacklisted())return false;if(this.opts.shouldSkip&&this.opts.shouldSkip(this))return false;this.call("enter");if(this.shouldSkip){return this.shouldStop}var node=this.node;var opts=this.opts;if(node){if(Array.isArray(node)){for(var i=0;i":return left>right;case"<=":return left<=right;case">=":return left>=right;case"==":return left==right;case"!=":return left!=right;case"===":return left===right;case"!==":return left!==right}}if(path.isCallExpression()){var callee=path.get("callee");var context;var func;if(callee.isIdentifier()&&!path.scope.getBinding(callee.node.name,true)&&VALID_CALLEES.indexOf(callee.node.name)>=0){func=global[node.callee.name]}if(callee.isMemberExpression()){var object=callee.get("object");var property=callee.get("property");if(object.isIdentifier()&&property.isIdentifier()&&VALID_CALLEES.indexOf(object.node.name)>=0){context=global[object.node.name];func=context[property.node.name]}if(object.isLiteral()&&property.isIdentifier()){var type=typeof object.node.value;if(type==="string"||type==="number"){context=object.node.value;func=context[property.node.name]}}}if(func){var args=path.get("arguments").map(evaluate);if(!confident)return;return func.apply(context,args)}}confident=false}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],171:[function(require,module,exports){"use strict";exports.__esModule=true;exports.getStatementParent=getStatementParent;exports.getOpposite=getOpposite;exports.getCompletionRecords=getCompletionRecords;exports.getSibling=getSibling;exports.get=get;exports._getKey=_getKey;exports._getPattern=_getPattern;exports.getBindingIdentifiers=getBindingIdentifiers;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _index=require("./index");var _index2=_interopRequireDefault(_index);var _types=require("../../types");var t=_interopRequireWildcard(_types);function getStatementParent(){var path=this;do{if(!path.parentPath||Array.isArray(path.container)&&path.isStatement()){break}else{path=path.parentPath}}while(path);if(path&&(path.isProgram()||path.isFile())){throw new Error("File/Program node, we can't possibly find a statement parent to this")}return path}function getOpposite(){if(this.key==="left"){return this.getSibling("right")}else if(this.key==="right"){return this.getSibling("left")}}function getCompletionRecords(){var paths=[];var add=function add(path){if(path)paths=paths.concat(path.getCompletionRecords())};if(this.isIfStatement()){add(this.get("consequent"));add(this.get("alternate"))}else if(this.isDoExpression()||this.isFor()||this.isWhile()){add(this.get("body"))}else if(this.isProgram()||this.isBlockStatement()){add(this.get("body").pop())}else if(this.isFunction()){return this.get("body").getCompletionRecords()}else if(this.isTryStatement()){add(this.get("block"));add(this.get("handler"));add(this.get("finalizer"))}else{paths.push(this)}return paths}function getSibling(key){return _index2["default"].get({parentPath:this.parentPath,parent:this.parent,container:this.container,listKey:this.listKey,key:key})}function get(key,context){if(context===true)context=this.context;var parts=key.split(".");if(parts.length===1){return this._getKey(key,context)}else{return this._getPattern(parts,context)}}function _getKey(key,context){var _this=this;var node=this.node;var container=node[key];if(Array.isArray(container)){return container.map(function(_,i){return _index2["default"].get({listKey:key,parentPath:_this,parent:node,container:container,key:i}).setContext(context)})}else{return _index2["default"].get({parentPath:this,parent:node,container:node,key:key}).setContext(context)}}function _getPattern(parts,context){var path=this;var _arr=parts;for(var _i=0;_i<_arr.length;_i++){var part=_arr[_i];if(part==="."){path=path.parentPath}else{if(Array.isArray(path)){path=path[part]}else{path=path.get(part,context)}}}return path}function getBindingIdentifiers(duplicates){return t.getBindingIdentifiers(this.node,duplicates)}},{"../../types":196,"./index":172}],172:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var _libVirtualTypes=require("./lib/virtual-types");var virtualTypes=_interopRequireWildcard(_libVirtualTypes);var _index=require("../index");var _index2=_interopRequireDefault(_index);var _lodashObjectAssign=require("lodash/object/assign");var _lodashObjectAssign2=_interopRequireDefault(_lodashObjectAssign);var _scope=require("../scope");var _scope2=_interopRequireDefault(_scope);var _types=require("../../types");var t=_interopRequireWildcard(_types);var NodePath=function(){function NodePath(hub,parent){_classCallCheck(this,NodePath);this.contexts=[];this.parent=parent;this.data={};this.hub=hub;this.shouldSkip=false;this.shouldStop=false;this.removed=false;this.state=null;this.opts=null;this.skipKeys=null;this.parentPath=null;this.context=null;this.container=null;this.listKey=null;this.inList=false;this.parentKey=null;this.key=null;this.node=null;this.scope=null;this.type=null;this.typeAnnotation=null}NodePath.get=function get(_ref){var hub=_ref.hub;var parentPath=_ref.parentPath;var parent=_ref.parent;var container=_ref.container;var listKey=_ref.listKey;var key=_ref.key;if(!hub&&parentPath){hub=parentPath.hub}var targetNode=container[key];var paths=parent._paths=parent._paths||[];var path;for(var i=0;i=0)continue;visitedScopes.push(violationScope);constantViolations.push(violation);if(violationScope===path.scope){constantViolations=[violation];break}}constantViolations=constantViolations.concat(functionConstantViolations);var _arr2=constantViolations;for(var _i2=0;_i2<_arr2.length;_i2++){var violation=_arr2[_i2];types.push(violation.getTypeAnnotation())}}if(types.length){return t.createUnionTypeAnnotation(types)}}function getConstantViolationsBefore(binding,path,functions){var violations=binding.constantViolations.slice();violations.unshift(binding.path);return violations.filter(function(violation){violation=violation.resolve();var status=violation._guessExecutionStatusRelativeTo(path);if(functions&&status==="function")functions.push(violation);return status==="before"})}function inferAnnotationFromBinaryExpression(name,path){var operator=path.node.operator;var right=path.get("right").resolve();var left=path.get("left").resolve();var target;if(left.isIdentifier({name:name})){target=right}else if(right.isIdentifier({name:name})){target=left}if(target){if(operator==="==="){return target.getTypeAnnotation()}else if(t.BOOLEAN_NUMBER_BINARY_OPERATORS.indexOf(operator)>=0){return t.numberTypeAnnotation()}else{return}}else{if(operator!=="===")return}var typeofPath;var typePath;if(left.isUnaryExpression({operator:"typeof"})){typeofPath=left;typePath=right}else if(right.isUnaryExpression({operator:"typeof"})){typeofPath=right;typePath=left}if(!typePath&&!typeofPath)return;typePath=typePath.resolve();if(!typePath.isLiteral())return;var typeValue=typePath.node.value;if(typeof typeValue!=="string")return;if(!typeofPath.get("argument").isIdentifier({name:name}))return;return t.createTypeAnnotationBasedOnTypeof(typePath.node.value)}function getParentConditionalPath(path){var parentPath;while(parentPath=path.parentPath){if(parentPath.isIfStatement()||parentPath.isConditionalExpression()){if(path.key==="test"){return}else{return parentPath}}else{path=parentPath}}}function getConditionalAnnotation(path,name){var ifStatement=getParentConditionalPath(path);if(!ifStatement)return;var test=ifStatement.get("test");var paths=[test];var types=[];do{var _path=paths.shift().resolve();if(_path.isLogicalExpression()){paths.push(_path.get("left"));paths.push(_path.get("right"))}if(_path.isBinaryExpression()){var type=inferAnnotationFromBinaryExpression(name,_path);if(type)types.push(type)}}while(paths.length);if(types.length){return{typeAnnotation:t.createUnionTypeAnnotation(types),ifStatement:ifStatement}}else{return getConditionalAnnotation(ifStatement,name)}}module.exports=exports["default"]},{"../../../types":196}],175:[function(require,module,exports){"use strict";exports.__esModule=true;exports.VariableDeclarator=VariableDeclarator;exports.TypeCastExpression=TypeCastExpression;exports.NewExpression=NewExpression;exports.TemplateLiteral=TemplateLiteral;exports.UnaryExpression=UnaryExpression;exports.BinaryExpression=BinaryExpression;exports.LogicalExpression=LogicalExpression;exports.ConditionalExpression=ConditionalExpression;exports.SequenceExpression=SequenceExpression;exports.AssignmentExpression=AssignmentExpression;exports.UpdateExpression=UpdateExpression;exports.Literal=Literal;exports.ObjectExpression=ObjectExpression;exports.ArrayExpression=ArrayExpression;exports.RestElement=RestElement;exports.CallExpression=CallExpression;exports.TaggedTemplateExpression=TaggedTemplateExpression;function _interopRequire(obj){return obj&&obj.__esModule?obj["default"]:obj}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var _infererReference=require("./inferer-reference");exports.Identifier=_interopRequire(_infererReference);function VariableDeclarator(){var id=this.get("id");if(id.isIdentifier()){return this.get("init").getTypeAnnotation()}else{return}}function TypeCastExpression(node){return node.typeAnnotation}TypeCastExpression.validParent=true;function NewExpression(node){if(this.get("callee").isIdentifier()){return t.genericTypeAnnotation(node.callee)}}function TemplateLiteral(){return t.stringTypeAnnotation()}function UnaryExpression(node){var operator=node.operator;if(operator==="void"){return t.voidTypeAnnotation()}else if(t.NUMBER_UNARY_OPERATORS.indexOf(operator)>=0){return t.numberTypeAnnotation()}else if(t.STRING_UNARY_OPERATORS.indexOf(operator)>=0){return t.stringTypeAnnotation()}else if(t.BOOLEAN_UNARY_OPERATORS.indexOf(operator)>=0){return t.booleanTypeAnnotation()}}function BinaryExpression(node){var operator=node.operator;if(t.NUMBER_BINARY_OPERATORS.indexOf(operator)>=0){return t.numberTypeAnnotation()}else if(t.BOOLEAN_BINARY_OPERATORS.indexOf(operator)>=0){return t.booleanTypeAnnotation()}else if(operator==="+"){var right=this.get("right");var left=this.get("left");if(left.isBaseType("number")&&right.isBaseType("number")){return t.numberTypeAnnotation()}else if(left.isBaseType("string")||right.isBaseType("string")){return t.stringTypeAnnotation()}return t.unionTypeAnnotation([t.stringTypeAnnotation(),t.numberTypeAnnotation()])}}function LogicalExpression(){return t.createUnionTypeAnnotation([this.get("left").getTypeAnnotation(),this.get("right").getTypeAnnotation()])}function ConditionalExpression(){return t.createUnionTypeAnnotation([this.get("consequent").getTypeAnnotation(),this.get("alternate").getTypeAnnotation()])}function SequenceExpression(){return this.get("expressions").pop().getTypeAnnotation()}function AssignmentExpression(){return this.get("right").getTypeAnnotation()}function UpdateExpression(node){var operator=node.operator;if(operator==="++"||operator==="--"){return t.numberTypeAnnotation()}}function Literal(node){var value=node.value;if(typeof value==="string")return t.stringTypeAnnotation();if(typeof value==="number")return t.numberTypeAnnotation();if(typeof value==="boolean")return t.booleanTypeAnnotation();if(value===null)return t.voidTypeAnnotation();if(node.regex)return t.genericTypeAnnotation(t.identifier("RegExp"))}function ObjectExpression(){return t.genericTypeAnnotation(t.identifier("Object"))}function ArrayExpression(){return t.genericTypeAnnotation(t.identifier("Array"))}function RestElement(){return ArrayExpression()}RestElement.validParent=true;function Func(){return t.genericTypeAnnotation(t.identifier("Function"))}exports.Function=Func;exports.Class=Func;function CallExpression(){return resolveCall(this.get("callee"))}function TaggedTemplateExpression(){return resolveCall(this.get("tag"))}function resolveCall(callee){callee=callee.resolve();if(callee.isFunction()){if(callee.is("async")){if(callee.is("generator")){return t.genericTypeAnnotation(t.identifier("AsyncIterator"))}else{return t.genericTypeAnnotation(t.identifier("Promise"))}}else{if(callee.node.returnType){return callee.node.returnType}else{}}}}},{"../../../types":196,"./inferer-reference":174}],176:[function(require,module,exports){"use strict";exports.__esModule=true;exports.matchesPattern=matchesPattern;exports.has=has;exports.isnt=isnt;exports.equals=equals;exports.isNodeType=isNodeType;exports.canHaveVariableDeclarationOrExpression=canHaveVariableDeclarationOrExpression;exports.isCompletionRecord=isCompletionRecord;exports.isStatementOrBlock=isStatementOrBlock;exports.referencesImport=referencesImport;exports.getSource=getSource;exports.willIMaybeExecuteBefore=willIMaybeExecuteBefore;exports._guessExecutionStatusRelativeTo=_guessExecutionStatusRelativeTo;exports.resolve=resolve;exports._resolve=_resolve;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _lodashCollectionIncludes=require("lodash/collection/includes");var _lodashCollectionIncludes2=_interopRequireDefault(_lodashCollectionIncludes);var _types=require("../../types");var t=_interopRequireWildcard(_types); +function matchesPattern(pattern,allowPartial){if(!this.isMemberExpression())return false;var parts=pattern.split(".");var search=[this.node];var i=0;function matches(name){var part=parts[i];return part==="*"||name===part}while(search.length){var node=search.shift();if(allowPartial&&i===parts.length){return true}if(t.isIdentifier(node)){if(!matches(node.name))return false}else if(t.isLiteral(node)){if(!matches(node.value))return false}else if(t.isMemberExpression(node)){if(node.computed&&!t.isLiteral(node.property)){return false}else{search.unshift(node.property);search.unshift(node.object);continue}}else if(t.isThisExpression(node)){if(!matches("this"))return false}else{return false}if(++i>parts.length){return false}}return i===parts.length}function has(key){var val=this.node[key];if(val&&Array.isArray(val)){return!!val.length}else{return!!val}}var is=has;exports.is=is;function isnt(key){return!this.has(key)}function equals(key,value){return this.node[key]===value}function isNodeType(type){return t.isType(this.type,type)}function canHaveVariableDeclarationOrExpression(){return(this.key==="init"||this.key==="left")&&this.parentPath.isFor()}function isCompletionRecord(allowInsideFunction){var path=this;var first=true;do{var container=path.container;if(path.isFunction()&&!first){return!!allowInsideFunction}first=false;if(Array.isArray(container)&&path.key!==container.length-1){return false}}while((path=path.parentPath)&&!path.isProgram());return true}function isStatementOrBlock(){if(this.parentPath.isLabeledStatement()||t.isBlockStatement(this.container)){return false}else{return _lodashCollectionIncludes2["default"](t.STATEMENT_OR_BLOCK_KEYS,this.key)}}function referencesImport(moduleSource,importName){if(!this.isReferencedIdentifier())return false;var binding=this.scope.getBinding(this.node.name);if(!binding||binding.kind!=="module")return false;var path=binding.path;var parent=path.parentPath;if(!parent.isImportDeclaration())return false;if(parent.node.source.value===moduleSource){if(!importName)return true}else{return false}if(path.isImportDefaultSpecifier()&&importName==="default"){return true}if(path.isImportNamespaceSpecifier()&&importName==="*"){return true}if(path.isImportSpecifier()&&path.node.imported.name===importName){return true}return false}function getSource(){var node=this.node;if(node.end){return this.hub.file.code.slice(node.start,node.end)}else{return""}}function willIMaybeExecuteBefore(target){return this._guessExecutionStatusRelativeTo(target)!=="after"}function _guessExecutionStatusRelativeTo(target){var targetFuncParent=target.scope.getFunctionParent();var selfFuncParent=this.scope.getFunctionParent();if(targetFuncParent!==selfFuncParent){return"function"}var targetPaths=target.getAncestry();var selfPaths=this.getAncestry();var commonPath;var targetIndex;var selfIndex;for(selfIndex=0;selfIndex=0){commonPath=selfPath;break}}if(!commonPath){return"before"}var targetRelationship=targetPaths[targetIndex-1];var selfRelationship=selfPaths[selfIndex-1];if(!targetRelationship||!selfRelationship){return"before"}if(targetRelationship.listKey&&targetRelationship.container===selfRelationship.container){return targetRelationship.key>selfRelationship.key?"before":"after"}var targetKeyPosition=t.VISITOR_KEYS[targetRelationship.type].indexOf(targetRelationship.key);var selfKeyPosition=t.VISITOR_KEYS[selfRelationship.type].indexOf(selfRelationship.key);return targetKeyPosition>selfKeyPosition?"before":"after"}function resolve(dangerous,resolved){return this._resolve(dangerous,resolved)||this}function _resolve(dangerous,resolved){if(resolved&&resolved.indexOf(this)>=0)return;resolved=resolved||[];resolved.push(this);if(this.isVariableDeclarator()){if(this.get("id").isIdentifier()){return this.get("init").resolve(dangerous,resolved)}else{}}else if(this.isReferencedIdentifier()){var binding=this.scope.getBinding(this.node.name);if(!binding)return;if(!binding.constant)return;if(binding.kind==="module")return;if(binding.path!==this){return binding.path.resolve(dangerous,resolved)}}else if(this.isTypeCastExpression()){return this.get("expression").resolve(dangerous,resolved)}else if(dangerous&&this.isMemberExpression()){var targetKey=this.toComputedKey();if(!t.isLiteral(targetKey))return;var targetName=targetKey.value;var target=this.get("object").resolve(dangerous,resolved);if(target.isObjectExpression()){var props=target.get("properties");var _arr=props;for(var _i=0;_i<_arr.length;_i++){var prop=_arr[_i];if(!prop.isProperty())continue;var key=prop.get("key");var match=prop.isnt("computed")&&key.isIdentifier({name:targetName});match=match||key.isLiteral({value:targetName});if(match)return prop.get("value").resolve(dangerous,resolved)}}else if(target.isArrayExpression()&&!isNaN(+targetName)){var elems=target.get("elements");var elem=elems[targetName];if(elem)return elem.resolve(dangerous,resolved)}}}},{"../../types":196,"lodash/collection/includes":439}],177:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var _transformationHelpersReact=require("../../../transformation/helpers/react");var react=_interopRequireWildcard(_transformationHelpersReact);var _types=require("../../../types");var t=_interopRequireWildcard(_types);var referenceVisitor={ReferencedIdentifier:function ReferencedIdentifier(node,parent,scope,state){if(this.isJSXIdentifier()&&react.isCompatTag(node.name)){return}var binding=scope.getBinding(node.name);if(!binding)return;if(binding!==state.scope.getBinding(node.name))return;if(binding.constant){state.bindings[node.name]=binding}else{var _arr=binding.constantViolations;for(var _i=0;_i<_arr.length;_i++){var violationPath=_arr[_i];state.breakOnScopePaths=state.breakOnScopePaths.concat(violationPath.getAncestry())}}}};var PathHoister=function(){function PathHoister(path,scope){_classCallCheck(this,PathHoister);this.breakOnScopePaths=[];this.bindings={};this.scopes=[];this.scope=scope;this.path=path}PathHoister.prototype.isCompatibleScope=function isCompatibleScope(scope){for(var key in this.bindings){var binding=this.bindings[key];if(!scope.bindingIdentifierEquals(key,binding.identifier)){return false}}return true};PathHoister.prototype.getCompatibleScopes=function getCompatibleScopes(){var scope=this.path.scope;do{if(this.isCompatibleScope(scope)){this.scopes.push(scope)}else{break}if(this.breakOnScopePaths.indexOf(scope.path)>=0){break}}while(scope=scope.parent)};PathHoister.prototype.getAttachmentPath=function getAttachmentPath(){var scopes=this.scopes;var scope=scopes.pop();if(!scope)return;if(scope.path.isFunction()){if(this.hasOwnParamBindings(scope)){if(this.scope===scope)return;return scope.path.get("body").get("body")[0]}else{return this.getNextScopeStatementParent()}}else if(scope.path.isProgram()){return this.getNextScopeStatementParent()}};PathHoister.prototype.getNextScopeStatementParent=function getNextScopeStatementParent(){var scope=this.scopes.pop();if(scope)return scope.path.getStatementParent()};PathHoister.prototype.hasOwnParamBindings=function hasOwnParamBindings(scope){for(var name in this.bindings){if(!scope.hasOwnBinding(name))continue;var binding=this.bindings[name];if(binding.kind==="param")return true}return false};PathHoister.prototype.run=function run(){var node=this.path.node;if(node._hoisted)return;node._hoisted=true;this.path.traverse(referenceVisitor,this);this.getCompatibleScopes();var attachTo=this.getAttachmentPath();if(!attachTo)return;if(attachTo.getFunctionParent()===this.path.getFunctionParent())return;var uid=attachTo.scope.generateUidIdentifier("ref");attachTo.insertBefore([t.variableDeclaration("var",[t.variableDeclarator(uid,this.path.node)])]);var parent=this.path.parentPath;if(parent.isJSXElement()&&this.path.container===parent.node.children){uid=t.JSXExpressionContainer(uid)}this.path.replaceWith(uid)};return PathHoister}();exports["default"]=PathHoister;module.exports=exports["default"]},{"../../../transformation/helpers/react":79,"../../../types":196}],178:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _types=require("../../../types");var t=_interopRequireWildcard(_types);var pre=[function(self){if(self.key==="body"&&(self.isBlockStatement()||self.isClassBody())){self.node.body=[];return true}},function(self,parent){var replace=false;replace=replace||self.key==="body"&&parent.isArrowFunctionExpression();replace=replace||self.key==="argument"&&parent.isThrowStatement();if(replace){self.replaceWith(t.identifier("undefined"));return true}}];exports.pre=pre;var post=[function(self,parent){var removeParent=false;removeParent=removeParent||self.key==="test"&&(parent.isWhile()||parent.isSwitchCase());removeParent=removeParent||self.key==="declaration"&&parent.isExportDeclaration();removeParent=removeParent||self.key==="body"&&parent.isLabeledStatement();removeParent=removeParent||self.listKey==="declarations"&&parent.isVariableDeclaration()&&parent.node.declarations.length===0;removeParent=removeParent||self.key==="expression"&&parent.isExpressionStatement();removeParent=removeParent||self.key==="test"&&parent.isIfStatement();if(removeParent){parent.dangerouslyRemove();return true}},function(self,parent){if(parent.isSequenceExpression()&&parent.node.expressions.length===1){parent.replaceWith(parent.node.expressions[0]);return true}},function(self,parent){if(parent.isBinary()){if(self.key==="left"){parent.replaceWith(parent.node.right)}else{parent.replaceWith(parent.node.left)}return true}}];exports.post=post},{"../../../types":196}],179:[function(require,module,exports){"use strict";exports.__esModule=true;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _transformationHelpersReact=require("../../../transformation/helpers/react");var react=_interopRequireWildcard(_transformationHelpersReact);var _types=require("../../../types");var t=_interopRequireWildcard(_types);var ReferencedIdentifier={types:["Identifier","JSXIdentifier"],checkPath:function checkPath(_ref,opts){var node=_ref.node;var parent=_ref.parent;if(!t.isIdentifier(node,opts)){if(t.isJSXIdentifier(node,opts)){if(react.isCompatTag(node.name))return false}else{return false}}return t.isReferenced(node,parent)}};exports.ReferencedIdentifier=ReferencedIdentifier;var BindingIdentifier={types:["Identifier"],checkPath:function checkPath(_ref2){var node=_ref2.node;var parent=_ref2.parent;return t.isBinding(node,parent)}};exports.BindingIdentifier=BindingIdentifier;var Statement={types:["Statement"],checkPath:function checkPath(_ref3){var node=_ref3.node;var parent=_ref3.parent;if(t.isStatement(node)){if(t.isVariableDeclaration(node)){if(t.isForXStatement(parent,{left:node}))return false;if(t.isForStatement(parent,{init:node}))return false}return true}else{return false}}};exports.Statement=Statement;var Expression={types:["Expression"],checkPath:function checkPath(path){if(path.isIdentifier()){return path.isReferencedIdentifier()}else{return t.isExpression(path.node)}}};exports.Expression=Expression;var Scope={types:["Scopable"],checkPath:function checkPath(path){return t.isScope(path.node,path.parent)}};exports.Scope=Scope;var Referenced={checkPath:function checkPath(path){return t.isReferenced(path.node,path.parent)}};exports.Referenced=Referenced;var BlockScoped={checkPath:function checkPath(path){return t.isBlockScoped(path.node)}};exports.BlockScoped=BlockScoped;var Var={types:["VariableDeclaration"],checkPath:function checkPath(path){return t.isVar(path.node)}};exports.Var=Var;var DirectiveLiteral={types:["Literal"],checkPath:function checkPath(path){return path.isLiteral()&&path.parentPath.isExpressionStatement()}};exports.DirectiveLiteral=DirectiveLiteral;var Directive={types:["ExpressionStatement"],checkPath:function checkPath(path){return path.get("expression").isLiteral()}};exports.Directive=Directive;var User={checkPath:function checkPath(path){return path.node&&!!path.node.loc}};exports.User=User;var Generated={checkPath:function checkPath(path){return!path.isUser()}};exports.Generated=Generated;var Flow={types:["Flow","ImportDeclaration","ExportDeclaration"],checkPath:function checkPath(_ref4){var node=_ref4.node;if(t.isFlow(node)){return true}else if(t.isImportDeclaration(node)){return node.importKind==="type"||node.importKind==="typeof"}else if(t.isExportDeclaration(node)){return node.exportKind==="type"}else{return false}}};exports.Flow=Flow},{"../../../transformation/helpers/react":79,"../../../types":196}],180:[function(require,module,exports){"use strict";exports.__esModule=true;exports.insertBefore=insertBefore;exports._containerInsert=_containerInsert;exports._containerInsertBefore=_containerInsertBefore;exports._containerInsertAfter=_containerInsertAfter;exports._maybePopFromStatements=_maybePopFromStatements;exports.insertAfter=insertAfter;exports.updateSiblingKeys=updateSiblingKeys;exports._verifyNodeList=_verifyNodeList;exports.unshiftContainer=unshiftContainer;exports.pushContainer=pushContainer;exports.hoist=hoist;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _libHoister=require("./lib/hoister");var _libHoister2=_interopRequireDefault(_libHoister);var _index=require("./index");var _index2=_interopRequireDefault(_index);var _types=require("../../types");var t=_interopRequireWildcard(_types);function insertBefore(nodes){this._assertUnremoved();nodes=this._verifyNodeList(nodes);if(this.parentPath.isExpressionStatement()||this.parentPath.isLabeledStatement()){return this.parentPath.insertBefore(nodes)}else if(this.isNodeType("Expression")||this.parentPath.isForStatement()&&this.key==="init"){if(this.node)nodes.push(this.node);this.replaceExpressionWithStatements(nodes)}else{this._maybePopFromStatements(nodes);if(Array.isArray(this.container)){return this._containerInsertBefore(nodes)}else if(this.isStatementOrBlock()){if(this.node)nodes.push(this.node);this.node=this.container[this.key]=t.blockStatement(nodes)}else{throw new Error("We don't know what to do with this node type. We were previously a Statement but we can't fit in here?")}}return[this]}function _containerInsert(from,nodes){this.updateSiblingKeys(from,nodes.length);var paths=[];for(var i=0;i=fromIndex){path.key+=incrementBy}}}function _verifyNodeList(nodes){if(nodes.constructor!==Array){nodes=[nodes]}for(var i=0;i1)id+=i;return"_"+id};Scope.prototype.generateUidIdentifierBasedOnNode=function generateUidIdentifierBasedOnNode(parent,defaultName){var node=parent;if(t.isAssignmentExpression(parent)){node=parent.left}else if(t.isVariableDeclarator(parent)){node=parent.id}else if(t.isProperty(node)){node=node.key}var parts=[];var add=function add(node){if(t.isModuleDeclaration(node)){if(node.source){add(node.source)}else if(node.specifiers&&node.specifiers.length){var _arr4=node.specifiers;for(var _i4=0;_i4<_arr4.length;_i4++){var specifier=_arr4[_i4];add(specifier)}}else if(node.declaration){add(node.declaration)}}else if(t.isModuleSpecifier(node)){add(node.local)}else if(t.isMemberExpression(node)){add(node.object);add(node.property)}else if(t.isIdentifier(node)){parts.push(node.name)}else if(t.isLiteral(node)){parts.push(node.value)}else if(t.isCallExpression(node)){add(node.callee)}else if(t.isObjectExpression(node)||t.isObjectPattern(node)){var _arr5=node.properties;for(var _i5=0;_i5<_arr5.length;_i5++){var prop=_arr5[_i5];add(prop.key||prop.argument)}}};add(node);var id=parts.join("$");id=id.replace(/^_/,"")||defaultName||"ref";return this.generateUidIdentifier(id)};Scope.prototype.isStatic=function isStatic(node){if(t.isThisExpression(node)||t.isSuper(node)){return true}if(t.isIdentifier(node)){var binding=this.getBinding(node.name);if(binding){return binding.constant}else{return this.hasBinding(node.name)}}return false};Scope.prototype.maybeGenerateMemoised=function maybeGenerateMemoised(node,dontPush){if(this.isStatic(node)){return null}else{var id=this.generateUidIdentifierBasedOnNode(node);if(!dontPush)this.push({id:id});return id}};Scope.prototype.checkBlockScopedCollisions=function checkBlockScopedCollisions(local,kind,name,id){if(kind==="param")return;if(kind==="hoisted"&&local.kind==="let")return;var duplicate=false;if(!duplicate)duplicate=kind==="let"||local.kind==="let"||local.kind==="const"||local.kind==="module";if(!duplicate)duplicate=local.kind==="param"&&(kind==="let"||kind==="const");if(duplicate){throw this.hub.file.errorWithNode(id,messages.get("scopeDuplicateDeclaration",name),TypeError)}};Scope.prototype.rename=function rename(oldName,newName,block){newName=newName||this.generateUidIdentifier(oldName).name;var info=this.getBinding(oldName);if(!info)return;var state={newName:newName,oldName:oldName,binding:info.identifier,info:info};var scope=info.scope;scope.traverse(block||scope.block,renameVisitor,state);if(!block){scope.removeOwnBinding(oldName);scope.bindings[newName]=info;state.binding.name=newName}var file=this.hub.file;if(file){this._renameFromMap(file.moduleFormatter.localImports,oldName,newName,state.binding)}};Scope.prototype._renameFromMap=function _renameFromMap(map,oldName,newName,value){if(map[oldName]){map[newName]=value;map[oldName]=null}};Scope.prototype.dump=function dump(){var sep=_repeating2["default"]("-",60);console.log(sep);var scope=this;do{console.log("#",scope.block.type);for(var name in scope.bindings){var binding=scope.bindings[name];console.log(" -",name,{constant:binding.constant,references:binding.references,kind:binding.kind})}}while(scope=scope.parent);console.log(sep)};Scope.prototype.toArray=function toArray(node,i){var file=this.hub.file;if(t.isIdentifier(node)){var binding=this.getBinding(node.name);if(binding&&binding.constant&&binding.path.isGenericType("Array"))return node}if(t.isArrayExpression(node)){return node}if(t.isIdentifier(node,{name:"arguments"})){return t.callExpression(t.memberExpression(file.addHelper("slice"),t.identifier("call")),[node])}var helperName="to-array";var args=[node];if(i===true){helperName="to-consumable-array"}else if(i){args.push(t.literal(i));helperName="sliced-to-array";if(this.hub.file.isLoose("es6.forOf"))helperName+="-loose"}return t.callExpression(file.addHelper(helperName),args)};Scope.prototype.registerDeclaration=function registerDeclaration(path){if(path.isLabeledStatement()){this.registerBinding("label",path)}else if(path.isFunctionDeclaration()){this.registerBinding("hoisted",path)}else if(path.isVariableDeclaration()){var declarations=path.get("declarations");var _arr6=declarations;for(var _i6=0;_i6<_arr6.length;_i6++){var declar=_arr6[_i6];this.registerBinding(path.node.kind,declar)}}else if(path.isClassDeclaration()){this.registerBinding("let",path)}else if(path.isImportDeclaration()){var specifiers=path.get("specifiers");var _arr7=specifiers;for(var _i7=0;_i7<_arr7.length;_i7++){var specifier=_arr7[_i7];this.registerBinding("module",specifier)}}else if(path.isExportDeclaration()){var declar=path.get("declaration");if(declar.isClassDeclaration()||declar.isFunctionDeclaration()||declar.isVariableDeclaration()){this.registerDeclaration(declar)}}else{this.registerBinding("unknown",path)}};Scope.prototype.registerConstantViolation=function registerConstantViolation(root,left,right){var ids=left.getBindingIdentifiers();for(var name in ids){var binding=this.getBinding(name);if(binding)binding.reassign(root,left,right)}};Scope.prototype.registerBinding=function registerBinding(kind,path){if(!kind)throw new ReferenceError("no `kind`");if(path.isVariableDeclaration()){var declarators=path.get("declarations");var _arr8=declarators;for(var _i8=0;_i8<_arr8.length;_i8++){var declar=_arr8[_i8];this.registerBinding(kind,declar)}return}var parent=this.getProgramParent();var ids=path.getBindingIdentifiers(true);for(var name in ids){var _arr9=ids[name];for(var _i9=0;_i9<_arr9.length;_i9++){var id=_arr9[_i9];var local=this.getOwnBinding(name);if(local){if(local.identifier===id)continue;this.checkBlockScopedCollisions(local,kind,name,id)}parent.references[name]=true;this.bindings[name]=new _binding2["default"]({identifier:id,existing:local,scope:this,path:path,kind:kind})}}};Scope.prototype.addGlobal=function addGlobal(node){this.globals[node.name]=node};Scope.prototype.hasUid=function hasUid(name){var scope=this;do{if(scope.uids[name])return true}while(scope=scope.parent);return false};Scope.prototype.hasGlobal=function hasGlobal(name){var scope=this;do{if(scope.globals[name])return true}while(scope=scope.parent);return false};Scope.prototype.hasReference=function hasReference(name){var scope=this;do{if(scope.references[name])return true}while(scope=scope.parent);return false};Scope.prototype.isPure=function isPure(node,constantsOnly){if(t.isIdentifier(node)){var binding=this.getBinding(node.name);if(!binding)return false;if(constantsOnly)return binding.constant;return true}else if(t.isClass(node)){return!node.superClass||this.isPure(node.superClass,constantsOnly)}else if(t.isBinary(node)){return this.isPure(node.left,constantsOnly)&&this.isPure(node.right,constantsOnly)}else if(t.isArrayExpression(node)){var _arr10=node.elements;for(var _i10=0;_i10<_arr10.length;_i10++){var elem=_arr10[_i10];if(!this.isPure(elem,constantsOnly))return false}return true}else if(t.isObjectExpression(node)){var _arr11=node.properties;for(var _i11=0;_i11<_arr11.length;_i11++){var prop=_arr11[_i11];if(!this.isPure(prop,constantsOnly))return false}return true}else if(t.isProperty(node)){if(node.computed&&!this.isPure(node.key,constantsOnly))return false;return this.isPure(node.value,constantsOnly)}else{return t.isPure(node)}};Scope.prototype.setData=function setData(key,val){return this.data[key]=val};Scope.prototype.getData=function getData(key){var scope=this;do{var data=scope.data[key];if(data!=null)return data}while(scope=scope.parent)};Scope.prototype.removeData=function removeData(key){var scope=this;do{var data=scope.data[key];if(data!=null)scope.data[key]=null}while(scope=scope.parent)};Scope.prototype.init=function init(){if(!this.references)this.crawl()};Scope.prototype.crawl=function crawl(){var path=this.path;var info=this.block._scopeInfo;if(info)return _lodashObjectExtend2["default"](this,info);info=this.block._scopeInfo={references:_helpersObject2["default"](),bindings:_helpersObject2["default"](),globals:_helpersObject2["default"](),uids:_helpersObject2["default"](),data:_helpersObject2["default"]()};_lodashObjectExtend2["default"](this,info);if(path.isLoop()){var _arr12=t.FOR_INIT_KEYS;for(var _i12=0;_i12<_arr12.length;_i12++){var key=_arr12[_i12];var node=path.get(key);if(node.isBlockScoped())this.registerBinding(node.node.kind,node)}}if(path.isFunctionExpression()&&path.has("id")){if(!t.isProperty(path.parent,{method:true})){this.registerBinding("var",path)}}if(path.isClassExpression()&&path.has("id")){this.registerBinding("var",path)}if(path.isFunction()){var params=path.get("params");var _arr13=params;for(var _i13=0;_i13<_arr13.length;_i13++){var param=_arr13[_i13];this.registerBinding("param",param)}}if(path.isCatchClause()){this.registerBinding("let",path)}if(path.isComprehensionExpression()){this.registerBinding("let",path)}var parent=this.getProgramParent();if(parent.crawling)return;this.crawling=true;path.traverse(collectorVisitor);this.crawling=false};Scope.prototype.push=function push(opts){var path=this.path;if(path.isSwitchStatement()){path=this.getFunctionParent().path}if(path.isLoop()||path.isCatchClause()||path.isFunction()){t.ensureBlock(path.node);path=path.get("body")}if(!path.isBlockStatement()&&!path.isProgram()){path=this.getBlockParent().path}var unique=opts.unique;var kind=opts.kind||"var";var blockHoist=opts._blockHoist==null?2:opts._blockHoist;var dataKey="declaration:"+kind+":"+blockHoist;var declarPath=!unique&&path.getData(dataKey);if(!declarPath){var declar=t.variableDeclaration(kind,[]);declar._generated=true;declar._blockHoist=blockHoist;this.hub.file.attachAuxiliaryComment(declar);var _path$unshiftContainer=path.unshiftContainer("body",[declar]);declarPath=_path$unshiftContainer[0];if(!unique)path.setData(dataKey,declarPath)}var declarator=t.variableDeclarator(opts.id,opts.init);declarPath.node.declarations.push(declarator);this.registerBinding(kind,declarPath.get("declarations").pop())};Scope.prototype.getProgramParent=function getProgramParent(){var scope=this;do{if(scope.path.isProgram()){return scope}}while(scope=scope.parent);throw new Error("We couldn't find a Function or Program...")};Scope.prototype.getFunctionParent=function getFunctionParent(){var scope=this;do{if(scope.path.isFunctionParent()){return scope}}while(scope=scope.parent);throw new Error("We couldn't find a Function or Program...")};Scope.prototype.getBlockParent=function getBlockParent(){var scope=this;do{if(scope.path.isBlockParent()){return scope}}while(scope=scope.parent);throw new Error("We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...")};Scope.prototype.getAllBindings=function getAllBindings(){var ids=_helpersObject2["default"]();var scope=this;do{_lodashObjectDefaults2["default"](ids,scope.bindings);scope=scope.parent}while(scope);return ids};Scope.prototype.getAllBindingsOfKind=function getAllBindingsOfKind(){var ids=_helpersObject2["default"]();var _arr14=arguments;for(var _i14=0;_i14<_arr14.length;_i14++){var kind=_arr14[_i14];var scope=this;do{for(var name in scope.bindings){var binding=scope.bindings[name];if(binding.kind===kind)ids[name]=binding}scope=scope.parent}while(scope)}return ids};Scope.prototype.bindingIdentifierEquals=function bindingIdentifierEquals(name,node){return this.getBindingIdentifier(name)===node};Scope.prototype.getBinding=function getBinding(name){var scope=this;do{var binding=scope.getOwnBinding(name);if(binding)return binding}while(scope=scope.parent)};Scope.prototype.getOwnBinding=function getOwnBinding(name){return this.bindings[name]};Scope.prototype.getBindingIdentifier=function getBindingIdentifier(name){var info=this.getBinding(name);return info&&info.identifier};Scope.prototype.getOwnBindingIdentifier=function getOwnBindingIdentifier(name){var binding=this.bindings[name];return binding&&binding.identifier};Scope.prototype.hasOwnBinding=function hasOwnBinding(name){return!!this.getOwnBinding(name)};Scope.prototype.hasBinding=function hasBinding(name,noGlobals){if(!name)return false;if(this.hasOwnBinding(name))return true;if(this.parentHasBinding(name,noGlobals))return true;if(this.hasUid(name))return true;if(!noGlobals&&_lodashCollectionIncludes2["default"](Scope.globals,name))return true;if(!noGlobals&&_lodashCollectionIncludes2["default"](Scope.contextVariables,name))return true;return false};Scope.prototype.parentHasBinding=function parentHasBinding(name,noGlobals){return this.parent&&this.parent.hasBinding(name,noGlobals)};Scope.prototype.moveBindingTo=function moveBindingTo(name,scope){var info=this.getBinding(name);if(info){info.scope.removeOwnBinding(name);info.scope=scope;scope.bindings[name]=info}};Scope.prototype.removeOwnBinding=function removeOwnBinding(name){delete this.bindings[name]};Scope.prototype.removeBinding=function removeBinding(name){var info=this.getBinding(name);if(info){info.scope.removeOwnBinding(name)}var scope=this;do{if(scope.uids[name]){scope.uids[name]=false}}while(scope=scope.parent)};_createClass(Scope,null,[{key:"globals",value:_lodashArrayFlatten2["default"]([_globals2["default"].builtin,_globals2["default"].browser,_globals2["default"].node].map(Object.keys)),enumerable:true},{key:"contextVariables",value:["arguments","undefined","Infinity","NaN"],enumerable:true}]);return Scope}();exports["default"]=Scope;module.exports=exports["default"]},{"../../helpers/object":58,"../../messages":60,"../../types":196,"../index":165,"./binding":183,globals:415,"lodash/array/flatten":432,"lodash/collection/includes":439,"lodash/object/defaults":536,"lodash/object/extend":537,repeating:611}],185:[function(require,module,exports){"use strict";exports.__esModule=true;exports.explode=explode;exports.verify=verify;exports.merge=merge;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}var _pathLibVirtualTypes=require("./path/lib/virtual-types");var virtualTypes=_interopRequireWildcard(_pathLibVirtualTypes);var _messages=require("../messages");var messages=_interopRequireWildcard(_messages);var _types=require("../types");var t=_interopRequireWildcard(_types);var _lodashLangClone=require("lodash/lang/clone");var _lodashLangClone2=_interopRequireDefault(_lodashLangClone);function explode(visitor){if(visitor._exploded)return visitor;visitor._exploded=true;for(var nodeType in visitor){if(shouldIgnoreKey(nodeType))continue;var parts=nodeType.split("|");if(parts.length===1)continue;var fns=visitor[nodeType];delete visitor[nodeType];var _arr=parts;for(var _i=0;_i<_arr.length;_i++){var part=_arr[_i];visitor[part]=fns}}verify(visitor);delete visitor.__esModule;ensureEntranceObjects(visitor);ensureCallbackArrays(visitor);var _arr2=Object.keys(visitor);for(var _i2=0;_i2<_arr2.length;_i2++){var nodeType=_arr2[_i2];if(shouldIgnoreKey(nodeType))continue;var wrapper=virtualTypes[nodeType];if(!wrapper)continue;var fns=visitor[nodeType];for(var type in fns){fns[type]=wrapCheck(wrapper,fns[type])}delete visitor[nodeType];if(wrapper.types){var _arr4=wrapper.types;for(var _i4=0;_i4<_arr4.length;_i4++){var type=_arr4[_i4];if(visitor[type]){mergePair(visitor[type],fns)}else{visitor[type]=fns}}}else{mergePair(visitor,fns)}}for(var nodeType in visitor){if(shouldIgnoreKey(nodeType))continue;var fns=visitor[nodeType];var aliases=t.FLIPPED_ALIAS_KEYS[nodeType];if(!aliases)continue;delete visitor[nodeType];var _arr3=aliases;for(var _i3=0;_i3<_arr3.length;_i3++){var alias=_arr3[_i3];var existing=visitor[alias];if(existing){mergePair(existing,fns)}else{visitor[alias]=_lodashLangClone2["default"](fns)}}}for(var nodeType in visitor){if(shouldIgnoreKey(nodeType))continue;ensureCallbackArrays(visitor[nodeType])}return visitor}function verify(visitor){if(visitor._verified)return;if(typeof visitor==="function"){throw new Error(messages.get("traverseVerifyRootFunction"))}for(var nodeType in visitor){if(shouldIgnoreKey(nodeType))continue;if(t.TYPES.indexOf(nodeType)<0){throw new Error(messages.get("traverseVerifyNodeType",nodeType))}var visitors=visitor[nodeType];if(typeof visitors==="object"){for(var visitorKey in visitors){if(visitorKey==="enter"||visitorKey==="exit")continue;throw new Error(messages.get("traverseVerifyVisitorProperty",nodeType,visitorKey))}}}visitor._verified=true}function merge(visitors){var rootVisitor={};var _arr5=visitors;for(var _i5=0;_i5<_arr5.length;_i5++){var visitor=_arr5[_i5];explode(visitor);for(var type in visitor){var nodeVisitor=rootVisitor[type]=rootVisitor[type]||{};mergePair(nodeVisitor,visitor[type])}}return rootVisitor}function ensureEntranceObjects(obj){for(var key in obj){if(shouldIgnoreKey(key))continue;var fns=obj[key];if(typeof fns==="function"){obj[key]={enter:fns}}}}function ensureCallbackArrays(obj){if(obj.enter&&!Array.isArray(obj.enter))obj.enter=[obj.enter];if(obj.exit&&!Array.isArray(obj.exit))obj.exit=[obj.exit]}function wrapCheck(wrapper,fn){return function(){if(wrapper.checkPath(this)){return fn.apply(this,arguments)}}}function shouldIgnoreKey(key){if(key[0]==="_")return true;if(key==="enter"||key==="exit"||key==="shouldSkip")return true;if(key==="blacklist"||key==="noScope"||key==="skipKeys")return true;return false}function mergePair(dest,src){for(var key in src){dest[key]=[].concat(dest[key]||[],src[key])}}},{"../messages":60,"../types":196,"./path/lib/virtual-types":179,"lodash/lang/clone":520}],186:[function(require,module,exports){"use strict";exports.__esModule=true;exports.toComputedKey=toComputedKey;exports.toSequenceExpression=toSequenceExpression;exports.toKeyAlias=toKeyAlias;exports.toIdentifier=toIdentifier;exports.toBindingIdentifierName=toBindingIdentifierName;exports.toStatement=toStatement;exports.toExpression=toExpression;exports.toBlock=toBlock;exports.valueToNode=valueToNode;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _lodashLangIsPlainObject=require("lodash/lang/isPlainObject");var _lodashLangIsPlainObject2=_interopRequireDefault(_lodashLangIsPlainObject);var _lodashLangIsNumber=require("lodash/lang/isNumber");var _lodashLangIsNumber2=_interopRequireDefault(_lodashLangIsNumber);var _lodashLangIsRegExp=require("lodash/lang/isRegExp");var _lodashLangIsRegExp2=_interopRequireDefault(_lodashLangIsRegExp);var _lodashLangIsString=require("lodash/lang/isString");var _lodashLangIsString2=_interopRequireDefault(_lodashLangIsString);var _traversal=require("../traversal");var _traversal2=_interopRequireDefault(_traversal);var _index=require("./index");var t=_interopRequireWildcard(_index);function toComputedKey(node){var key=arguments.length<=1||arguments[1]===undefined?node.key||node.property:arguments[1];return function(){if(!node.computed){if(t.isIdentifier(key))key=t.literal(key.name)}return key}()}function toSequenceExpression(nodes,scope){var declars=[];var bailed=false;var result=convert(nodes);if(bailed)return;for(var i=0;i=0){continue}if(t.isAnyTypeAnnotation(node)){return[node]}if(t.isFlowBaseAnnotation(node)){bases[node.type]=node;continue}if(t.isUnionTypeAnnotation(node)){if(typeGroups.indexOf(node.types)<0){nodes=nodes.concat(node.types);typeGroups.push(node.types)}continue}if(t.isGenericTypeAnnotation(node)){var _name=node.id.name;if(generics[_name]){var existing=generics[_name];if(existing.typeParameters){if(node.typeParameters){existing.typeParameters.params=removeTypeDuplicates(existing.typeParameters.params.concat(node.typeParameters.params))}}else{existing=node.typeParameters}}else{generics[_name]=node}continue}types.push(node)}for(var type in bases){types.push(bases[type])}for(var _name2 in generics){types.push(generics[_name2])}return types}function createTypeAnnotationBasedOnTypeof(type){if(type==="string"){return t.stringTypeAnnotation()}else if(type==="number"){return t.numberTypeAnnotation()}else if(type==="undefined"){return t.voidTypeAnnotation()}else if(type==="boolean"){return t.booleanTypeAnnotation()}else if(type==="function"){return t.genericTypeAnnotation(t.identifier("Function"))}else if(type==="object"){return t.genericTypeAnnotation(t.identifier("Object"))}else if(type==="symbol"){return t.genericTypeAnnotation(t.identifier("Symbol"))}else{throw new Error("Invalid typeof value")}}},{"./index":196}],196:[function(require,module,exports){"use strict";exports.__esModule=true;exports.is=is;exports.isType=isType;exports.shallowEqual=shallowEqual;exports.appendToMemberExpression=appendToMemberExpression;exports.prependToMemberExpression=prependToMemberExpression;exports.ensureBlock=ensureBlock;exports.clone=clone;exports.cloneDeep=cloneDeep;exports.buildMatchMemberExpression=buildMatchMemberExpression;exports.removeComments=removeComments;exports.inheritsComments=inheritsComments;exports.inheritTrailingComments=inheritTrailingComments;exports.inheritLeadingComments=inheritLeadingComments;exports.inheritInnerComments=inheritInnerComments;exports.inherits=inherits;function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _toFastProperties=require("to-fast-properties");var _toFastProperties2=_interopRequireDefault(_toFastProperties);var _lodashArrayCompact=require("lodash/array/compact");var _lodashArrayCompact2=_interopRequireDefault(_lodashArrayCompact);var _lodashObjectAssign=require("lodash/object/assign");var _lodashObjectAssign2=_interopRequireDefault(_lodashObjectAssign);var _lodashCollectionEach=require("lodash/collection/each");var _lodashCollectionEach2=_interopRequireDefault(_lodashCollectionEach);var _lodashArrayUniq=require("lodash/array/uniq");var _lodashArrayUniq2=_interopRequireDefault(_lodashArrayUniq);require("./definitions/init");var _definitions=require("./definitions");var t=exports;function registerType(type,skipAliasCheck){var is=t["is"+type]=function(node,opts){return t.is(type,node,opts,skipAliasCheck)};t["assert"+type]=function(node,opts){opts=opts||{};if(!is(node,opts)){throw new Error("Expected type "+JSON.stringify(type)+" with option "+JSON.stringify(opts))}}}var STATEMENT_OR_BLOCK_KEYS=["consequent","body","alternate"];exports.STATEMENT_OR_BLOCK_KEYS=STATEMENT_OR_BLOCK_KEYS;var FLATTENABLE_KEYS=["body","expressions"];exports.FLATTENABLE_KEYS=FLATTENABLE_KEYS;var FOR_INIT_KEYS=["left","init"];exports.FOR_INIT_KEYS=FOR_INIT_KEYS;var COMMENT_KEYS=["leadingComments","trailingComments","innerComments"];exports.COMMENT_KEYS=COMMENT_KEYS;var INHERIT_KEYS={optional:["typeAnnotation","typeParameters","returnType"],force:["_scopeInfo","_paths","start","loc","end"]};exports.INHERIT_KEYS=INHERIT_KEYS;var BOOLEAN_NUMBER_BINARY_OPERATORS=[">","<",">=","<="];exports.BOOLEAN_NUMBER_BINARY_OPERATORS=BOOLEAN_NUMBER_BINARY_OPERATORS;var EQUALITY_BINARY_OPERATORS=["==","===","!=","!=="];exports.EQUALITY_BINARY_OPERATORS=EQUALITY_BINARY_OPERATORS;var COMPARISON_BINARY_OPERATORS=EQUALITY_BINARY_OPERATORS.concat(["in","instanceof"]);exports.COMPARISON_BINARY_OPERATORS=COMPARISON_BINARY_OPERATORS;var BOOLEAN_BINARY_OPERATORS=[].concat(COMPARISON_BINARY_OPERATORS,BOOLEAN_NUMBER_BINARY_OPERATORS);exports.BOOLEAN_BINARY_OPERATORS=BOOLEAN_BINARY_OPERATORS;var NUMBER_BINARY_OPERATORS=["-","/","*","**","&","|",">>",">>>","<<","^"];exports.NUMBER_BINARY_OPERATORS=NUMBER_BINARY_OPERATORS;var BOOLEAN_UNARY_OPERATORS=["delete","!"];exports.BOOLEAN_UNARY_OPERATORS=BOOLEAN_UNARY_OPERATORS;var NUMBER_UNARY_OPERATORS=["+","-","++","--","~"];exports.NUMBER_UNARY_OPERATORS=NUMBER_UNARY_OPERATORS;var STRING_UNARY_OPERATORS=["typeof"];exports.STRING_UNARY_OPERATORS=STRING_UNARY_OPERATORS;exports.VISITOR_KEYS=_definitions.VISITOR_KEYS;exports.BUILDER_KEYS=_definitions.BUILDER_KEYS;exports.ALIAS_KEYS=_definitions.ALIAS_KEYS;_lodashCollectionEach2["default"](t.VISITOR_KEYS,function(keys,type){registerType(type,true)});t.FLIPPED_ALIAS_KEYS={};_lodashCollectionEach2["default"](t.ALIAS_KEYS,function(aliases,type){_lodashCollectionEach2["default"](aliases,function(alias){var types=t.FLIPPED_ALIAS_KEYS[alias]=t.FLIPPED_ALIAS_KEYS[alias]||[];types.push(type)})});_lodashCollectionEach2["default"](t.FLIPPED_ALIAS_KEYS,function(types,type){t[type.toUpperCase()+"_TYPES"]=types;registerType(type,false)});var TYPES=Object.keys(t.VISITOR_KEYS).concat(Object.keys(t.FLIPPED_ALIAS_KEYS));exports.TYPES=TYPES;function is(type,node,opts,skipAliasCheck){if(!node)return false;var matches=isType(node.type,type);if(!matches)return false;if(typeof opts==="undefined"){return true}else{return t.shallowEqual(node,opts)}}function isType(nodeType,targetType){if(nodeType===targetType)return true;var aliases=t.FLIPPED_ALIAS_KEYS[targetType];if(aliases){if(aliases[0]===nodeType)return true;var _arr=aliases;for(var _i=0;_i<_arr.length;_i++){var alias=_arr[_i];if(nodeType===alias)return true}}return false}_lodashCollectionEach2["default"](t.VISITOR_KEYS,function(keys,type){if(t.BUILDER_KEYS[type])return;var defs={};_lodashCollectionEach2["default"](keys,function(key){defs[key]=null});t.BUILDER_KEYS[type]=defs});_lodashCollectionEach2["default"](t.BUILDER_KEYS,function(keys,type){var builder=function builder(){var node={};node.type=type;var i=0;for(var key in keys){var arg=arguments[i++];if(arg===undefined)arg=keys[key];node[key]=arg}return node};t[type]=builder;t[type[0].toLowerCase()+type.slice(1)]=builder});function shallowEqual(actual,expected){var keys=Object.keys(expected);var _arr2=keys;for(var _i2=0;_i2<_arr2.length;_i2++){var key=_arr2[_i2];if(actual[key]!==expected[key]){return false}}return true}function appendToMemberExpression(member,append,computed){member.object=t.memberExpression(member.object,member.property,member.computed);member.property=append;member.computed=!!computed;return member}function prependToMemberExpression(member,prepend){member.object=t.memberExpression(prepend,member.object);return member}function ensureBlock(node){var key=arguments.length<=1||arguments[1]===undefined?"body":arguments[1];return node[key]=t.toBlock(node[key],node)}function clone(node){var newNode={};for(var key in node){if(key[0]==="_")continue;newNode[key]=node[key]}return newNode}function cloneDeep(node){var newNode={};for(var key in node){if(key[0]==="_")continue;var val=node[key];if(val){if(val.type){val=t.cloneDeep(val)}else if(Array.isArray(val)){val=val.map(t.cloneDeep)}}newNode[key]=val}return newNode}function buildMatchMemberExpression(match,allowPartial){var parts=match.split(".");return function(member){if(!t.isMemberExpression(member))return false;var search=[member];var i=0;while(search.length){var node=search.shift();if(allowPartial&&i===parts.length){return true}if(t.isIdentifier(node)){if(parts[i]!==node.name)return false}else if(t.isLiteral(node)){if(parts[i]!==node.value)return false}else if(t.isMemberExpression(node)){if(node.computed&&!t.isLiteral(node.property)){return false}else{search.push(node.object);search.push(node.property);continue}}else{return false}if(++i>parts.length){return false}}return true}}function removeComments(node){var _arr3=COMMENT_KEYS;for(var _i3=0;_i3<_arr3.length;_i3++){var key=_arr3[_i3];delete node[key]}return node}function inheritsComments(child,parent){inheritTrailingComments(child,parent);inheritLeadingComments(child,parent);inheritInnerComments(child,parent);return child}function inheritTrailingComments(child,parent){_inheritComments("trailingComments",child,parent)}function inheritLeadingComments(child,parent){_inheritComments("leadingComments",child,parent)}function inheritInnerComments(child,parent){_inheritComments("innerComments",child,parent)}function _inheritComments(key,child,parent){if(child&&parent){child[key]=_lodashArrayUniq2["default"](_lodashArrayCompact2["default"]([].concat(child[key],parent[key])))}}function inherits(child,parent){if(!child||!parent)return child;var _arr4=t.INHERIT_KEYS.optional;for(var _i4=0;_i4<_arr4.length;_i4++){var key=_arr4[_i4];if(child[key]==null){child[key]=parent[key]}}var _arr5=t.INHERIT_KEYS.force;for(var _i5=0;_i5<_arr5.length;_i5++){var key=_arr5[_i5];child[key]=parent[key]}t.inheritsComments(child,parent);return child}_toFastProperties2["default"](t);_toFastProperties2["default"](t.VISITOR_KEYS);_lodashObjectAssign2["default"](t,require("./retrievers"));_lodashObjectAssign2["default"](t,require("./validators"));_lodashObjectAssign2["default"](t,require("./converters"));_lodashObjectAssign2["default"](t,require("./flow"))},{"./converters":186,"./definitions":191,"./definitions/init":192,"./flow":195,"./retrievers":197,"./validators":198,"lodash/array/compact":431,"lodash/array/uniq":435,"lodash/collection/each":437,"lodash/object/assign":535,"to-fast-properties":628}],197:[function(require,module,exports){"use strict";exports.__esModule=true;exports.getBindingIdentifiers=getBindingIdentifiers;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _helpersObject=require("../helpers/object");var _helpersObject2=_interopRequireDefault(_helpersObject);var _index=require("./index");var t=_interopRequireWildcard(_index);function getBindingIdentifiers(node,duplicates){var search=[].concat(node);var ids=_helpersObject2["default"]();while(search.length){var id=search.shift();if(!id)continue;var key=t.getBindingIdentifiers.keys[id.type];if(t.isIdentifier(id)){if(duplicates){var _ids=ids[id.name]=ids[id.name]||[];_ids.push(id)}else{ids[id.name]=id}}else if(t.isExportDeclaration(id)){if(t.isDeclaration(node.declaration)){search.push(node.declaration)}}else if(key&&id[key]){search=search.concat(id[key])}}return ids}getBindingIdentifiers.keys={DeclareClass:"id",DeclareFunction:"id",DeclareModule:"id",DeclareVariable:"id",InterfaceDeclaration:"id",TypeAlias:"id",ComprehensionExpression:"blocks",ComprehensionBlock:"left",CatchClause:"param",LabeledStatement:"label",UnaryExpression:"argument",AssignmentExpression:"left",ImportSpecifier:"local",ImportNamespaceSpecifier:"local",ImportDefaultSpecifier:"local",ImportDeclaration:"specifiers",FunctionDeclaration:"id",FunctionExpression:"id",ClassDeclaration:"id",ClassExpression:"id",RestElement:"argument",UpdateExpression:"argument",SpreadProperty:"argument",Property:"value",AssignmentPattern:"left",ArrayPattern:"elements",ObjectPattern:"properties",VariableDeclaration:"declarations",VariableDeclarator:"id"}},{"../helpers/object":58,"./index":196}],198:[function(require,module,exports){"use strict";exports.__esModule=true;exports.isBinding=isBinding;exports.isReferenced=isReferenced;exports.isValidIdentifier=isValidIdentifier;exports.isLet=isLet;exports.isBlockScoped=isBlockScoped;exports.isVar=isVar;exports.isSpecifierDefault=isSpecifierDefault;exports.isScope=isScope;exports.isImmutable=isImmutable;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _retrievers=require("./retrievers");var _esutils=require("esutils");var _esutils2=_interopRequireDefault(_esutils);var _index=require("./index");var t=_interopRequireWildcard(_index);function isBinding(node,parent){var bindingKey=_retrievers.getBindingIdentifiers.keys[parent.type];if(bindingKey){return parent[bindingKey]===node}else{return false}}function isReferenced(node,parent){switch(parent.type){case"MemberExpression":case"JSXMemberExpression":if(parent.property===node&&parent.computed){return true}else if(parent.object===node){return true}else{return false}case"MetaProperty":return false;case"Property":if(parent.key===node){return parent.computed}case"VariableDeclarator":return parent.id!==node;case"ArrowFunctionExpression":case"FunctionDeclaration":case"FunctionExpression":var _arr=parent.params;for(var _i=0;_i<_arr.length;_i++){var param=_arr[_i];if(param===node)return false}return parent.id!==node;case"ExportSpecifier":if(parent.source){return false}else{return parent.local===node}case"JSXAttribute":return parent.name!==node;case"ClassProperty":return parent.value===node;case"ImportDefaultSpecifier":case"ImportNamespaceSpecifier":case"ImportSpecifier":return false;case"ClassDeclaration":case"ClassExpression":return parent.id!==node;case"MethodDefinition":return parent.key===node&&parent.computed;case"LabeledStatement":return false;case"CatchClause":return parent.param!==node;case"RestElement":return false;case"AssignmentExpression":return parent.right===node;case"AssignmentPattern":return false;case"ObjectPattern":case"ArrayPattern":return false}return true}function isValidIdentifier(name){if(typeof name!=="string"||_esutils2["default"].keyword.isReservedWordES6(name,true)){return false}else{return _esutils2["default"].keyword.isIdentifierNameES6(name)}}function isLet(node){return t.isVariableDeclaration(node)&&(node.kind!=="var"||node._let)}function isBlockScoped(node){return t.isFunctionDeclaration(node)||t.isClassDeclaration(node)||t.isLet(node)}function isVar(node){return t.isVariableDeclaration(node,{kind:"var"})&&!node._let}function isSpecifierDefault(specifier){return t.isImportDefaultSpecifier(specifier)||t.isIdentifier(specifier.imported||specifier.exported,{name:"default"})}function isScope(node,parent){if(t.isBlockStatement(node)&&t.isFunction(parent,{body:node})){return false}return t.isScopable(node)}function isImmutable(node){if(t.isType(node.type,"Immutable"))return true;if(t.isLiteral(node)){if(node.regex){return false}else{return true}}else if(t.isIdentifier(node)){if(node.name==="undefined"){return true}else{return false}}return false}},{"./index":196,"./retrievers":197,esutils:413}],199:[function(require,module,exports){(function(__dirname){"use strict";exports.__esModule=true;exports.canCompile=canCompile;exports.list=list;exports.regexify=regexify;exports.arrayify=arrayify;exports.booleanify=booleanify;exports.shouldIgnore=shouldIgnore;exports.template=template;exports.parseTemplate=parseTemplate;function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj["default"]=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var _lodashStringEscapeRegExp=require("lodash/string/escapeRegExp");var _lodashStringEscapeRegExp2=_interopRequireDefault(_lodashStringEscapeRegExp);var _lodashStringStartsWith=require("lodash/string/startsWith");var _lodashStringStartsWith2=_interopRequireDefault(_lodashStringStartsWith);var _lodashLangCloneDeep=require("lodash/lang/cloneDeep");var _lodashLangCloneDeep2=_interopRequireDefault(_lodashLangCloneDeep);var _lodashLangIsBoolean=require("lodash/lang/isBoolean");var _lodashLangIsBoolean2=_interopRequireDefault(_lodashLangIsBoolean);var _messages=require("./messages");var messages=_interopRequireWildcard(_messages);var _minimatch=require("minimatch");var _minimatch2=_interopRequireDefault(_minimatch);var _lodashCollectionContains=require("lodash/collection/contains");var _lodashCollectionContains2=_interopRequireDefault(_lodashCollectionContains);var _traversal=require("./traversal");var _traversal2=_interopRequireDefault(_traversal);var _lodashLangIsString=require("lodash/lang/isString");var _lodashLangIsString2=_interopRequireDefault(_lodashLangIsString);var _lodashLangIsRegExp=require("lodash/lang/isRegExp");var _lodashLangIsRegExp2=_interopRequireDefault(_lodashLangIsRegExp);var _lodashLangIsEmpty=require("lodash/lang/isEmpty");var _lodashLangIsEmpty2=_interopRequireDefault(_lodashLangIsEmpty);var _helpersParse=require("./helpers/parse");var _helpersParse2=_interopRequireDefault(_helpersParse);var _path=require("path");var _path2=_interopRequireDefault(_path);var _lodashObjectHas=require("lodash/object/has");var _lodashObjectHas2=_interopRequireDefault(_lodashObjectHas);var _fs=require("fs");var _fs2=_interopRequireDefault(_fs);var _types=require("./types");var t=_interopRequireWildcard(_types);var _slash=require("slash");var _slash2=_interopRequireDefault(_slash);var _pathExists=require("path-exists");var _pathExists2=_interopRequireDefault(_pathExists);var _util=require("util");exports.inherits=_util.inherits;exports.inspect=_util.inspect;function canCompile(filename,altExts){var exts=altExts||canCompile.EXTENSIONS;var ext=_path2["default"].extname(filename);return _lodashCollectionContains2["default"](exts,ext)}canCompile.EXTENSIONS=[".js",".jsx",".es6",".es"];function list(val){if(!val){return[]}else if(Array.isArray(val)){return val}else if(typeof val==="string"){return val.split(",")}else{return[val]}}function regexify(val){if(!val)return new RegExp(/.^/);if(Array.isArray(val))val=new RegExp(val.map(_lodashStringEscapeRegExp2["default"]).join("|"),"i");if(_lodashLangIsString2["default"](val)){val=_slash2["default"](val);if(_lodashStringStartsWith2["default"](val,"./")||_lodashStringStartsWith2["default"](val,"*/"))val=val.slice(2);if(_lodashStringStartsWith2["default"](val,"**/"))val=val.slice(3);var regex=_minimatch2["default"].makeRe(val,{nocase:true});return new RegExp(regex.source.slice(1,-1),"i")}if(_lodashLangIsRegExp2["default"](val))return val;throw new TypeError("illegal type for regexify")}function arrayify(val,mapFn){if(!val)return[];if(_lodashLangIsBoolean2["default"](val))return arrayify([val],mapFn);if(_lodashLangIsString2["default"](val))return arrayify(list(val),mapFn);if(Array.isArray(val)){if(mapFn)val=val.map(mapFn);return val}return[val]}function booleanify(val){if(val==="true")return true;if(val==="false")return false;return val}function shouldIgnore(filename,ignore,only){filename=_slash2["default"](filename);if(only){var _arr=only;for(var _i=0;_i<_arr.length;_i++){var pattern=_arr[_i];if(_shouldIgnore(pattern,filename))return false}return true}else if(ignore.length){var _arr2=ignore;for(var _i2=0;_i2<_arr2.length;_i2++){var pattern=_arr2[_i2];if(_shouldIgnore(pattern,filename))return true}}return false}function _shouldIgnore(pattern,filename){if(typeof pattern==="function"){return pattern(filename)}else{return pattern.test(filename)}}var templateVisitor={noScope:true,enter:function enter(node,parent,scope,nodes){if(t.isExpressionStatement(node)){node=node.expression}if(t.isIdentifier(node)&&_lodashObjectHas2["default"](nodes,node.name)){this.skip();this.replaceInline(nodes[node.name])}},exit:function exit(node){_traversal2["default"].clearNode(node)}};function template(name,nodes,keepExpression){var ast=exports.templates[name];if(!ast)throw new ReferenceError("unknown template "+name);if(nodes===true){keepExpression=true;nodes=null}ast=_lodashLangCloneDeep2["default"](ast);if(!_lodashLangIsEmpty2["default"](nodes)){_traversal2["default"](ast,templateVisitor,null,nodes)}if(ast.body.length>1)return ast.body;var node=ast.body[0];if(!keepExpression&&t.isExpressionStatement(node)){return node.expression}else{return node}}function parseTemplate(loc,code){var ast=_helpersParse2["default"](code,{filename:loc,looseModules:true}).program;ast=_traversal2["default"].removeProperties(ast);return ast}function loadTemplates(){var templates={};var templatesLoc=_path2["default"].join(__dirname,"transformation/templates");if(!_pathExists2["default"].sync(templatesLoc)){throw new ReferenceError(messages.get("missingTemplatesDirectory"))}var _arr3=_fs2["default"].readdirSync(templatesLoc);for(var _i3=0;_i3<_arr3.length;_i3++){var name=_arr3[_i3];if(name[0]===".")return;var key=_path2["default"].basename(name,_path2["default"].extname(name));var loc=_path2["default"].join(templatesLoc,name);var code=_fs2["default"].readFileSync(loc,"utf8");templates[key]=parseTemplate(loc,code)}return templates}try{exports.templates=require("../templates.json")}catch(err){if(err.code!=="MODULE_NOT_FOUND")throw err;exports.templates=loadTemplates()}}).call(this,"/lib")},{"../templates.json":632,"./helpers/parse":59,"./messages":60,"./traversal":165,"./types":196,fs:1,"lodash/collection/contains":436,"lodash/lang/cloneDeep":521,"lodash/lang/isBoolean":524,"lodash/lang/isEmpty":525,"lodash/lang/isRegExp":531,"lodash/lang/isString":532,"lodash/object/has":538,"lodash/string/escapeRegExp":544,"lodash/string/startsWith":545,minimatch:548,path:11,"path-exists":552,slash:615,util:30}],200:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=function(_ref){var Plugin=_ref.Plugin;var t=_ref.types;return new Plugin("constant-folding",{metadata:{group:"builtin-prepass",experimental:true},visitor:{AssignmentExpression:function AssignmentExpression(){var left=this.get("left");if(!left.isIdentifier())return;var binding=this.scope.getBinding(left.node.name);if(!binding||binding.hasDeoptValue)return;var evaluated=this.get("right").evaluate();if(evaluated.confident){binding.setValue(evaluated.value)}else{binding.deoptValue()}},IfStatement:function IfStatement(){var evaluated=this.get("test").evaluate();if(!evaluated.confident){return this.skip()}if(evaluated.value){this.skipKey("alternate")}else{this.skipKey("consequent")}},Scopable:{enter:function enter(){var funcScope=this.scope.getFunctionParent();for(var name in this.scope.bindings){var binding=this.scope.bindings[name];var deopt=false;var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=binding.constantViolations[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var path=_step.value;var funcViolationScope=path.scope.getFunctionParent();if(funcViolationScope!==funcScope){deopt=true;break}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator["return"]){_iterator["return"]()}}finally{if(_didIteratorError){throw _iteratorError}}}if(deopt)binding.deoptValue()}},exit:function exit(){for(var name in this.scope.bindings){var binding=this.scope.bindings[name];binding.clearValue()}}},Expression:{exit:function exit(){var res=this.evaluate();if(res.confident)return t.valueToNode(res.value)}}}})};module.exports=exports["default"]},{}],201:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=function(_ref){var Plugin=_ref.Plugin;var t=_ref.types;function toStatements(node){ +if(t.isBlockStatement(node)){var hasBlockScoped=false;for(var i=0;i1||!binding.constant)return;if(binding.kind==="param"||binding.kind==="module")return;var replacement=binding.path.node;if(t.isVariableDeclarator(replacement)){replacement=replacement.init}if(!replacement)return;if(!scope.isPure(replacement,true))return;if(t.isClass(replacement)||t.isFunction(replacement)){if(binding.path.scope.parent!==scope)return}if(this.findParent(function(path){return path.node===replacement})){return}t.toExpression(replacement);scope.removeBinding(node.name);binding.path.dangerouslyRemove();return replacement},"ClassDeclaration|FunctionDeclaration":function ClassDeclarationFunctionDeclaration(node,parent,scope){var binding=scope.getBinding(node.id.name);if(binding&&!binding.referenced){this.dangerouslyRemove()}},VariableDeclarator:function VariableDeclarator(node,parent,scope){if(!t.isIdentifier(node.id)||!scope.isPure(node.init,true))return;visitor["ClassDeclaration|FunctionDeclaration"].apply(this,arguments)},ConditionalExpression:function ConditionalExpression(node){var evaluateTest=this.get("test").evaluateTruthy();if(evaluateTest===true){return node.consequent}else if(evaluateTest===false){return node.alternate}},BlockStatement:function BlockStatement(){var paths=this.get("body");var purge=false;for(var i=0;i3)continue;if(distance<=shortest)continue;closest=name;shortest=distance}var msg;if(closest){msg=messages.get("undeclaredVariableSuggestion",node.name,closest)}else{msg=messages.get("undeclaredVariable",node.name)}throw this.errorWithNode(msg,ReferenceError)}}})};module.exports=exports["default"]},{leven:215}],215:[function(require,module,exports){"use strict";var arr=[];var charCodeCache=[];module.exports=function(a,b){if(a===b){return 0}var aLen=a.length;var bLen=b.length;if(aLen===0){return bLen}if(bLen===0){return aLen}var bCharCode;var ret;var tmp;var tmp2;var i=0;var j=0;while(iret?tmp2>ret?ret+1:tmp2:tmp2>tmp?tmp+1:tmp2}}return ret}},{}],216:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=function(_ref){var Plugin=_ref.Plugin;var t=_ref.types;return new Plugin("undefined-to-void",{metadata:{group:"builtin-basic"},visitor:{ReferencedIdentifier:function ReferencedIdentifier(node,parent){if(node.name==="undefined"){return t.unaryExpression("void",t.literal(0),true)}}}})};module.exports=exports["default"]},{}],217:[function(require,module,exports){(function(process){"use strict";var escapeStringRegexp=require("escape-string-regexp");var ansiStyles=require("ansi-styles");var stripAnsi=require("strip-ansi");var hasAnsi=require("has-ansi");var supportsColor=require("supports-color");var defineProps=Object.defineProperties;var isSimpleWindowsTerm=process.platform==="win32"&&!/^xterm/i.test(process.env.TERM);function Chalk(options){this.enabled=!options||options.enabled===undefined?supportsColor:options.enabled}if(isSimpleWindowsTerm){ansiStyles.blue.open=""}var styles=function(){var ret={};Object.keys(ansiStyles).forEach(function(key){ansiStyles[key].closeRe=new RegExp(escapeStringRegexp(ansiStyles[key].close),"g");ret[key]={get:function(){return build.call(this,this._styles.concat(key))}}});return ret}();var proto=defineProps(function chalk(){},styles);function build(_styles){var builder=function(){return applyStyle.apply(builder,arguments)};builder._styles=_styles;builder.enabled=this.enabled;builder.__proto__=proto;return builder}function applyStyle(){var args=arguments;var argsLen=args.length;var str=argsLen!==0&&String(arguments[0]);if(argsLen>1){for(var a=1;a<]/g}},{}],222:[function(require,module,exports){"use strict";var ansiRegex=require("ansi-regex")();module.exports=function(str){return typeof str==="string"?str.replace(ansiRegex,""):str}},{"ansi-regex":223}],223:[function(require,module,exports){arguments[4][221][0].apply(exports,arguments)},{dup:221}],224:[function(require,module,exports){(function(process){"use strict";var argv=process.argv;var terminator=argv.indexOf("--");var hasFlag=function(flag){flag="--"+flag;var pos=argv.indexOf(flag);return pos!==-1&&(terminator!==-1?pos0;i--){line=lines[i];if(~line.indexOf("sourceMappingURL=data:"))return exports.fromComment(line)}}Converter.prototype.toJSON=function(space){return JSON.stringify(this.sourcemap,null,space)};Converter.prototype.toBase64=function(){var json=this.toJSON();return new Buffer(json).toString("base64")};Converter.prototype.toComment=function(options){var base64=this.toBase64();var data="sourceMappingURL=data:application/json;base64,"+base64;return options&&options.multiline?"/*# "+data+" */":"//# "+data};Converter.prototype.toObject=function(){return JSON.parse(this.toJSON())};Converter.prototype.addProperty=function(key,value){if(this.sourcemap.hasOwnProperty(key))throw new Error("property %s already exists on the sourcemap, use set property instead");return this.setProperty(key,value)};Converter.prototype.setProperty=function(key,value){this.sourcemap[key]=value;return this};Converter.prototype.getProperty=function(key){return this.sourcemap[key]};exports.fromObject=function(obj){return new Converter(obj)};exports.fromJSON=function(json){return new Converter(json,{isJSON:true})};exports.fromBase64=function(base64){return new Converter(base64,{isEncoded:true})};exports.fromComment=function(comment){comment=comment.replace(/^\/\*/g,"//").replace(/\*\/$/g,"");return new Converter(comment,{isEncoded:true,hasComment:true})};exports.fromMapFileComment=function(comment,dir){return new Converter(comment,{commentFileDir:dir,isFileComment:true,isJSON:true})};exports.fromSource=function(content,largeSource){if(largeSource)return convertFromLargeSource(content);var m=content.match(commentRx);commentRx.lastIndex=0;return m?exports.fromComment(m.pop()):null};exports.fromMapFileSource=function(content,dir){var m=content.match(mapFileCommentRx);mapFileCommentRx.lastIndex=0;return m?exports.fromMapFileComment(m.pop(),dir):null};exports.removeComments=function(src){commentRx.lastIndex=0;return src.replace(commentRx,"")};exports.removeMapFileComments=function(src){mapFileCommentRx.lastIndex=0;return src.replace(mapFileCommentRx,"")};Object.defineProperty(exports,"commentRegex",{get:function getCommentRegex(){commentRx.lastIndex=0;return commentRx}});Object.defineProperty(exports,"mapFileCommentRegex",{get:function getMapFileCommentRegex(){mapFileCommentRx.lastIndex=0;return mapFileCommentRx}})}).call(this,require("buffer").Buffer)},{buffer:4,fs:1,path:11}],226:[function(require,module,exports){module.exports=function(it){if(typeof it!="function")throw TypeError(it+" is not a function!");return it}},{}],227:[function(require,module,exports){var isObject=require("./$.is-object");module.exports=function(it){if(!isObject(it))throw TypeError(it+" is not an object!");return it}},{"./$.is-object":257}],228:[function(require,module,exports){var toIObject=require("./$.to-iobject"),toLength=require("./$.to-length"),toIndex=require("./$.to-index");module.exports=function(IS_INCLUDES){return function($this,el,fromIndex){var O=toIObject($this),length=toLength(O.length),index=toIndex(fromIndex,length),value;if(IS_INCLUDES&&el!=el)while(length>index){value=O[index++];if(value!=value)return true}else for(;length>index;index++)if(IS_INCLUDES||index in O){if(O[index]===el)return IS_INCLUDES||index}return!IS_INCLUDES&&-1}}},{"./$.to-index":293,"./$.to-iobject":295,"./$.to-length":296}],229:[function(require,module,exports){var ctx=require("./$.ctx"),IObject=require("./$.iobject"),toObject=require("./$.to-object"),toLength=require("./$.to-length");module.exports=function(TYPE){var IS_MAP=TYPE==1,IS_FILTER=TYPE==2,IS_SOME=TYPE==3,IS_EVERY=TYPE==4,IS_FIND_INDEX=TYPE==6,NO_HOLES=TYPE==5||IS_FIND_INDEX;return function($this,callbackfn,that){var O=toObject($this),self=IObject(O),f=ctx(callbackfn,that,3),length=toLength(self.length),index=0,result=IS_MAP?Array(length):IS_FILTER?[]:undefined,val,res;for(;length>index;index++)if(NO_HOLES||index in self){val=self[index];res=f(val,index,O);if(TYPE){if(IS_MAP)result[index]=res;else if(res)switch(TYPE){case 3:return true;case 5:return val;case 6:return index;case 2:result.push(val)}else if(IS_EVERY)return false}}return IS_FIND_INDEX?-1:IS_SOME||IS_EVERY?IS_EVERY:result}}},{"./$.ctx":238,"./$.iobject":254,"./$.to-length":296,"./$.to-object":297}],230:[function(require,module,exports){var toObject=require("./$.to-object"),IObject=require("./$.iobject"),enumKeys=require("./$.enum-keys");module.exports=Object.assign||function assign(target,source){var T=toObject(target),l=arguments.length,i=1;while(l>i){var S=IObject(arguments[i++]),keys=enumKeys(S),length=keys.length,j=0,key;while(length>j)T[key=keys[j++]]=S[key]}return T}},{"./$.enum-keys":242,"./$.iobject":254,"./$.to-object":297}],231:[function(require,module,exports){var cof=require("./$.cof"),TAG=require("./$.wks")("toStringTag"),ARG=cof(function(){return arguments}())=="Arguments";module.exports=function(it){var O,T,B;return it===undefined?"Undefined":it===null?"Null":typeof(T=(O=Object(it))[TAG])=="string"?T:ARG?cof(O):(B=cof(O))=="Object"&&typeof O.callee=="function"?"Arguments":B}},{"./$.cof":232,"./$.wks":300}],232:[function(require,module,exports){var toString={}.toString;module.exports=function(it){return toString.call(it).slice(8,-1)}},{}],233:[function(require,module,exports){"use strict";var $=require("./$"),hide=require("./$.hide"),ctx=require("./$.ctx"),species=require("./$.species"),strictNew=require("./$.strict-new"),defined=require("./$.defined"),forOf=require("./$.for-of"),step=require("./$.iter-step"),ID=require("./$.uid")("id"),$has=require("./$.has"),isObject=require("./$.is-object"),isExtensible=Object.isExtensible||isObject,SUPPORT_DESC=require("./$.support-desc"),SIZE=SUPPORT_DESC?"_s":"size",id=0;var fastKey=function(it,create){if(!isObject(it))return typeof it=="symbol"?it:(typeof it=="string"?"S":"P")+it;if(!$has(it,ID)){if(!isExtensible(it))return"F";if(!create)return"E";hide(it,ID,++id)}return"O"+it[ID]};var getEntry=function(that,key){var index=fastKey(key),entry;if(index!=="F")return that._i[index];for(entry=that._f;entry;entry=entry.n){if(entry.k==key)return entry}};module.exports={getConstructor:function(wrapper,NAME,IS_MAP,ADDER){var C=wrapper(function(that,iterable){strictNew(that,C,NAME);that._i=$.create(null);that._f=undefined;that._l=undefined;that[SIZE]=0;if(iterable!=undefined)forOf(iterable,IS_MAP,that[ADDER],that)});require("./$.mix")(C.prototype,{clear:function clear(){for(var that=this,data=that._i,entry=that._f;entry;entry=entry.n){entry.r=true;if(entry.p)entry.p=entry.p.n=undefined; +delete data[entry.i]}that._f=that._l=undefined;that[SIZE]=0},"delete":function(key){var that=this,entry=getEntry(that,key);if(entry){var next=entry.n,prev=entry.p;delete that._i[entry.i];entry.r=true;if(prev)prev.n=next;if(next)next.p=prev;if(that._f==entry)that._f=next;if(that._l==entry)that._l=prev;that[SIZE]--}return!!entry},forEach:function forEach(callbackfn){var f=ctx(callbackfn,arguments[1],3),entry;while(entry=entry?entry.n:this._f){f(entry.v,entry.k,this);while(entry&&entry.r)entry=entry.p}},has:function has(key){return!!getEntry(this,key)}});if(SUPPORT_DESC)$.setDesc(C.prototype,"size",{get:function(){return defined(this[SIZE])}});return C},def:function(that,key,value){var entry=getEntry(that,key),prev,index;if(entry){entry.v=value}else{that._l=entry={i:index=fastKey(key,true),k:key,v:value,p:prev=that._l,n:undefined,r:false};if(!that._f)that._f=entry;if(prev)prev.n=entry;that[SIZE]++;if(index!=="F")that._i[index]=entry}return that},getEntry:getEntry,setStrong:function(C,NAME,IS_MAP){require("./$.iter-define")(C,NAME,function(iterated,kind){this._t=iterated;this._k=kind;this._l=undefined},function(){var that=this,kind=that._k,entry=that._l;while(entry&&entry.r)entry=entry.p;if(!that._t||!(that._l=entry=entry?entry.n:that._t._f)){that._t=undefined;return step(1)}if(kind=="keys")return step(0,entry.k);if(kind=="values")return step(0,entry.v);return step(0,[entry.k,entry.v])},IS_MAP?"entries":"values",!IS_MAP,true);species(C);species(require("./$.core")[NAME])}}},{"./$":265,"./$.core":237,"./$.ctx":238,"./$.defined":240,"./$.for-of":247,"./$.has":250,"./$.hide":251,"./$.is-object":257,"./$.iter-define":261,"./$.iter-step":263,"./$.mix":270,"./$.species":283,"./$.strict-new":284,"./$.support-desc":290,"./$.uid":298}],234:[function(require,module,exports){var forOf=require("./$.for-of"),classof=require("./$.classof");module.exports=function(NAME){return function toJSON(){if(classof(this)!=NAME)throw TypeError(NAME+"#toJSON isn't generic");var arr=[];forOf(this,false,arr.push,arr);return arr}}},{"./$.classof":231,"./$.for-of":247}],235:[function(require,module,exports){"use strict";var hide=require("./$.hide"),anObject=require("./$.an-object"),strictNew=require("./$.strict-new"),forOf=require("./$.for-of"),method=require("./$.array-methods"),WEAK=require("./$.uid")("weak"),isObject=require("./$.is-object"),$has=require("./$.has"),isExtensible=Object.isExtensible||isObject,find=method(5),findIndex=method(6),id=0;var frozenStore=function(that){return that._l||(that._l=new FrozenStore)};var FrozenStore=function(){this.a=[]};var findFrozen=function(store,key){return find(store.a,function(it){return it[0]===key})};FrozenStore.prototype={get:function(key){var entry=findFrozen(this,key);if(entry)return entry[1]},has:function(key){return!!findFrozen(this,key)},set:function(key,value){var entry=findFrozen(this,key);if(entry)entry[1]=value;else this.a.push([key,value])},"delete":function(key){var index=findIndex(this.a,function(it){return it[0]===key});if(~index)this.a.splice(index,1);return!!~index}};module.exports={getConstructor:function(wrapper,NAME,IS_MAP,ADDER){var C=wrapper(function(that,iterable){strictNew(that,C,NAME);that._i=id++;that._l=undefined;if(iterable!=undefined)forOf(iterable,IS_MAP,that[ADDER],that)});require("./$.mix")(C.prototype,{"delete":function(key){if(!isObject(key))return false;if(!isExtensible(key))return frozenStore(this)["delete"](key);return $has(key,WEAK)&&$has(key[WEAK],this._i)&&delete key[WEAK][this._i]},has:function has(key){if(!isObject(key))return false;if(!isExtensible(key))return frozenStore(this).has(key);return $has(key,WEAK)&&$has(key[WEAK],this._i)}});return C},def:function(that,key,value){if(!isExtensible(anObject(key))){frozenStore(that).set(key,value)}else{$has(key,WEAK)||hide(key,WEAK,{});key[WEAK][that._i]=value}return that},frozenStore:frozenStore,WEAK:WEAK}},{"./$.an-object":227,"./$.array-methods":229,"./$.for-of":247,"./$.has":250,"./$.hide":251,"./$.is-object":257,"./$.mix":270,"./$.strict-new":284,"./$.uid":298}],236:[function(require,module,exports){"use strict";var global=require("./$.global"),$def=require("./$.def"),BUGGY=require("./$.iter-buggy"),forOf=require("./$.for-of"),strictNew=require("./$.strict-new");module.exports=function(NAME,wrapper,methods,common,IS_MAP,IS_WEAK){var Base=global[NAME],C=Base,ADDER=IS_MAP?"set":"add",proto=C&&C.prototype,O={};var fixMethod=function(KEY){var fn=proto[KEY];require("./$.redef")(proto,KEY,KEY=="delete"?function(a){return fn.call(this,a===0?0:a)}:KEY=="has"?function has(a){return fn.call(this,a===0?0:a)}:KEY=="get"?function get(a){return fn.call(this,a===0?0:a)}:KEY=="add"?function add(a){fn.call(this,a===0?0:a);return this}:function set(a,b){fn.call(this,a===0?0:a,b);return this})};if(typeof C!="function"||!(IS_WEAK||!BUGGY&&proto.forEach&&proto.entries)){C=common.getConstructor(wrapper,NAME,IS_MAP,ADDER);require("./$.mix")(C.prototype,methods)}else{var inst=new C,chain=inst[ADDER](IS_WEAK?{}:-0,1),buggyZero;if(!require("./$.iter-detect")(function(iter){new C(iter)})){C=wrapper(function(target,iterable){strictNew(target,C,NAME);var that=new Base;if(iterable!=undefined)forOf(iterable,IS_MAP,that[ADDER],that);return that});C.prototype=proto;proto.constructor=C}IS_WEAK||inst.forEach(function(val,key){buggyZero=1/key===-Infinity});if(buggyZero){fixMethod("delete");fixMethod("has");IS_MAP&&fixMethod("get")}if(buggyZero||chain!==inst)fixMethod(ADDER);if(IS_WEAK&&proto.clear)delete proto.clear}require("./$.tag")(C,NAME);O[NAME]=C;$def($def.G+$def.W+$def.F*(C!=Base),O);if(!IS_WEAK)common.setStrong(C,NAME,IS_MAP);return C}},{"./$.def":239,"./$.for-of":247,"./$.global":249,"./$.iter-buggy":258,"./$.iter-detect":262,"./$.mix":270,"./$.redef":277,"./$.strict-new":284,"./$.tag":291}],237:[function(require,module,exports){var core=module.exports={};if(typeof __e=="number")__e=core},{}],238:[function(require,module,exports){var aFunction=require("./$.a-function");module.exports=function(fn,that,length){aFunction(fn);if(that===undefined)return fn;switch(length){case 1:return function(a){return fn.call(that,a)};case 2:return function(a,b){return fn.call(that,a,b)};case 3:return function(a,b,c){return fn.call(that,a,b,c)}}return function(){return fn.apply(that,arguments)}}},{"./$.a-function":226}],239:[function(require,module,exports){var global=require("./$.global"),core=require("./$.core"),hide=require("./$.hide"),$redef=require("./$.redef"),PROTOTYPE="prototype";var ctx=function(fn,that){return function(){return fn.apply(that,arguments)}};var $def=function(type,name,source){var key,own,out,exp,isGlobal=type&$def.G,isProto=type&$def.P,target=isGlobal?global:type&$def.S?global[name]||(global[name]={}):(global[name]||{})[PROTOTYPE],exports=isGlobal?core:core[name]||(core[name]={});if(isGlobal)source=name;for(key in source){own=!(type&$def.F)&&target&&key in target;out=(own?target:source)[key];if(type&$def.B&&own)exp=ctx(out,global);else exp=isProto&&typeof out=="function"?ctx(Function.call,out):out;if(target&&!own)$redef(target,key,out);if(exports[key]!=out)hide(exports,key,exp);if(isProto)(exports[PROTOTYPE]||(exports[PROTOTYPE]={}))[key]=out}};global.core=core;$def.F=1;$def.G=2;$def.S=4;$def.P=8;$def.B=16;$def.W=32;module.exports=$def},{"./$.core":237,"./$.global":249,"./$.hide":251,"./$.redef":277}],240:[function(require,module,exports){module.exports=function(it){if(it==undefined)throw TypeError("Can't call method on "+it);return it}},{}],241:[function(require,module,exports){var isObject=require("./$.is-object"),document=require("./$.global").document,is=isObject(document)&&isObject(document.createElement);module.exports=function(it){return is?document.createElement(it):{}}},{"./$.global":249,"./$.is-object":257}],242:[function(require,module,exports){var $=require("./$");module.exports=function(it){var keys=$.getKeys(it),getSymbols=$.getSymbols;if(getSymbols){var symbols=getSymbols(it),isEnum=$.isEnum,i=0,key;while(symbols.length>i)if(isEnum.call(it,key=symbols[i++]))keys.push(key)}return keys}},{"./$":265}],243:[function(require,module,exports){module.exports=Math.expm1||function expm1(x){return(x=+x)==0?x:x>-1e-6&&x<1e-6?x+x*x/2:Math.exp(x)-1}},{}],244:[function(require,module,exports){module.exports=function(exec){try{return!!exec()}catch(e){return true}}},{}],245:[function(require,module,exports){"use strict";module.exports=function(KEY,length,exec){var defined=require("./$.defined"),SYMBOL=require("./$.wks")(KEY),original=""[KEY];if(require("./$.fails")(function(){var O={};O[SYMBOL]=function(){return 7};return""[KEY](O)!=7})){require("./$.redef")(String.prototype,KEY,exec(defined,SYMBOL,original));require("./$.hide")(RegExp.prototype,SYMBOL,length==2?function(string,arg){return original.call(string,this,arg)}:function(string){return original.call(string,this)})}}},{"./$.defined":240,"./$.fails":244,"./$.hide":251,"./$.redef":277,"./$.wks":300}],246:[function(require,module,exports){"use strict";var anObject=require("./$.an-object");module.exports=function(){var that=anObject(this),result="";if(that.global)result+="g";if(that.ignoreCase)result+="i";if(that.multiline)result+="m";if(that.unicode)result+="u";if(that.sticky)result+="y";return result}},{"./$.an-object":227}],247:[function(require,module,exports){var ctx=require("./$.ctx"),call=require("./$.iter-call"),isArrayIter=require("./$.is-array-iter"),anObject=require("./$.an-object"),toLength=require("./$.to-length"),getIterFn=require("./core.get-iterator-method");module.exports=function(iterable,entries,fn,that){var iterFn=getIterFn(iterable),f=ctx(fn,that,entries?2:1),index=0,length,step,iterator;if(typeof iterFn!="function")throw TypeError(iterable+" is not iterable!");if(isArrayIter(iterFn))for(length=toLength(iterable.length);length>index;index++){entries?f(anObject(step=iterable[index])[0],step[1]):f(iterable[index])}else for(iterator=iterFn.call(iterable);!(step=iterator.next()).done;){call(iterator,f,step.value,entries)}}},{"./$.an-object":227,"./$.ctx":238,"./$.is-array-iter":255,"./$.iter-call":259,"./$.to-length":296,"./core.get-iterator-method":301}],248:[function(require,module,exports){var toString={}.toString,toIObject=require("./$.to-iobject"),getNames=require("./$").getNames;var windowNames=typeof window=="object"&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];var getWindowNames=function(it){try{return getNames(it)}catch(e){return windowNames.slice()}};module.exports.get=function getOwnPropertyNames(it){if(windowNames&&toString.call(it)=="[object Window]")return getWindowNames(it);return getNames(toIObject(it))}},{"./$":265,"./$.to-iobject":295}],249:[function(require,module,exports){var global=typeof self!="undefined"&&self.Math==Math?self:Function("return this")();module.exports=global;if(typeof __g=="number")__g=global},{}],250:[function(require,module,exports){var hasOwnProperty={}.hasOwnProperty;module.exports=function(it,key){return hasOwnProperty.call(it,key)}},{}],251:[function(require,module,exports){var $=require("./$"),createDesc=require("./$.property-desc");module.exports=require("./$.support-desc")?function(object,key,value){return $.setDesc(object,key,createDesc(1,value))}:function(object,key,value){object[key]=value;return object}},{"./$":265,"./$.property-desc":276,"./$.support-desc":290}],252:[function(require,module,exports){module.exports=require("./$.global").document&&document.documentElement},{"./$.global":249}],253:[function(require,module,exports){module.exports=function(fn,args,that){var un=that===undefined;switch(args.length){case 0:return un?fn():fn.call(that);case 1:return un?fn(args[0]):fn.call(that,args[0]);case 2:return un?fn(args[0],args[1]):fn.call(that,args[0],args[1]);case 3:return un?fn(args[0],args[1],args[2]):fn.call(that,args[0],args[1],args[2]);case 4:return un?fn(args[0],args[1],args[2],args[3]):fn.call(that,args[0],args[1],args[2],args[3])}return fn.apply(that,args)}},{}],254:[function(require,module,exports){var cof=require("./$.cof");module.exports=0 in Object("z")?Object:function(it){return cof(it)=="String"?it.split(""):Object(it)}},{"./$.cof":232}],255:[function(require,module,exports){var Iterators=require("./$.iterators"),ITERATOR=require("./$.wks")("iterator");module.exports=function(it){return(Iterators.Array||Array.prototype[ITERATOR])===it}},{"./$.iterators":264,"./$.wks":300}],256:[function(require,module,exports){var isObject=require("./$.is-object"),floor=Math.floor;module.exports=function isInteger(it){return!isObject(it)&&isFinite(it)&&floor(it)===it}},{"./$.is-object":257}],257:[function(require,module,exports){module.exports=function(it){return it!==null&&(typeof it=="object"||typeof it=="function")}},{}],258:[function(require,module,exports){module.exports="keys"in[]&&!("next"in[].keys())},{}],259:[function(require,module,exports){var anObject=require("./$.an-object");module.exports=function(iterator,fn,value,entries){try{return entries?fn(anObject(value)[0],value[1]):fn(value)}catch(e){var ret=iterator["return"];if(ret!==undefined)anObject(ret.call(iterator));throw e}}},{"./$.an-object":227}],260:[function(require,module,exports){"use strict";var $=require("./$"),IteratorPrototype={};require("./$.hide")(IteratorPrototype,require("./$.wks")("iterator"),function(){return this});module.exports=function(Constructor,NAME,next){Constructor.prototype=$.create(IteratorPrototype,{next:require("./$.property-desc")(1,next)});require("./$.tag")(Constructor,NAME+" Iterator")}},{"./$":265,"./$.hide":251,"./$.property-desc":276,"./$.tag":291,"./$.wks":300}],261:[function(require,module,exports){"use strict";var LIBRARY=require("./$.library"),$def=require("./$.def"),$redef=require("./$.redef"),hide=require("./$.hide"),has=require("./$.has"),SYMBOL_ITERATOR=require("./$.wks")("iterator"),Iterators=require("./$.iterators"),FF_ITERATOR="@@iterator",KEYS="keys",VALUES="values";var returnThis=function(){return this};module.exports=function(Base,NAME,Constructor,next,DEFAULT,IS_SET,FORCE){require("./$.iter-create")(Constructor,NAME,next);var createMethod=function(kind){switch(kind){case KEYS:return function keys(){return new Constructor(this,kind)};case VALUES:return function values(){return new Constructor(this,kind)}}return function entries(){return new Constructor(this,kind)}};var TAG=NAME+" Iterator",proto=Base.prototype,_native=proto[SYMBOL_ITERATOR]||proto[FF_ITERATOR]||DEFAULT&&proto[DEFAULT],_default=_native||createMethod(DEFAULT),methods,key;if(_native){var IteratorPrototype=require("./$").getProto(_default.call(new Base));require("./$.tag")(IteratorPrototype,TAG,true);if(!LIBRARY&&has(proto,FF_ITERATOR))hide(IteratorPrototype,SYMBOL_ITERATOR,returnThis)}if(!LIBRARY||FORCE)hide(proto,SYMBOL_ITERATOR,_default);Iterators[NAME]=_default;Iterators[TAG]=returnThis;if(DEFAULT){methods={keys:IS_SET?_default:createMethod(KEYS),values:DEFAULT==VALUES?_default:createMethod(VALUES),entries:DEFAULT!=VALUES?_default:createMethod("entries")};if(FORCE)for(key in methods){if(!(key in proto))$redef(proto,key,methods[key])}else $def($def.P+$def.F*require("./$.iter-buggy"),NAME,methods)}}},{"./$":265,"./$.def":239,"./$.has":250,"./$.hide":251,"./$.iter-buggy":258,"./$.iter-create":260,"./$.iterators":264,"./$.library":267,"./$.redef":277,"./$.tag":291,"./$.wks":300}],262:[function(require,module,exports){var SYMBOL_ITERATOR=require("./$.wks")("iterator"),SAFE_CLOSING=false;try{var riter=[7][SYMBOL_ITERATOR]();riter["return"]=function(){SAFE_CLOSING=true};Array.from(riter,function(){throw 2})}catch(e){}module.exports=function(exec){if(!SAFE_CLOSING)return false;var safe=false;try{var arr=[7],iter=arr[SYMBOL_ITERATOR]();iter.next=function(){safe=true};arr[SYMBOL_ITERATOR]=function(){return iter};exec(arr)}catch(e){}return safe}},{"./$.wks":300}],263:[function(require,module,exports){module.exports=function(done,value){return{value:value,done:!!done}}},{}],264:[function(require,module,exports){module.exports={}},{}],265:[function(require,module,exports){var $Object=Object;module.exports={create:$Object.create,getProto:$Object.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:$Object.getOwnPropertyDescriptor,setDesc:$Object.defineProperty,setDescs:$Object.defineProperties,getKeys:$Object.keys,getNames:$Object.getOwnPropertyNames,getSymbols:$Object.getOwnPropertySymbols,each:[].forEach}},{}],266:[function(require,module,exports){var $=require("./$"),toIObject=require("./$.to-iobject");module.exports=function(object,el){var O=toIObject(object),keys=$.getKeys(O),length=keys.length,index=0,key;while(length>index)if(O[key=keys[index++]]===el)return key}},{"./$":265,"./$.to-iobject":295}],267:[function(require,module,exports){module.exports=false},{}],268:[function(require,module,exports){module.exports=Math.log1p||function log1p(x){return(x=+x)>-1e-8&&x<1e-8?x-x*x/2:Math.log(1+x)}},{}],269:[function(require,module,exports){var global=require("./$.global"),macrotask=require("./$.task").set,Observer=global.MutationObserver||global.WebKitMutationObserver,process=global.process,head,last,notify;function flush(){while(head){head.fn.call();head=head.next}last=undefined}if(require("./$.cof")(process)=="process"){notify=function(){process.nextTick(flush)}}else if(Observer){var toggle=1,node=document.createTextNode("");new Observer(flush).observe(node,{characterData:true});notify=function(){node.data=toggle=-toggle}}else{notify=function(){macrotask.call(global,flush)}}module.exports=function asap(fn){var task={fn:fn,next:undefined};if(last)last.next=task;if(!head){head=task;notify()}last=task}},{"./$.cof":232,"./$.global":249,"./$.task":292}],270:[function(require,module,exports){var $redef=require("./$.redef");module.exports=function(target,src){for(var key in src)$redef(target,key,src[key]);return target}},{"./$.redef":277}],271:[function(require,module,exports){module.exports=function(KEY,exec){var $def=require("./$.def"),fn=(require("./$.core").Object||{})[KEY]||Object[KEY],exp={};exp[KEY]=exec(fn);$def($def.S+$def.F*require("./$.fails")(function(){fn(1)}),"Object",exp)}},{"./$.core":237,"./$.def":239,"./$.fails":244}],272:[function(require,module,exports){var $=require("./$"),toIObject=require("./$.to-iobject");module.exports=function(isEntries){return function(it){var O=toIObject(it),keys=$.getKeys(O),length=keys.length,i=0,result=Array(length),key;if(isEntries)while(length>i)result[i]=[key=keys[i++],O[key]];else while(length>i)result[i]=O[keys[i++]];return result}}},{"./$":265,"./$.to-iobject":295}],273:[function(require,module,exports){var $=require("./$"),anObject=require("./$.an-object");module.exports=function ownKeys(it){var keys=$.getNames(anObject(it)),getSymbols=$.getSymbols;return getSymbols?keys.concat(getSymbols(it)):keys}},{"./$":265,"./$.an-object":227}],274:[function(require,module,exports){"use strict";var path=require("./$.path"),invoke=require("./$.invoke"),aFunction=require("./$.a-function");module.exports=function(){var fn=aFunction(this),length=arguments.length,pargs=Array(length),i=0,_=path._,holder=false;while(length>i)if((pargs[i]=arguments[i++])===_)holder=true;return function(){var that=this,_length=arguments.length,j=0,k=0,args;if(!holder&&!_length)return invoke(fn,pargs,that);args=pargs.slice();if(holder)for(;length>j;j++)if(args[j]===_)args[j]=arguments[k++];while(_length>k)args.push(arguments[k++]);return invoke(fn,args,that)}}},{"./$.a-function":226,"./$.invoke":253,"./$.path":275}],275:[function(require,module,exports){module.exports=require("./$.global")},{"./$.global":249}],276:[function(require,module,exports){module.exports=function(bitmap,value){return{enumerable:!(bitmap&1),configurable:!(bitmap&2),writable:!(bitmap&4),value:value}}},{}],277:[function(require,module,exports){var global=require("./$.global"),hide=require("./$.hide"),SRC=require("./$.uid")("src"),TO_STRING="toString",$toString=Function[TO_STRING],TPL=(""+$toString).split(TO_STRING);require("./$.core").inspectSource=function(it){return $toString.call(it)};(module.exports=function(O,key,val,safe){if(typeof val=="function"){hide(val,SRC,O[key]?""+O[key]:TPL.join(String(key)));if(!("name"in val))val.name=key}if(O===global){O[key]=val}else{if(!safe)delete O[key];hide(O,key,val)}})(Function.prototype,TO_STRING,function toString(){return typeof this=="function"&&this[SRC]||$toString.call(this)})},{"./$.core":237,"./$.global":249,"./$.hide":251,"./$.uid":298}],278:[function(require,module,exports){module.exports=function(regExp,replace){var replacer=replace===Object(replace)?function(part){return replace[part]}:replace;return function(it){return String(it).replace(regExp,replacer)}}},{}],279:[function(require,module,exports){module.exports=Object.is||function is(x,y){return x===y?x!==0||1/x===1/y:x!=x&&y!=y}},{}],280:[function(require,module,exports){var getDesc=require("./$").getDesc,isObject=require("./$.is-object"),anObject=require("./$.an-object");var check=function(O,proto){anObject(O);if(!isObject(proto)&&proto!==null)throw TypeError(proto+": can't set as prototype!")};module.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(buggy,set){try{set=require("./$.ctx")(Function.call,getDesc(Object.prototype,"__proto__").set,2);set({},[])}catch(e){buggy=true}return function setPrototypeOf(O,proto){check(O,proto);if(buggy)O.__proto__=proto;else set(O,proto);return O}}():undefined),check:check}},{"./$":265,"./$.an-object":227,"./$.ctx":238,"./$.is-object":257}],281:[function(require,module,exports){var global=require("./$.global"),SHARED="__core-js_shared__",store=global[SHARED]||(global[SHARED]={});module.exports=function(key){return store[key]||(store[key]={})}},{"./$.global":249}],282:[function(require,module,exports){module.exports=Math.sign||function sign(x){return(x=+x)==0||x!=x?x:x<0?-1:1}},{}],283:[function(require,module,exports){"use strict";var $=require("./$"),SPECIES=require("./$.wks")("species");module.exports=function(C){if(require("./$.support-desc")&&!(SPECIES in C))$.setDesc(C,SPECIES,{configurable:true,get:function(){return this}})}},{"./$":265,"./$.support-desc":290,"./$.wks":300}],284:[function(require,module,exports){module.exports=function(it,Constructor,name){if(!(it instanceof Constructor))throw TypeError(name+": use the 'new' operator!");return it}},{}],285:[function(require,module,exports){var toInteger=require("./$.to-integer"),defined=require("./$.defined");module.exports=function(TO_STRING){return function(that,pos){var s=String(defined(that)),i=toInteger(pos),l=s.length,a,b;if(i<0||i>=l)return TO_STRING?"":undefined;a=s.charCodeAt(i);return a<55296||a>56319||i+1===l||(b=s.charCodeAt(i+1))<56320||b>57343?TO_STRING?s.charAt(i):a:TO_STRING?s.slice(i,i+2):(a-55296<<10)+(b-56320)+65536}}},{"./$.defined":240,"./$.to-integer":294}],286:[function(require,module,exports){var defined=require("./$.defined"),cof=require("./$.cof");module.exports=function(that,searchString,NAME){if(cof(searchString)=="RegExp")throw TypeError("String#"+NAME+" doesn't accept regex!");return String(defined(that))}},{"./$.cof":232,"./$.defined":240}],287:[function(require,module,exports){var toLength=require("./$.to-length"),repeat=require("./$.string-repeat"),defined=require("./$.defined");module.exports=function(that,maxLength,fillString,left){var S=String(defined(that)),stringLength=S.length,fillStr=fillString===undefined?" ":String(fillString),intMaxLength=toLength(maxLength);if(intMaxLength<=stringLength)return S;if(fillStr=="")fillStr=" ";var fillLen=intMaxLength-stringLength,stringFiller=repeat.call(fillStr,Math.ceil(fillLen/fillStr.length));if(stringFiller.length>fillLen)stringFiller=left?stringFiller.slice(stringFiller.length-fillLen):stringFiller.slice(0,fillLen);return left?stringFiller+S:S+stringFiller}},{"./$.defined":240,"./$.string-repeat":288,"./$.to-length":296}],288:[function(require,module,exports){"use strict";var toInteger=require("./$.to-integer"),defined=require("./$.defined");module.exports=function repeat(count){var str=String(defined(this)),res="",n=toInteger(count);if(n<0||n==Infinity)throw RangeError("Count can't be negative");for(;n>0;(n>>>=1)&&(str+=str))if(n&1)res+=str;return res}},{"./$.defined":240,"./$.to-integer":294}],289:[function(require,module,exports){var trim=function(string,TYPE){string=String(defined(string));if(TYPE&1)string=string.replace(ltrim,"");if(TYPE&2)string=string.replace(rtrim,"");return string};var $def=require("./$.def"),defined=require("./$.defined"),spaces=" \n \f\r   ᠎    "+"          \u2028\u2029\ufeff",space="["+spaces+"]",non="​…",ltrim=RegExp("^"+space+space+"*"),rtrim=RegExp(space+space+"*$");module.exports=function(KEY,exec){var exp={};exp[KEY]=exec(trim);$def($def.P+$def.F*require("./$.fails")(function(){return!!spaces[KEY]()||non[KEY]()!=non}),"String",exp)}},{"./$.def":239,"./$.defined":240,"./$.fails":244}],290:[function(require,module,exports){module.exports=!require("./$.fails")(function(){return Object.defineProperty({},"a",{get:function(){return 7}}).a!=7})},{"./$.fails":244}],291:[function(require,module,exports){var has=require("./$.has"),hide=require("./$.hide"),TAG=require("./$.wks")("toStringTag");module.exports=function(it,tag,stat){if(it&&!has(it=stat?it:it.prototype,TAG))hide(it,TAG,tag)}},{"./$.has":250,"./$.hide":251,"./$.wks":300}],292:[function(require,module,exports){"use strict";var ctx=require("./$.ctx"),invoke=require("./$.invoke"),html=require("./$.html"),cel=require("./$.dom-create"),global=require("./$.global"),process=global.process,setTask=global.setImmediate,clearTask=global.clearImmediate,MessageChannel=global.MessageChannel,counter=0,queue={},ONREADYSTATECHANGE="onreadystatechange",defer,channel,port;var run=function(){var id=+this;if(queue.hasOwnProperty(id)){var fn=queue[id];delete queue[id];fn()}};var listner=function(event){run.call(event.data)};if(!setTask||!clearTask){setTask=function setImmediate(fn){var args=[],i=1;while(arguments.length>i)args.push(arguments[i++]);queue[++counter]=function(){invoke(typeof fn=="function"?fn:Function(fn),args)};defer(counter);return counter};clearTask=function clearImmediate(id){delete queue[id]};if(require("./$.cof")(process)=="process"){defer=function(id){process.nextTick(ctx(run,id,1))}}else if(MessageChannel){channel=new MessageChannel;port=channel.port2;channel.port1.onmessage=listner;defer=ctx(port.postMessage,port,1)}else if(global.addEventListener&&typeof postMessage=="function"&&!global.importScript){defer=function(id){global.postMessage(id+"","*")};global.addEventListener("message",listner,false)}else if(ONREADYSTATECHANGE in cel("script")){defer=function(id){html.appendChild(cel("script"))[ONREADYSTATECHANGE]=function(){html.removeChild(this);run.call(id)}}}else{defer=function(id){setTimeout(ctx(run,id,1),0)}}}module.exports={set:setTask,clear:clearTask}},{"./$.cof":232,"./$.ctx":238,"./$.dom-create":241,"./$.global":249,"./$.html":252,"./$.invoke":253}],293:[function(require,module,exports){var toInteger=require("./$.to-integer"),max=Math.max,min=Math.min;module.exports=function(index,length){index=toInteger(index);return index<0?max(index+length,0):min(index,length)}},{"./$.to-integer":294}],294:[function(require,module,exports){var ceil=Math.ceil,floor=Math.floor;module.exports=function(it){return isNaN(it=+it)?0:(it>0?floor:ceil)(it)}},{}],295:[function(require,module,exports){var IObject=require("./$.iobject"),defined=require("./$.defined");module.exports=function(it){return IObject(defined(it))}},{"./$.defined":240,"./$.iobject":254}],296:[function(require,module,exports){var toInteger=require("./$.to-integer"),min=Math.min;module.exports=function(it){return it>0?min(toInteger(it),9007199254740991):0}},{"./$.to-integer":294}],297:[function(require,module,exports){var defined=require("./$.defined");module.exports=function(it){return Object(defined(it))}},{"./$.defined":240}],298:[function(require,module,exports){var id=0,px=Math.random();module.exports=function(key){return"Symbol(".concat(key===undefined?"":key,")_",(++id+px).toString(36))}},{}],299:[function(require,module,exports){var UNSCOPABLES=require("./$.wks")("unscopables");if(!(UNSCOPABLES in[]))require("./$.hide")(Array.prototype,UNSCOPABLES,{});module.exports=function(key){[][UNSCOPABLES][key]=true}},{"./$.hide":251,"./$.wks":300}],300:[function(require,module,exports){var store=require("./$.shared")("wks"),Symbol=require("./$.global").Symbol;module.exports=function(name){return store[name]||(store[name]=Symbol&&Symbol[name]||(Symbol||require("./$.uid"))("Symbol."+name))}},{"./$.global":249,"./$.shared":281,"./$.uid":298}],301:[function(require,module,exports){var classof=require("./$.classof"),ITERATOR=require("./$.wks")("iterator"),Iterators=require("./$.iterators");module.exports=require("./$.core").getIteratorMethod=function(it){if(it!=undefined)return it[ITERATOR]||it["@@iterator"]||Iterators[classof(it)]}},{"./$.classof":231,"./$.core":237,"./$.iterators":264,"./$.wks":300}],302:[function(require,module,exports){"use strict";var $=require("./$"),SUPPORT_DESC=require("./$.support-desc"),createDesc=require("./$.property-desc"),html=require("./$.html"),cel=require("./$.dom-create"),has=require("./$.has"),cof=require("./$.cof"),$def=require("./$.def"),invoke=require("./$.invoke"),arrayMethod=require("./$.array-methods"),IE_PROTO=require("./$.uid")("__proto__"),isObject=require("./$.is-object"),anObject=require("./$.an-object"),aFunction=require("./$.a-function"),toObject=require("./$.to-object"),toIObject=require("./$.to-iobject"),toInteger=require("./$.to-integer"),toIndex=require("./$.to-index"),toLength=require("./$.to-length"),IObject=require("./$.iobject"),fails=require("./$.fails"),ObjectProto=Object.prototype,A=[],_slice=A.slice,_join=A.join,defineProperty=$.setDesc,getOwnDescriptor=$.getDesc,defineProperties=$.setDescs,$indexOf=require("./$.array-includes")(false),factories={},IE8_DOM_DEFINE;if(!SUPPORT_DESC){IE8_DOM_DEFINE=!fails(function(){return defineProperty(cel("div"),"a",{get:function(){return 7}}).a!=7});$.setDesc=function(O,P,Attributes){if(IE8_DOM_DEFINE)try{return defineProperty(O,P,Attributes)}catch(e){}if("get"in Attributes||"set"in Attributes)throw TypeError("Accessors not supported!");if("value"in Attributes)anObject(O)[P]=Attributes.value;return O};$.getDesc=function(O,P){if(IE8_DOM_DEFINE)try{return getOwnDescriptor(O,P)}catch(e){}if(has(O,P))return createDesc(!ObjectProto.propertyIsEnumerable.call(O,P),O[P])};$.setDescs=defineProperties=function(O,Properties){anObject(O);var keys=$.getKeys(Properties),length=keys.length,i=0,P;while(length>i)$.setDesc(O,P=keys[i++],Properties[P]);return O}}$def($def.S+$def.F*!SUPPORT_DESC,"Object",{getOwnPropertyDescriptor:$.getDesc,defineProperty:$.setDesc,defineProperties:defineProperties});var keys1=("constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,"+"toLocaleString,toString,valueOf").split(","),keys2=keys1.concat("length","prototype"),keysLen1=keys1.length;var createDict=function(){var iframe=cel("iframe"),i=keysLen1,gt=">",iframeDocument;iframe.style.display="none";html.appendChild(iframe);iframe.src="javascript:";iframeDocument=iframe.contentWindow.document;iframeDocument.open();iframeDocument.write(" + + + \ No newline at end of file diff --git a/public/plugin_assets/redmine_code_review/stylesheets/window_js/darkX.css b/public/plugin_assets/redmine_code_review/stylesheets/window_js/darkX.css index e3df3e0a4..2f83cfd46 100644 --- a/public/plugin_assets/redmine_code_review/stylesheets/window_js/darkX.css +++ b/public/plugin_assets/redmine_code_review/stylesheets/window_js/darkX.css @@ -1,121 +1,121 @@ -.overlay_darkX { - background-color: #85BBEF; - filter:alpha(opacity=60); - -moz-opacity: 0.6; - opacity: 0.6; -} - -.darkX_nw { - background: transparent url(darkX/titlebar-left-focused.png) no-repeat 0 0; - width:6px; - height:21px; -} -.darkX_n { - background: transparent url(darkX/titlebar-mid-focused.png) repeat-x 0 0; - height:21px; -} -.darkX_ne { - background: transparent url(darkX/titlebar-right-focused.png) no-repeat 0 0; - width:6px; - height:21px; -} -.darkX_w { - background: transparent url(darkX/frame-left-focused.png) repeat-y top left; - width:3px; -} - -.darkX_e { - background: transparent url(darkX/frame-right-focused.png) repeat-y top right; - width:3px; -} - -.darkX_sw { - background: transparent url(darkX/frame-bottom-left-focused.png) no-repeat 0 0; - width:5px; - height:3px; -} -.darkX_s { - background: transparent url(darkX/frame-bottom-mid-focused.png) repeat-x 0 0; - height:3px; -} -.darkX_se, .darkX_sizer { - background: transparent url(darkX/frame-bottom-right-focused.png) no-repeat 0 0; - width:5px; - height:3px; -} - -.darkX_sizer { - cursor:se-resize; -} - -.darkX_close { - width: 21px; - height: 21px; - background: transparent url(darkX/button-close-focused.png) no-repeat 0 0; - position:absolute; - top:0px; - right:5px; - cursor:pointer; - z-index:1000; -} - -.darkX_minimize { - width: 21px; - height: 21px; - background: transparent url(darkX/button-minimize-focused.png) no-repeat 0 0; - position:absolute; - top:0px; - right:26px; - cursor:pointer; - z-index:1000; -} - -.darkX_maximize { - width: 21px; - height: 21px; - background: transparent url(darkX/button-maximize-focused.png) no-repeat 0 0; - position:absolute; - top:0px; - right:47px; - cursor:pointer; - z-index:1000; -} - - -.darkX_title { - float:left; - height:14px; - font-size:12px; - text-align:center; - margin-top:2px; - width:100%; - color:#FFF; -} - -.darkX_content { - overflow:auto; - color: #E6DF2A; - font-family: Tahoma, Arial, sans-serif; - font-size: 14px; - background:#5E5148; -} - - -/* FOR IE */ -* html .darkX_minimize { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-minimize-focused.png", sizingMethod="crop"); -} - -* html .darkX_maximize { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-maximize-focused.png", sizingMethod="scale"); -} - -* html .darkX_close { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-close-focused.png", sizingMethod="crop"); -} +.overlay_darkX { + background-color: #85BBEF; + filter:alpha(opacity=60); + -moz-opacity: 0.6; + opacity: 0.6; +} + +.darkX_nw { + background: transparent url(darkX/titlebar-left-focused.png) no-repeat 0 0; + width:6px; + height:21px; +} +.darkX_n { + background: transparent url(darkX/titlebar-mid-focused.png) repeat-x 0 0; + height:21px; +} +.darkX_ne { + background: transparent url(darkX/titlebar-right-focused.png) no-repeat 0 0; + width:6px; + height:21px; +} +.darkX_w { + background: transparent url(darkX/frame-left-focused.png) repeat-y top left; + width:3px; +} + +.darkX_e { + background: transparent url(darkX/frame-right-focused.png) repeat-y top right; + width:3px; +} + +.darkX_sw { + background: transparent url(darkX/frame-bottom-left-focused.png) no-repeat 0 0; + width:5px; + height:3px; +} +.darkX_s { + background: transparent url(darkX/frame-bottom-mid-focused.png) repeat-x 0 0; + height:3px; +} +.darkX_se, .darkX_sizer { + background: transparent url(darkX/frame-bottom-right-focused.png) no-repeat 0 0; + width:5px; + height:3px; +} + +.darkX_sizer { + cursor:se-resize; +} + +.darkX_close { + width: 21px; + height: 21px; + background: transparent url(darkX/button-close-focused.png) no-repeat 0 0; + position:absolute; + top:0px; + right:5px; + cursor:pointer; + z-index:1000; +} + +.darkX_minimize { + width: 21px; + height: 21px; + background: transparent url(darkX/button-minimize-focused.png) no-repeat 0 0; + position:absolute; + top:0px; + right:26px; + cursor:pointer; + z-index:1000; +} + +.darkX_maximize { + width: 21px; + height: 21px; + background: transparent url(darkX/button-maximize-focused.png) no-repeat 0 0; + position:absolute; + top:0px; + right:47px; + cursor:pointer; + z-index:1000; +} + + +.darkX_title { + float:left; + height:14px; + font-size:12px; + text-align:center; + margin-top:2px; + width:100%; + color:#FFF; +} + +.darkX_content { + overflow:auto; + color: #E6DF2A; + font-family: Tahoma, Arial, sans-serif; + font-size: 14px; + background:#5E5148; +} + + +/* FOR IE */ +* html .darkX_minimize { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-minimize-focused.png", sizingMethod="crop"); +} + +* html .darkX_maximize { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-maximize-focused.png", sizingMethod="scale"); +} + +* html .darkX_close { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/darkX/button-close-focused.png", sizingMethod="crop"); +} diff --git a/public/plugin_assets/redmine_code_review/stylesheets/window_js/debug.css b/public/plugin_assets/redmine_code_review/stylesheets/window_js/debug.css index d7981e9ca..69e3b7fc2 100644 --- a/public/plugin_assets/redmine_code_review/stylesheets/window_js/debug.css +++ b/public/plugin_assets/redmine_code_review/stylesheets/window_js/debug.css @@ -1,25 +1,25 @@ -div.inspector div.inspectable { - padding: 0.25em 0 0.25em 1em; - background-color: Gray; - color: white; - border: outset 2px white; - cursor: pointer; -} - -div.inspector div.child { - margin: 0 0 0 1em; -} - -#debug_window_content { /* DIV container for debug sizing*/ - width:250px; - height:100px; - background-color:#000; -} - -#debug { /* DIV container for debug contents*/ - padding:3px; - color:#0f0; - font-family:monaco, Tahoma, Verdana, Arial, Helvetica, sans-serif; - font-size:10px; -} - +div.inspector div.inspectable { + padding: 0.25em 0 0.25em 1em; + background-color: Gray; + color: white; + border: outset 2px white; + cursor: pointer; +} + +div.inspector div.child { + margin: 0 0 0 1em; +} + +#debug_window_content { /* DIV container for debug sizing*/ + width:250px; + height:100px; + background-color:#000; +} + +#debug { /* DIV container for debug contents*/ + padding:3px; + color:#0f0; + font-family:monaco, Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size:10px; +} + diff --git a/public/plugin_assets/redmine_code_review/stylesheets/window_js/default.css b/public/plugin_assets/redmine_code_review/stylesheets/window_js/default.css index 591451723..6ab13789d 100644 --- a/public/plugin_assets/redmine_code_review/stylesheets/window_js/default.css +++ b/public/plugin_assets/redmine_code_review/stylesheets/window_js/default.css @@ -1,155 +1,155 @@ -.overlay_dialog { - background-color: #666666; - filter:alpha(opacity=60); - -moz-opacity: 0.6; - opacity: 0.6; -} - -.overlay___invisible__ { - background-color: #666666; - filter:alpha(opacity=0); - -moz-opacity: 0; - opacity: 0; -} - -.dialog_nw { - width: 9px; - height: 23px; - background: transparent url(default/top_left.gif) no-repeat 0 0; -} - -.dialog_n { - background: transparent url(default/top_mid.gif) repeat-x 0 0; - height: 23px; -} - -.dialog_ne { - width: 9px; - height: 23px; - background: transparent url(default/top_right.gif) no-repeat 0 0; -} - -.dialog_e { - width: 2px; - background: transparent url(default/center_right.gif) repeat-y 0 0; -} - -.dialog_w { - width: 2px; - background: transparent url(default/center_left.gif) repeat-y 0 0; -} - -.dialog_sw { - width: 9px; - height: 19px; - background: transparent url(default/bottom_left.gif) no-repeat 0 0; -} - -.dialog_s { - background: transparent url(default/bottom_mid.gif) repeat-x 0 0; - height: 19px; -} - -.dialog_se { - width: 9px; - height: 19px; - background: transparent url(default/bottom_right.gif) no-repeat 0 0; -} - -.dialog_sizer { - width: 9px; - height: 19px; - background: transparent url(default/sizer.gif) no-repeat 0 0; - cursor:se-resize; -} - -.dialog_close { - width: 14px; - height: 14px; - background: transparent url(default/close.gif) no-repeat 0 0; - position:absolute; - top:5px; - left:8px; - cursor:pointer; - z-index:2000; -} - -.dialog_minimize { - width: 14px; - height: 15px; - background: transparent url(default/minimize.gif) no-repeat 0 0; - position:absolute; - top:5px; - left:28px; - cursor:pointer; - z-index:2000; -} - -.dialog_maximize { - width: 14px; - height: 15px; - background: transparent url(default/maximize.gif) no-repeat 0 0; - position:absolute; - top:5px; - left:49px; - cursor:pointer; - z-index:2000; -} - -.dialog_title { - float:left; - height:14px; - font-family: Tahoma, Arial, sans-serif; - font-size:12px; - text-align:center; - width:100%; - color:#000; -} - -.dialog_content { - overflow:auto; - color: #DDD; - font-family: Tahoma, Arial, sans-serif; - font-size: 10px; - background-color:#123; -} - -.top_draggable, .bottom_draggable { - cursor:move; -} - -.status_bar { - font-size:12px; -} -.status_bar input{ - font-size:12px; -} - -.wired_frame { - display: block; - position: absolute; - border: 1px #000 dashed; -} - -/* DO NOT CHANGE THESE VALUES*/ -.dialog { - display: block; - position: absolute; -} - -.dialog table.table_window { - border-collapse: collapse; - border-spacing: 0; - width: 100%; - margin: 0px; - padding:0px; -} - -.dialog table.table_window td , .dialog table.table_window th { - padding: 0; -} - -.dialog .title_window { - -moz-user-select:none; -} - +.overlay_dialog { + background-color: #666666; + filter:alpha(opacity=60); + -moz-opacity: 0.6; + opacity: 0.6; +} + +.overlay___invisible__ { + background-color: #666666; + filter:alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; +} + +.dialog_nw { + width: 9px; + height: 23px; + background: transparent url(default/top_left.gif) no-repeat 0 0; +} + +.dialog_n { + background: transparent url(default/top_mid.gif) repeat-x 0 0; + height: 23px; +} + +.dialog_ne { + width: 9px; + height: 23px; + background: transparent url(default/top_right.gif) no-repeat 0 0; +} + +.dialog_e { + width: 2px; + background: transparent url(default/center_right.gif) repeat-y 0 0; +} + +.dialog_w { + width: 2px; + background: transparent url(default/center_left.gif) repeat-y 0 0; +} + +.dialog_sw { + width: 9px; + height: 19px; + background: transparent url(default/bottom_left.gif) no-repeat 0 0; +} + +.dialog_s { + background: transparent url(default/bottom_mid.gif) repeat-x 0 0; + height: 19px; +} + +.dialog_se { + width: 9px; + height: 19px; + background: transparent url(default/bottom_right.gif) no-repeat 0 0; +} + +.dialog_sizer { + width: 9px; + height: 19px; + background: transparent url(default/sizer.gif) no-repeat 0 0; + cursor:se-resize; +} + +.dialog_close { + width: 14px; + height: 14px; + background: transparent url(default/close.gif) no-repeat 0 0; + position:absolute; + top:5px; + left:8px; + cursor:pointer; + z-index:2000; +} + +.dialog_minimize { + width: 14px; + height: 15px; + background: transparent url(default/minimize.gif) no-repeat 0 0; + position:absolute; + top:5px; + left:28px; + cursor:pointer; + z-index:2000; +} + +.dialog_maximize { + width: 14px; + height: 15px; + background: transparent url(default/maximize.gif) no-repeat 0 0; + position:absolute; + top:5px; + left:49px; + cursor:pointer; + z-index:2000; +} + +.dialog_title { + float:left; + height:14px; + font-family: Tahoma, Arial, sans-serif; + font-size:12px; + text-align:center; + width:100%; + color:#000; +} + +.dialog_content { + overflow:auto; + color: #DDD; + font-family: Tahoma, Arial, sans-serif; + font-size: 10px; + background-color:#123; +} + +.top_draggable, .bottom_draggable { + cursor:move; +} + +.status_bar { + font-size:12px; +} +.status_bar input{ + font-size:12px; +} + +.wired_frame { + display: block; + position: absolute; + border: 1px #000 dashed; +} + +/* DO NOT CHANGE THESE VALUES*/ +.dialog { + display: block; + position: absolute; +} + +.dialog table.table_window { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + margin: 0px; + padding:0px; +} + +.dialog table.table_window td , .dialog table.table_window th { + padding: 0; +} + +.dialog .title_window { + -moz-user-select:none; +} + diff --git a/public/plugin_assets/redmine_code_review/stylesheets/window_js/iefix/iepngfix.css b/public/plugin_assets/redmine_code_review/stylesheets/window_js/iefix/iepngfix.css index 249388be5..257a1b1e3 100644 --- a/public/plugin_assets/redmine_code_review/stylesheets/window_js/iefix/iepngfix.css +++ b/public/plugin_assets/redmine_code_review/stylesheets/window_js/iefix/iepngfix.css @@ -1,3 +1,3 @@ -/* PNG fix for all themes that uses PNG images on IE */ -td, div { behavior: url(../themes/iefix/iepngfix.htc) } - +/* PNG fix for all themes that uses PNG images on IE */ +td, div { behavior: url(../themes/iefix/iepngfix.htc) } + diff --git a/public/plugin_assets/redmine_code_review/stylesheets/window_js/iefix/iepngfix.htc b/public/plugin_assets/redmine_code_review/stylesheets/window_js/iefix/iepngfix.htc index 9a13f32bf..a6c683b9f 100644 --- a/public/plugin_assets/redmine_code_review/stylesheets/window_js/iefix/iepngfix.htc +++ b/public/plugin_assets/redmine_code_review/stylesheets/window_js/iefix/iepngfix.htc @@ -1,54 +1,54 @@ - - - - + + + + \ No newline at end of file diff --git a/public/plugin_assets/redmine_code_review/stylesheets/window_js/lighting.css b/public/plugin_assets/redmine_code_review/stylesheets/window_js/lighting.css index 0d955c3d7..95ec287a9 100644 --- a/public/plugin_assets/redmine_code_review/stylesheets/window_js/lighting.css +++ b/public/plugin_assets/redmine_code_review/stylesheets/window_js/lighting.css @@ -1,960 +1,960 @@ -.overlay___invisible__ { - background-color: #666; - filter:alpha(opacity=0); - -moz-opacity: 0; - opacity: 0; -} - -.top_draggable, .bottom_draggable { - cursor:move; -} - -.status_bar { - font-size:12px; -} -.status_bar input{ - font-size:12px; -} - -.wired_frame { - display:block; - position:absolute; - border:1px #000 dashed; -} - - - -.overlay_bluelighting { - background-color:#FFF; - filter:alpha(opacity=60); - -moz-opacity:0.6; - opacity:0.6; -} - -.bluelighting_wired_frame { - background:#FFF; - filter:alpha(opacity=60); - -moz-opacity:0.6; - opacity:0.6; -} - -.bluelighting_nw { - background:transparent url(lighting/top-left-blue.png) no-repeat 0 0; - width:9px; - height:28px; -} - -.bluelighting_n { - background:transparent url(lighting/top-middle-blue.png) repeat-x 0 0; - height:28px; -} - -.bluelighting_ne { - background:transparent url(lighting/top-right-blue.png) no-repeat 0 0; - width:15px; - height:28px; -} - -.bluelighting_w { - background:transparent url(lighting/left-blue.png) repeat-y top left; - width:9px; -} - -.bluelighting_e { - background:transparent url(lighting/right-blue.png) repeat-y top right; - width:15px; -} - -.bluelighting_sw { - background:transparent url(lighting/bottom-left-blue.png) no-repeat 0 0; - width:9px; - height:15px; -} - -.bluelighting_s { - background:transparent url(lighting/bottom-middle-blue.png) repeat-x 0 0; - height:15px; -} - -.bluelighting_se, .bluelighting_sizer { - background:transparent url(lighting/bottom-right-blue.png) no-repeat 0 0; - width:15px; - height:15px; -} - -.bluelighting_sizer { - cursor:se-resize; -} - -.bluelighting_close { - width:15px; - height:9px; - background:transparent url(lighting/button-close-blue.png) no-repeat 0 0; - position:absolute; - top:11px; - right:10px; - cursor:pointer; - z-index:1000; -} - -.bluelighting_maximize { - width:15px; - height:9px; - background:transparent url(lighting/button-maximize-blue.png) no-repeat 0 0; - position:absolute; - top:11px; - right:25px; - cursor:pointer; - z-index:1000; -} - -.bluelighting_minimize { - width:15px; - height:9px; - background:transparent url(lighting/button-minimize-blue.png) no-repeat 0 0; - position:absolute; - top:11px; - right:40px; - cursor:pointer; - z-index:1000; -} - -.bluelighting_title { - float:left; - height:14px; - font-size:14px; - font-weight:bold; - font-family:Verdana, Arial, sans-serif; - text-align:center; - margin-top:2px; - width:100%; - color:#17385B; -} - -.bluelighting_content { - overflow:auto; - color:#000; - font-family:Verdana, Arial, sans-serif; - font-size:12px; - background:#BFDBFF; -} - -/* For alert/confirm dialog */ -.bluelighting_window { - border:1px solid #F00; - background:#FFF; - padding:20px; - margin-left:auto; - margin-right:auto; - width:400px; -} - -.bluelighting_message { - font-size:12px; - text-align:center; - width:100%; - padding-bottom:10px; -} - -.bluelighting_buttons { - text-align:center; - width:100%; -} - -.bluelighting_buttons input { - border:1px solid #999; - border-top-color:#CCC; - border-left-color:#CCC; - padding:2px; - background-color:#FFF; - color:#333; - background-image:url(lighting/background_buttons.gif); - background-repeat:repeat-x; - font-family:Verdana, Arial, sans-serif; - font-size:10px; - font-weight:bold; - text-align:center; -} - -.bluelighting_progress { - float:left; - margin:auto; - text-align:center; - width:100%; - height:16px; - background:transparent url('lighting/spinner.gif') no-repeat center center -} - -/* FOR IE */ -* html .bluelighting_nw { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-left-blue.png", sizingMethod="crop"); -} - -* html .bluelighting_n { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-middle-blue.png", sizingMethod="scale"); -} - -* html .bluelighting_ne { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-right-blue.png", sizingMethod="crop"); -} - -* html .bluelighting_w { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/left-blue.png", sizingMethod="scale"); -} - -* html .bluelighting_e { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/right-blue.png", sizingMethod="scale"); -} - -* html .bluelighting_sw { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-left-blue.png", sizingMethod="crop"); -} - -* html .bluelighting_s { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-middle-blue.png", sizingMethod="scale"); -} - -* html .bluelighting_se, * html .bluelighting_sizer { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-right-blue.png", sizingMethod="crop"); -} - -* html .bluelighting_close { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-close-blue.png", sizingMethod="crop"); -} - -* html .bluelighting_minimize { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-minimize-blue.png", sizingMethod="crop"); -} - -* html .bluelighting_maximize { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-maximize-blue.png", sizingMethod="crop"); -} - -* html .bluelighting_content { - background:#B8D7FF; -} - - - -.overlay_greylighting { - background-color:#FFF; - filter:alpha(opacity=60); - -moz-opacity:0.6; - opacity:0.6; -} - -.greylighting_wired_frame { - background:#FFF; - filter:alpha(opacity=60); - -moz-opacity:0.6; - opacity:0.6; -} - -.greylighting_nw { - background:transparent url(lighting/top-left-grey.png) no-repeat 0 0; - width:9px; - height:28px; -} - -.greylighting_n { - background:transparent url(lighting/top-middle-grey.png) repeat-x 0 0; - height:28px; -} - -.greylighting_ne { - background:transparent url(lighting/top-right-grey.png) no-repeat 0 0; - width:15px; - height:28px; -} - -.greylighting_w { - background:transparent url(lighting/left-grey.png) repeat-y top left; - width:9px; -} - -.greylighting_e { - background:transparent url(lighting/right-grey.png) repeat-y top right; - width:15px; -} - -.greylighting_sw { - background:transparent url(lighting/bottom-left-grey.png) no-repeat 0 0; - width:9px; - height:15px; -} - -.greylighting_s { - background:transparent url(lighting/bottom-middle-grey.png) repeat-x 0 0; - height:15px; -} - -.greylighting_se, .greylighting_sizer { - background:transparent url(lighting/bottom-right-grey.png) no-repeat 0 0; - width:15px; - height:15px; -} - -.greylighting_sizer { - cursor:se-resize; -} - -.greylighting_close { - width:15px; - height:9px; - background:transparent url(lighting/button-close-grey.png) no-repeat 0 0; - position:absolute; - top:11px; - right:10px; - cursor:pointer; - z-index:1000; -} - -.greylighting_maximize { - width:15px; - height:9px; - background:transparent url(lighting/button-maximize-grey.png) no-repeat 0 0; - position:absolute; - top:11px; - right:25px; - cursor:pointer; - z-index:1000; -} - -.greylighting_minimize { - width:15px; - height:9px; - background:transparent url(lighting/button-minimize-grey.png) no-repeat 0 0; - position:absolute; - top:11px; - right:40px; - cursor:pointer; - z-index:1000; -} - -.greylighting_title { - float:left; - height:14px; - font-size:14px; - font-weight:bold; - font-family:Verdana, Arial, sans-serif; - text-align:center; - margin-top:2px; - width:100%; - color:#525252; -} - -.greylighting_content { - overflow:auto; - color:#000; - font-family:Verdana, Arial, sans-serif; - font-size:12px; - background:#CDCDCD; -} - -/* For alert/confirm dialog */ -.greylighting_window { - border:1px solid #F00; - background:#FFF; - padding:20px; - margin-left:auto; - margin-right:auto; - width:400px; -} - -.greylighting_message { - font-size:12px; - text-align:center; - width:100%; - padding-bottom:10px; -} - -.greylighting_buttons { - text-align:center; - width:100%; -} - -.greylighting_buttons input { - border:1px solid #999; - border-top-color:#CCC; - border-left-color:#CCC; - padding:2px; - background-color:#FFF; - color:#333; - background-image:url(lighting/background_buttons.gif); - background-repeat:repeat-x; - font-family:Verdana, Arial, sans-serif; - font-size:10px; - font-weight:bold; - text-align:center; -} - -.greylighting_progress { - float:left; - margin:auto; - text-align:center; - width:100%; - height:16px; - background:transparent url('lighting/spinner.gif') no-repeat center center -} - -/* FOR IE */ -* html .greylighting_nw { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-left-grey.png", sizingMethod="crop"); -} - -* html .greylighting_n { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-middle-grey.png", sizingMethod="scale"); -} - -* html .greylighting_ne { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-right-grey.png", sizingMethod="crop"); -} - -* html .greylighting_w { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/left-grey.png", sizingMethod="scale"); -} - -* html .greylighting_e { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/right-grey.png", sizingMethod="scale"); -} - -* html .greylighting_sw { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-left-grey.png", sizingMethod="crop"); -} - -* html .greylighting_s { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-middle-grey.png", sizingMethod="scale"); -} - -* html greylighting_se, * html .greylighting_sizer { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-right-grey.png", sizingMethod="crop"); -} - -* html .greylighting_close { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-close-grey.png", sizingMethod="crop"); -} - -* html .greylighting_minimize { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-minimize-grey.png", sizingMethod="crop"); -} - -* html .greylighting_maximize { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-maximize-grey.png", sizingMethod="crop"); -} - -* html .greylighting_content { - background:#C7C7C7; -} - - - -.overlay_greenlighting { - background-color:#FFF; - filter:alpha(opacity=60); - -moz-opacity:0.6; - opacity:0.6; -} - -.greenlighting_wired_frame { - background:#FFF; - filter:alpha(opacity=60); - -moz-opacity:0.6; - opacity:0.6; -} - -.greenlighting_nw { - background:transparent url(lighting/top-left-green.png) no-repeat 0 0; - width:9px; - height:28px; -} - -.greenlighting_n { - background:transparent url(lighting/top-middle-green.png) repeat-x 0 0; - height:28px; -} - -.greenlighting_ne { - background:transparent url(lighting/top-right-green.png) no-repeat 0 0; - width:15px; - height:28px; -} - -.greenlighting_w { - background:transparent url(lighting/left-green.png) repeat-y top left; - width:9px; -} - -.greenlighting_e { - background:transparent url(lighting/right-green.png) repeat-y top right; - width:15px; -} - -.greenlighting_sw { - background:transparent url(lighting/bottom-left-green.png) no-repeat 0 0; - width:9px; - height:15px; -} - -.greenlighting_s { - background:transparent url(lighting/bottom-middle-green.png) repeat-x 0 0; - height:15px; -} - -.greenlighting_se, .greenlighting_sizer { - background:transparent url(lighting/bottom-right-green.png) no-repeat 0 0; - width:15px; - height:15px; -} - -.greenlighting_sizer { - cursor:se-resize; -} - -.greenlighting_close { - width:15px; - height:9px; - background:transparent url(lighting/button-close-green.png) no-repeat 0 0; - position:absolute; - top:11px; - right:10px; - cursor:pointer; - z-index:1000; -} - -.greenlighting_maximize { - width:15px; - height:9px; - background:transparent url(lighting/button-maximize-green.png) no-repeat 0 0; - position:absolute; - top:11px; - right:25px; - cursor:pointer; - z-index:1000; -} - -.greenlighting_minimize { - width:15px; - height:9px; - background:transparent url(lighting/button-minimize-green.png) no-repeat 0 0; - position:absolute; - top:11px; - right:40px; - cursor:pointer; - z-index:1000; -} - -.greenlighting_title { - float:left; - height:14px; - font-size:14px; - font-weight:bold; - font-family:Verdana, Arial, sans-serif; - text-align:center; - margin-top:2px; - width:100%; - color:#2A6002; -} - -.greenlighting_content { - overflow:auto; - color:#000; - font-family:Verdana, Arial, sans-serif; - font-size:12px; - background:#ACFCAF; -} - -/* For alert/confirm dialog */ -.greenlighting_window { - border:1px solid #F00; - background:#FFF; - padding:20px; - margin-left:auto; - margin-right:auto; - width:400px; -} - -.greenlighting_message { - font-size:12px; - text-align:center; - width:100%; - padding-bottom:10px; -} - -.greenlighting_buttons { - text-align:center; - width:100%; -} - -.greenlighting_buttons input { - border:1px solid #999; - border-top-color:#CCC; - border-left-color:#CCC; - padding:2px; - background-color:#FFF; - color:#333; - background-image:url(lighting/background_buttons.gif); - background-repeat:repeat-x; - font-family:Verdana, Arial, sans-serif; - font-size:10px; - font-weight:bold; - text-align:center; -} - -.greenlighting_progress { - float:left; - margin:auto; - text-align:center; - width:100%; - height:16px; - background:transparent url('lighting/spinner.gif') no-repeat center center -} - -/* FOR IE */ -* html .greenlighting_nw { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-left-green.png", sizingMethod="crop"); -} - -* html .greenlighting_n { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-middle-green.png", sizingMethod="scale"); -} - -* html .greenlighting_ne { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-right-green.png", sizingMethod="crop"); -} - -* html .greenlighting_w { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/left-green.png", sizingMethod="scale"); -} - -* html .greenlighting_e { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/right-green.png", sizingMethod="scale"); -} - -* html .greenlighting_sw { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-left-green.png", sizingMethod="crop"); -} - -* html .greenlighting_s { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-middle-green.png", sizingMethod="scale"); -} - -* html greenlighting_se, * html .greenlighting_sizer { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-right-green.png", sizingMethod="crop"); -} - -* html .greenlighting_close { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-close-green.png", sizingMethod="crop"); -} - -* html .greenlighting_minimize { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-minimize-green.png", sizingMethod="crop"); -} - -* html .greenlighting_maximize { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-maximize-green.png", sizingMethod="crop"); -} - -* html .greenlighting_content { - background:#A4FCA7; -} - - - -.overlay_darkbluelighting { - background-color:#FFF; - filter:alpha(opacity=60); - -moz-opacity:0.6; - opacity:0.6; -} - -.darkbluelighting_wired_frame { - background:#FFF; - filter:alpha(opacity=60); - -moz-opacity:0.6; - opacity:0.6; -} - -.darkbluelighting_nw { - background:transparent url(lighting/top-left-darkblue.png) no-repeat 0 0; - width:9px; - height:28px; -} - -.darkbluelighting_n { - background:transparent url(lighting/top-middle-darkblue.png) repeat-x 0 0; - height:28px; -} - -.darkbluelighting_ne { - background:transparent url(lighting/top-right-darkblue.png) no-repeat 0 0; - width:15px; - height:28px; -} - -.darkbluelighting_w { - background:transparent url(lighting/left-darkblue.png) repeat-y top left; - width:9px; -} - -.darkbluelighting_e { - background:transparent url(lighting/right-darkblue.png) repeat-y top right; - width:15px; -} - -.darkbluelighting_sw { - background:transparent url(lighting/bottom-left-darkblue.png) no-repeat 0 0; - width:9px; - height:15px; -} - -.darkbluelighting_s { - background:transparent url(lighting/bottom-middle-darkblue.png) repeat-x 0 0; - height:15px; -} - -.darkbluelighting_se, .darkbluelighting_sizer { - background:transparent url(lighting/bottom-right-darkblue.png) no-repeat 0 0; - width:15px; - height:15px; -} - -.darkbluelighting_sizer { - cursor:se-resize; -} - -.darkbluelighting_close { - width:15px; - height:9px; - background:transparent url(lighting/button-close-darkblue.png) no-repeat 0 0; - position:absolute; - top:11px; - right:10px; - cursor:pointer; - z-index:1000; -} - -.darkbluelighting_maximize { - width:15px; - height:9px; - background:transparent url(lighting/button-maximize-darkblue.png) no-repeat 0 0; - position:absolute; - top:11px; - right:25px; - cursor:pointer; - z-index:1000; -} - -.darkbluelighting_minimize { - width:15px; - height:9px; - background:transparent url(lighting/button-minimize-darkblue.png) no-repeat 0 0; - position:absolute; - top:11px; - right:40px; - cursor:pointer; - z-index:1000; -} - -.darkbluelighting_title { - float:left; - height:14px; - font-size:14px; - font-weight:bold; - font-family:Verdana, Arial, sans-serif; - text-align:center; - margin-top:2px; - width:100%; - color:#E4EFFD; -} - -.darkbluelighting_content { - overflow:auto; - color:#FFF; - font-family:Verdana, Arial, sans-serif; - font-size:12px; - background:#0413C0; -} - -/* For alert/confirm dialog */ -.darkbluelighting_window { - border:1px solid #F00; - background:#FFF; - padding:20px; - margin-left:auto; - margin-right:auto; - width:400px; -} - -.darkbluelighting_message { - font-size:12px; - text-align:center; - width:100%; - padding-bottom:10px; -} - -.darkbluelighting_buttons { - text-align:center; - width:100%; -} - -.darkbluelighting_buttons input { - border:1px solid #999; - border-top-color:#CCC; - border-left-color:#CCC; - padding:2px; - background-color:#FFF; - color:#333; - background-image:url(lighting/background_buttons.gif); - background-repeat:repeat-x; - font-family:Verdana, Arial, sans-serif; - font-size:10px; - font-weight:bold; - text-align:center; -} - -.darkbluelighting_progress { - float:left; - margin:auto; - text-align:center; - width:100%; - height:16px; - background:transparent url('lighting/spinner.gif') no-repeat center center -} - -/* FOR IE */ -* html .darkbluelighting_nw { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-left-darkblue.png", sizingMethod="crop"); -} - -* html .darkbluelighting_n { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-middle-darkblue.png", sizingMethod="scale"); -} - -* html .darkbluelighting_ne { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-right-darkblue.png", sizingMethod="crop"); -} - -* html .darkbluelighting_w { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/left-darkblue.png", sizingMethod="scale"); -} - -* html .darkbluelighting_e { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/right-darkblue.png", sizingMethod="scale"); -} - -* html .darkbluelighting_sw { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-left-darkblue.png", sizingMethod="crop"); -} - -* html .darkbluelighting_s { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-middle-darkblue.png", sizingMethod="scale"); -} - -* html darkbluelighting_se, * html .darkbluelighting_sizer { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-right-darkblue.png", sizingMethod="crop"); -} - -* html .darkbluelighting_close { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-close-darkblue.png", sizingMethod="crop"); -} - -* html .darkbluelighting_minimize { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-minimize-darkblue.png", sizingMethod="crop"); -} - -* html .darkbluelighting_maximize { - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-maximize-darkblue.png", sizingMethod="crop"); -} - -* html .darkbluelighting_content { - background:#020EBA; -} - +.overlay___invisible__ { + background-color: #666; + filter:alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; +} + +.top_draggable, .bottom_draggable { + cursor:move; +} + +.status_bar { + font-size:12px; +} +.status_bar input{ + font-size:12px; +} + +.wired_frame { + display:block; + position:absolute; + border:1px #000 dashed; +} + + + +.overlay_bluelighting { + background-color:#FFF; + filter:alpha(opacity=60); + -moz-opacity:0.6; + opacity:0.6; +} + +.bluelighting_wired_frame { + background:#FFF; + filter:alpha(opacity=60); + -moz-opacity:0.6; + opacity:0.6; +} + +.bluelighting_nw { + background:transparent url(lighting/top-left-blue.png) no-repeat 0 0; + width:9px; + height:28px; +} + +.bluelighting_n { + background:transparent url(lighting/top-middle-blue.png) repeat-x 0 0; + height:28px; +} + +.bluelighting_ne { + background:transparent url(lighting/top-right-blue.png) no-repeat 0 0; + width:15px; + height:28px; +} + +.bluelighting_w { + background:transparent url(lighting/left-blue.png) repeat-y top left; + width:9px; +} + +.bluelighting_e { + background:transparent url(lighting/right-blue.png) repeat-y top right; + width:15px; +} + +.bluelighting_sw { + background:transparent url(lighting/bottom-left-blue.png) no-repeat 0 0; + width:9px; + height:15px; +} + +.bluelighting_s { + background:transparent url(lighting/bottom-middle-blue.png) repeat-x 0 0; + height:15px; +} + +.bluelighting_se, .bluelighting_sizer { + background:transparent url(lighting/bottom-right-blue.png) no-repeat 0 0; + width:15px; + height:15px; +} + +.bluelighting_sizer { + cursor:se-resize; +} + +.bluelighting_close { + width:15px; + height:9px; + background:transparent url(lighting/button-close-blue.png) no-repeat 0 0; + position:absolute; + top:11px; + right:10px; + cursor:pointer; + z-index:1000; +} + +.bluelighting_maximize { + width:15px; + height:9px; + background:transparent url(lighting/button-maximize-blue.png) no-repeat 0 0; + position:absolute; + top:11px; + right:25px; + cursor:pointer; + z-index:1000; +} + +.bluelighting_minimize { + width:15px; + height:9px; + background:transparent url(lighting/button-minimize-blue.png) no-repeat 0 0; + position:absolute; + top:11px; + right:40px; + cursor:pointer; + z-index:1000; +} + +.bluelighting_title { + float:left; + height:14px; + font-size:14px; + font-weight:bold; + font-family:Verdana, Arial, sans-serif; + text-align:center; + margin-top:2px; + width:100%; + color:#17385B; +} + +.bluelighting_content { + overflow:auto; + color:#000; + font-family:Verdana, Arial, sans-serif; + font-size:12px; + background:#BFDBFF; +} + +/* For alert/confirm dialog */ +.bluelighting_window { + border:1px solid #F00; + background:#FFF; + padding:20px; + margin-left:auto; + margin-right:auto; + width:400px; +} + +.bluelighting_message { + font-size:12px; + text-align:center; + width:100%; + padding-bottom:10px; +} + +.bluelighting_buttons { + text-align:center; + width:100%; +} + +.bluelighting_buttons input { + border:1px solid #999; + border-top-color:#CCC; + border-left-color:#CCC; + padding:2px; + background-color:#FFF; + color:#333; + background-image:url(lighting/background_buttons.gif); + background-repeat:repeat-x; + font-family:Verdana, Arial, sans-serif; + font-size:10px; + font-weight:bold; + text-align:center; +} + +.bluelighting_progress { + float:left; + margin:auto; + text-align:center; + width:100%; + height:16px; + background:transparent url('lighting/spinner.gif') no-repeat center center +} + +/* FOR IE */ +* html .bluelighting_nw { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-left-blue.png", sizingMethod="crop"); +} + +* html .bluelighting_n { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-middle-blue.png", sizingMethod="scale"); +} + +* html .bluelighting_ne { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-right-blue.png", sizingMethod="crop"); +} + +* html .bluelighting_w { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/left-blue.png", sizingMethod="scale"); +} + +* html .bluelighting_e { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/right-blue.png", sizingMethod="scale"); +} + +* html .bluelighting_sw { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-left-blue.png", sizingMethod="crop"); +} + +* html .bluelighting_s { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-middle-blue.png", sizingMethod="scale"); +} + +* html .bluelighting_se, * html .bluelighting_sizer { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-right-blue.png", sizingMethod="crop"); +} + +* html .bluelighting_close { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-close-blue.png", sizingMethod="crop"); +} + +* html .bluelighting_minimize { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-minimize-blue.png", sizingMethod="crop"); +} + +* html .bluelighting_maximize { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-maximize-blue.png", sizingMethod="crop"); +} + +* html .bluelighting_content { + background:#B8D7FF; +} + + + +.overlay_greylighting { + background-color:#FFF; + filter:alpha(opacity=60); + -moz-opacity:0.6; + opacity:0.6; +} + +.greylighting_wired_frame { + background:#FFF; + filter:alpha(opacity=60); + -moz-opacity:0.6; + opacity:0.6; +} + +.greylighting_nw { + background:transparent url(lighting/top-left-grey.png) no-repeat 0 0; + width:9px; + height:28px; +} + +.greylighting_n { + background:transparent url(lighting/top-middle-grey.png) repeat-x 0 0; + height:28px; +} + +.greylighting_ne { + background:transparent url(lighting/top-right-grey.png) no-repeat 0 0; + width:15px; + height:28px; +} + +.greylighting_w { + background:transparent url(lighting/left-grey.png) repeat-y top left; + width:9px; +} + +.greylighting_e { + background:transparent url(lighting/right-grey.png) repeat-y top right; + width:15px; +} + +.greylighting_sw { + background:transparent url(lighting/bottom-left-grey.png) no-repeat 0 0; + width:9px; + height:15px; +} + +.greylighting_s { + background:transparent url(lighting/bottom-middle-grey.png) repeat-x 0 0; + height:15px; +} + +.greylighting_se, .greylighting_sizer { + background:transparent url(lighting/bottom-right-grey.png) no-repeat 0 0; + width:15px; + height:15px; +} + +.greylighting_sizer { + cursor:se-resize; +} + +.greylighting_close { + width:15px; + height:9px; + background:transparent url(lighting/button-close-grey.png) no-repeat 0 0; + position:absolute; + top:11px; + right:10px; + cursor:pointer; + z-index:1000; +} + +.greylighting_maximize { + width:15px; + height:9px; + background:transparent url(lighting/button-maximize-grey.png) no-repeat 0 0; + position:absolute; + top:11px; + right:25px; + cursor:pointer; + z-index:1000; +} + +.greylighting_minimize { + width:15px; + height:9px; + background:transparent url(lighting/button-minimize-grey.png) no-repeat 0 0; + position:absolute; + top:11px; + right:40px; + cursor:pointer; + z-index:1000; +} + +.greylighting_title { + float:left; + height:14px; + font-size:14px; + font-weight:bold; + font-family:Verdana, Arial, sans-serif; + text-align:center; + margin-top:2px; + width:100%; + color:#525252; +} + +.greylighting_content { + overflow:auto; + color:#000; + font-family:Verdana, Arial, sans-serif; + font-size:12px; + background:#CDCDCD; +} + +/* For alert/confirm dialog */ +.greylighting_window { + border:1px solid #F00; + background:#FFF; + padding:20px; + margin-left:auto; + margin-right:auto; + width:400px; +} + +.greylighting_message { + font-size:12px; + text-align:center; + width:100%; + padding-bottom:10px; +} + +.greylighting_buttons { + text-align:center; + width:100%; +} + +.greylighting_buttons input { + border:1px solid #999; + border-top-color:#CCC; + border-left-color:#CCC; + padding:2px; + background-color:#FFF; + color:#333; + background-image:url(lighting/background_buttons.gif); + background-repeat:repeat-x; + font-family:Verdana, Arial, sans-serif; + font-size:10px; + font-weight:bold; + text-align:center; +} + +.greylighting_progress { + float:left; + margin:auto; + text-align:center; + width:100%; + height:16px; + background:transparent url('lighting/spinner.gif') no-repeat center center +} + +/* FOR IE */ +* html .greylighting_nw { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-left-grey.png", sizingMethod="crop"); +} + +* html .greylighting_n { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-middle-grey.png", sizingMethod="scale"); +} + +* html .greylighting_ne { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-right-grey.png", sizingMethod="crop"); +} + +* html .greylighting_w { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/left-grey.png", sizingMethod="scale"); +} + +* html .greylighting_e { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/right-grey.png", sizingMethod="scale"); +} + +* html .greylighting_sw { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-left-grey.png", sizingMethod="crop"); +} + +* html .greylighting_s { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-middle-grey.png", sizingMethod="scale"); +} + +* html greylighting_se, * html .greylighting_sizer { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-right-grey.png", sizingMethod="crop"); +} + +* html .greylighting_close { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-close-grey.png", sizingMethod="crop"); +} + +* html .greylighting_minimize { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-minimize-grey.png", sizingMethod="crop"); +} + +* html .greylighting_maximize { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-maximize-grey.png", sizingMethod="crop"); +} + +* html .greylighting_content { + background:#C7C7C7; +} + + + +.overlay_greenlighting { + background-color:#FFF; + filter:alpha(opacity=60); + -moz-opacity:0.6; + opacity:0.6; +} + +.greenlighting_wired_frame { + background:#FFF; + filter:alpha(opacity=60); + -moz-opacity:0.6; + opacity:0.6; +} + +.greenlighting_nw { + background:transparent url(lighting/top-left-green.png) no-repeat 0 0; + width:9px; + height:28px; +} + +.greenlighting_n { + background:transparent url(lighting/top-middle-green.png) repeat-x 0 0; + height:28px; +} + +.greenlighting_ne { + background:transparent url(lighting/top-right-green.png) no-repeat 0 0; + width:15px; + height:28px; +} + +.greenlighting_w { + background:transparent url(lighting/left-green.png) repeat-y top left; + width:9px; +} + +.greenlighting_e { + background:transparent url(lighting/right-green.png) repeat-y top right; + width:15px; +} + +.greenlighting_sw { + background:transparent url(lighting/bottom-left-green.png) no-repeat 0 0; + width:9px; + height:15px; +} + +.greenlighting_s { + background:transparent url(lighting/bottom-middle-green.png) repeat-x 0 0; + height:15px; +} + +.greenlighting_se, .greenlighting_sizer { + background:transparent url(lighting/bottom-right-green.png) no-repeat 0 0; + width:15px; + height:15px; +} + +.greenlighting_sizer { + cursor:se-resize; +} + +.greenlighting_close { + width:15px; + height:9px; + background:transparent url(lighting/button-close-green.png) no-repeat 0 0; + position:absolute; + top:11px; + right:10px; + cursor:pointer; + z-index:1000; +} + +.greenlighting_maximize { + width:15px; + height:9px; + background:transparent url(lighting/button-maximize-green.png) no-repeat 0 0; + position:absolute; + top:11px; + right:25px; + cursor:pointer; + z-index:1000; +} + +.greenlighting_minimize { + width:15px; + height:9px; + background:transparent url(lighting/button-minimize-green.png) no-repeat 0 0; + position:absolute; + top:11px; + right:40px; + cursor:pointer; + z-index:1000; +} + +.greenlighting_title { + float:left; + height:14px; + font-size:14px; + font-weight:bold; + font-family:Verdana, Arial, sans-serif; + text-align:center; + margin-top:2px; + width:100%; + color:#2A6002; +} + +.greenlighting_content { + overflow:auto; + color:#000; + font-family:Verdana, Arial, sans-serif; + font-size:12px; + background:#ACFCAF; +} + +/* For alert/confirm dialog */ +.greenlighting_window { + border:1px solid #F00; + background:#FFF; + padding:20px; + margin-left:auto; + margin-right:auto; + width:400px; +} + +.greenlighting_message { + font-size:12px; + text-align:center; + width:100%; + padding-bottom:10px; +} + +.greenlighting_buttons { + text-align:center; + width:100%; +} + +.greenlighting_buttons input { + border:1px solid #999; + border-top-color:#CCC; + border-left-color:#CCC; + padding:2px; + background-color:#FFF; + color:#333; + background-image:url(lighting/background_buttons.gif); + background-repeat:repeat-x; + font-family:Verdana, Arial, sans-serif; + font-size:10px; + font-weight:bold; + text-align:center; +} + +.greenlighting_progress { + float:left; + margin:auto; + text-align:center; + width:100%; + height:16px; + background:transparent url('lighting/spinner.gif') no-repeat center center +} + +/* FOR IE */ +* html .greenlighting_nw { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-left-green.png", sizingMethod="crop"); +} + +* html .greenlighting_n { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-middle-green.png", sizingMethod="scale"); +} + +* html .greenlighting_ne { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-right-green.png", sizingMethod="crop"); +} + +* html .greenlighting_w { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/left-green.png", sizingMethod="scale"); +} + +* html .greenlighting_e { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/right-green.png", sizingMethod="scale"); +} + +* html .greenlighting_sw { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-left-green.png", sizingMethod="crop"); +} + +* html .greenlighting_s { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-middle-green.png", sizingMethod="scale"); +} + +* html greenlighting_se, * html .greenlighting_sizer { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-right-green.png", sizingMethod="crop"); +} + +* html .greenlighting_close { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-close-green.png", sizingMethod="crop"); +} + +* html .greenlighting_minimize { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-minimize-green.png", sizingMethod="crop"); +} + +* html .greenlighting_maximize { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-maximize-green.png", sizingMethod="crop"); +} + +* html .greenlighting_content { + background:#A4FCA7; +} + + + +.overlay_darkbluelighting { + background-color:#FFF; + filter:alpha(opacity=60); + -moz-opacity:0.6; + opacity:0.6; +} + +.darkbluelighting_wired_frame { + background:#FFF; + filter:alpha(opacity=60); + -moz-opacity:0.6; + opacity:0.6; +} + +.darkbluelighting_nw { + background:transparent url(lighting/top-left-darkblue.png) no-repeat 0 0; + width:9px; + height:28px; +} + +.darkbluelighting_n { + background:transparent url(lighting/top-middle-darkblue.png) repeat-x 0 0; + height:28px; +} + +.darkbluelighting_ne { + background:transparent url(lighting/top-right-darkblue.png) no-repeat 0 0; + width:15px; + height:28px; +} + +.darkbluelighting_w { + background:transparent url(lighting/left-darkblue.png) repeat-y top left; + width:9px; +} + +.darkbluelighting_e { + background:transparent url(lighting/right-darkblue.png) repeat-y top right; + width:15px; +} + +.darkbluelighting_sw { + background:transparent url(lighting/bottom-left-darkblue.png) no-repeat 0 0; + width:9px; + height:15px; +} + +.darkbluelighting_s { + background:transparent url(lighting/bottom-middle-darkblue.png) repeat-x 0 0; + height:15px; +} + +.darkbluelighting_se, .darkbluelighting_sizer { + background:transparent url(lighting/bottom-right-darkblue.png) no-repeat 0 0; + width:15px; + height:15px; +} + +.darkbluelighting_sizer { + cursor:se-resize; +} + +.darkbluelighting_close { + width:15px; + height:9px; + background:transparent url(lighting/button-close-darkblue.png) no-repeat 0 0; + position:absolute; + top:11px; + right:10px; + cursor:pointer; + z-index:1000; +} + +.darkbluelighting_maximize { + width:15px; + height:9px; + background:transparent url(lighting/button-maximize-darkblue.png) no-repeat 0 0; + position:absolute; + top:11px; + right:25px; + cursor:pointer; + z-index:1000; +} + +.darkbluelighting_minimize { + width:15px; + height:9px; + background:transparent url(lighting/button-minimize-darkblue.png) no-repeat 0 0; + position:absolute; + top:11px; + right:40px; + cursor:pointer; + z-index:1000; +} + +.darkbluelighting_title { + float:left; + height:14px; + font-size:14px; + font-weight:bold; + font-family:Verdana, Arial, sans-serif; + text-align:center; + margin-top:2px; + width:100%; + color:#E4EFFD; +} + +.darkbluelighting_content { + overflow:auto; + color:#FFF; + font-family:Verdana, Arial, sans-serif; + font-size:12px; + background:#0413C0; +} + +/* For alert/confirm dialog */ +.darkbluelighting_window { + border:1px solid #F00; + background:#FFF; + padding:20px; + margin-left:auto; + margin-right:auto; + width:400px; +} + +.darkbluelighting_message { + font-size:12px; + text-align:center; + width:100%; + padding-bottom:10px; +} + +.darkbluelighting_buttons { + text-align:center; + width:100%; +} + +.darkbluelighting_buttons input { + border:1px solid #999; + border-top-color:#CCC; + border-left-color:#CCC; + padding:2px; + background-color:#FFF; + color:#333; + background-image:url(lighting/background_buttons.gif); + background-repeat:repeat-x; + font-family:Verdana, Arial, sans-serif; + font-size:10px; + font-weight:bold; + text-align:center; +} + +.darkbluelighting_progress { + float:left; + margin:auto; + text-align:center; + width:100%; + height:16px; + background:transparent url('lighting/spinner.gif') no-repeat center center +} + +/* FOR IE */ +* html .darkbluelighting_nw { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-left-darkblue.png", sizingMethod="crop"); +} + +* html .darkbluelighting_n { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-middle-darkblue.png", sizingMethod="scale"); +} + +* html .darkbluelighting_ne { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/top-right-darkblue.png", sizingMethod="crop"); +} + +* html .darkbluelighting_w { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/left-darkblue.png", sizingMethod="scale"); +} + +* html .darkbluelighting_e { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/right-darkblue.png", sizingMethod="scale"); +} + +* html .darkbluelighting_sw { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-left-darkblue.png", sizingMethod="crop"); +} + +* html .darkbluelighting_s { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-middle-darkblue.png", sizingMethod="scale"); +} + +* html darkbluelighting_se, * html .darkbluelighting_sizer { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/bottom-right-darkblue.png", sizingMethod="crop"); +} + +* html .darkbluelighting_close { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-close-darkblue.png", sizingMethod="crop"); +} + +* html .darkbluelighting_minimize { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-minimize-darkblue.png", sizingMethod="crop"); +} + +* html .darkbluelighting_maximize { + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../themes/lighting/button-maximize-darkblue.png", sizingMethod="crop"); +} + +* html .darkbluelighting_content { + background:#020EBA; +} + diff --git a/public/plugin_assets/redmine_code_review/stylesheets/window_js/lighting/pngbehavior.htc b/public/plugin_assets/redmine_code_review/stylesheets/window_js/lighting/pngbehavior.htc index 92248c665..36ea182e7 100644 --- a/public/plugin_assets/redmine_code_review/stylesheets/window_js/lighting/pngbehavior.htc +++ b/public/plugin_assets/redmine_code_review/stylesheets/window_js/lighting/pngbehavior.htc @@ -1,67 +1,67 @@ - - - - + + + + +
+ + + + \ No newline at end of file diff --git a/public/javascripts/wechat/ReactRouter.js b/public/javascripts/wechat/ReactRouter.js new file mode 100644 index 000000000..810fd7ddc --- /dev/null +++ b/public/javascripts/wechat/ReactRouter.js @@ -0,0 +1,5064 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("react")); + else if(typeof define === 'function' && define.amd) + define(["react"], factory); + else if(typeof exports === 'object') + exports["ReactRouter"] = factory(require("react")); + else + root["ReactRouter"] = factory(root["React"]); +})(this, function(__WEBPACK_EXTERNAL_MODULE_2__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + /* components */ + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _Router2 = __webpack_require__(37); + + var _Router3 = _interopRequireDefault(_Router2); + + exports.Router = _Router3['default']; + + var _Link2 = __webpack_require__(18); + + var _Link3 = _interopRequireDefault(_Link2); + + exports.Link = _Link3['default']; + + var _IndexLink2 = __webpack_require__(31); + + var _IndexLink3 = _interopRequireDefault(_IndexLink2); + + exports.IndexLink = _IndexLink3['default']; + + /* components (configuration) */ + + var _IndexRedirect2 = __webpack_require__(32); + + var _IndexRedirect3 = _interopRequireDefault(_IndexRedirect2); + + exports.IndexRedirect = _IndexRedirect3['default']; + + var _IndexRoute2 = __webpack_require__(33); + + var _IndexRoute3 = _interopRequireDefault(_IndexRoute2); + + exports.IndexRoute = _IndexRoute3['default']; + + var _Redirect2 = __webpack_require__(19); + + var _Redirect3 = _interopRequireDefault(_Redirect2); + + exports.Redirect = _Redirect3['default']; + + var _Route2 = __webpack_require__(35); + + var _Route3 = _interopRequireDefault(_Route2); + + exports.Route = _Route3['default']; + + /* mixins */ + + var _History2 = __webpack_require__(30); + + var _History3 = _interopRequireDefault(_History2); + + exports.History = _History3['default']; + + var _Lifecycle2 = __webpack_require__(34); + + var _Lifecycle3 = _interopRequireDefault(_Lifecycle2); + + exports.Lifecycle = _Lifecycle3['default']; + + var _RouteContext2 = __webpack_require__(36); + + var _RouteContext3 = _interopRequireDefault(_RouteContext2); + + exports.RouteContext = _RouteContext3['default']; + + /* utils */ + + var _useRoutes2 = __webpack_require__(48); + + var _useRoutes3 = _interopRequireDefault(_useRoutes2); + + exports.useRoutes = _useRoutes3['default']; + + var _RouteUtils = __webpack_require__(5); + + exports.createRoutes = _RouteUtils.createRoutes; + + var _RouterContext2 = __webpack_require__(13); + + var _RouterContext3 = _interopRequireDefault(_RouterContext2); + + exports.RouterContext = _RouterContext3['default']; + + var _RoutingContext2 = __webpack_require__(38); + + var _RoutingContext3 = _interopRequireDefault(_RoutingContext2); + + exports.RoutingContext = _RoutingContext3['default']; + + var _PropTypes2 = __webpack_require__(6); + + var _PropTypes3 = _interopRequireDefault(_PropTypes2); + + exports.PropTypes = _PropTypes3['default']; + + var _match2 = __webpack_require__(46); + + var _match3 = _interopRequireDefault(_match2); + + exports.match = _match3['default']; + + var _useRouterHistory2 = __webpack_require__(24); + + var _useRouterHistory3 = _interopRequireDefault(_useRouterHistory2); + + exports.useRouterHistory = _useRouterHistory3['default']; + + var _PatternUtils = __webpack_require__(8); + + exports.formatPattern = _PatternUtils.formatPattern; + + /* histories */ + + var _browserHistory2 = __webpack_require__(40); + + var _browserHistory3 = _interopRequireDefault(_browserHistory2); + + exports.browserHistory = _browserHistory3['default']; + + var _hashHistory2 = __webpack_require__(44); + + var _hashHistory3 = _interopRequireDefault(_hashHistory2); + + exports.hashHistory = _hashHistory3['default']; + + var _createMemoryHistory2 = __webpack_require__(21); + + var _createMemoryHistory3 = _interopRequireDefault(_createMemoryHistory2); + + exports.createMemoryHistory = _createMemoryHistory3['default']; + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports['default'] = routerWarning; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(4); + + var _warning2 = _interopRequireDefault(_warning); + + function routerWarning(falseToWarn, message) { + message = '[react-router] ' + message; + + for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + + false ? _warning2['default'].apply(undefined, [falseToWarn, message].concat(args)) : undefined; + } + + module.exports = exports['default']; + +/***/ }, +/* 2 */ +/***/ function(module, exports) { + + module.exports = __WEBPACK_EXTERNAL_MODULE_2__; + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + + 'use strict'; + + /** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + + var invariant = function(condition, format, a, b, c, d, e, f) { + if (false) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } + + if (!condition) { + var error; + if (format === undefined) { + error = new Error( + 'Minified exception occurred; use the non-minified dev environment ' + + 'for the full error message and additional helpful warnings.' + ); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error( + format.replace(/%s/g, function() { return args[argIndex++]; }) + ); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } + }; + + module.exports = invariant; + + +/***/ }, +/* 4 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + + 'use strict'; + + /** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + + var warning = function() {}; + + if (false) { + warning = function(condition, format, args) { + var len = arguments.length; + args = new Array(len > 2 ? len - 2 : 0); + for (var key = 2; key < len; key++) { + args[key - 2] = arguments[key]; + } + if (format === undefined) { + throw new Error( + '`warning(condition, format, ...args)` requires a warning ' + + 'message argument' + ); + } + + if (format.length < 10 || (/^[s\W]*$/).test(format)) { + throw new Error( + 'The warning format should be able to uniquely identify this ' + + 'warning. Please, use a more descriptive format than: ' + format + ); + } + + if (!condition) { + var argIndex = 0; + var message = 'Warning: ' + + format.replace(/%s/g, function() { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch(x) {} + } + }; + } + + module.exports = warning; + + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + exports.isReactChildren = isReactChildren; + exports.createRouteFromReactElement = createRouteFromReactElement; + exports.createRoutesFromReactChildren = createRoutesFromReactChildren; + exports.createRoutes = createRoutes; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + function isValidChild(object) { + return object == null || _react2['default'].isValidElement(object); + } + + function isReactChildren(object) { + return isValidChild(object) || Array.isArray(object) && object.every(isValidChild); + } + + function checkPropTypes(componentName, propTypes, props) { + componentName = componentName || 'UnknownComponent'; + + for (var propName in propTypes) { + if (propTypes.hasOwnProperty(propName)) { + var error = propTypes[propName](props, propName, componentName); + + /* istanbul ignore if: error logging */ + if (error instanceof Error) false ? _routerWarning2['default'](false, error.message) : undefined; + } + } + } + + function createRoute(defaultProps, props) { + return _extends({}, defaultProps, props); + } + + function createRouteFromReactElement(element) { + var type = element.type; + var route = createRoute(type.defaultProps, element.props); + + if (type.propTypes) checkPropTypes(type.displayName || type.name, type.propTypes, route); + + if (route.children) { + var childRoutes = createRoutesFromReactChildren(route.children, route); + + if (childRoutes.length) route.childRoutes = childRoutes; + + delete route.children; + } + + return route; + } + + /** + * Creates and returns a routes object from the given ReactChildren. JSX + * provides a convenient way to visualize how routes in the hierarchy are + * nested. + * + * import { Route, createRoutesFromReactChildren } from 'react-router' + * + * const routes = createRoutesFromReactChildren( + * + * + * + * + * ) + * + * Note: This method is automatically used when you provide children + * to a component. + */ + + function createRoutesFromReactChildren(children, parentRoute) { + var routes = []; + + _react2['default'].Children.forEach(children, function (element) { + if (_react2['default'].isValidElement(element)) { + // Component classes may have a static create* method. + if (element.type.createRouteFromReactElement) { + var route = element.type.createRouteFromReactElement(element, parentRoute); + + if (route) routes.push(route); + } else { + routes.push(createRouteFromReactElement(element)); + } + } + }); + + return routes; + } + + /** + * Creates and returns an array of routes from the given object which + * may be a JSX route, a plain object route, or an array of either. + */ + + function createRoutes(routes) { + if (isReactChildren(routes)) { + routes = createRoutesFromReactChildren(routes); + } else if (routes && !Array.isArray(routes)) { + routes = [routes]; + } + + return routes; + } + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.falsy = falsy; + + var _react = __webpack_require__(2); + + var func = _react.PropTypes.func; + var object = _react.PropTypes.object; + var arrayOf = _react.PropTypes.arrayOf; + var oneOfType = _react.PropTypes.oneOfType; + var element = _react.PropTypes.element; + var shape = _react.PropTypes.shape; + var string = _react.PropTypes.string; + + function falsy(props, propName, componentName) { + if (props[propName]) return new Error('<' + componentName + '> should not have a "' + propName + '" prop'); + } + + var history = shape({ + listen: func.isRequired, + pushState: func.isRequired, + replaceState: func.isRequired, + go: func.isRequired + }); + + exports.history = history; + var location = shape({ + pathname: string.isRequired, + search: string.isRequired, + state: object, + action: string.isRequired, + key: string + }); + + exports.location = location; + var component = oneOfType([func, string]); + exports.component = component; + var components = oneOfType([component, object]); + exports.components = components; + var route = oneOfType([object, element]); + exports.route = route; + var routes = oneOfType([route, arrayOf(route)]); + + exports.routes = routes; + exports['default'] = { + falsy: falsy, + history: history, + location: location, + component: component, + components: components, + route: route + }; + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.extractPath = extractPath; + exports.parsePath = parsePath; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(4); + + var _warning2 = _interopRequireDefault(_warning); + + function extractPath(string) { + var match = string.match(/^https?:\/\/[^\/]*/); + + if (match == null) return string; + + return string.substring(match[0].length); + } + + function parsePath(path) { + var pathname = extractPath(path); + var search = ''; + var hash = ''; + + false ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like "%s"', path) : undefined; + + var hashIndex = pathname.indexOf('#'); + if (hashIndex !== -1) { + hash = pathname.substring(hashIndex); + pathname = pathname.substring(0, hashIndex); + } + + var searchIndex = pathname.indexOf('?'); + if (searchIndex !== -1) { + search = pathname.substring(searchIndex); + pathname = pathname.substring(0, searchIndex); + } + + if (pathname === '') pathname = '/'; + + return { + pathname: pathname, + search: search, + hash: hash + }; + } + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.compilePattern = compilePattern; + exports.matchPattern = matchPattern; + exports.getParamNames = getParamNames; + exports.getParams = getParams; + exports.formatPattern = formatPattern; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + } + + function escapeSource(string) { + return escapeRegExp(string).replace(/\/+/g, '/+'); + } + + function _compilePattern(pattern) { + var regexpSource = ''; + var paramNames = []; + var tokens = []; + + var match = undefined, + lastIndex = 0, + matcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*\*|\*|\(|\)/g; + while (match = matcher.exec(pattern)) { + if (match.index !== lastIndex) { + tokens.push(pattern.slice(lastIndex, match.index)); + regexpSource += escapeSource(pattern.slice(lastIndex, match.index)); + } + + if (match[1]) { + regexpSource += '([^/?#]+)'; + paramNames.push(match[1]); + } else if (match[0] === '**') { + regexpSource += '([\\s\\S]*)'; + paramNames.push('splat'); + } else if (match[0] === '*') { + regexpSource += '([\\s\\S]*?)'; + paramNames.push('splat'); + } else if (match[0] === '(') { + regexpSource += '(?:'; + } else if (match[0] === ')') { + regexpSource += ')?'; + } + + tokens.push(match[0]); + + lastIndex = matcher.lastIndex; + } + + if (lastIndex !== pattern.length) { + tokens.push(pattern.slice(lastIndex, pattern.length)); + regexpSource += escapeSource(pattern.slice(lastIndex, pattern.length)); + } + + return { + pattern: pattern, + regexpSource: regexpSource, + paramNames: paramNames, + tokens: tokens + }; + } + + var CompiledPatternsCache = {}; + + function compilePattern(pattern) { + if (!(pattern in CompiledPatternsCache)) CompiledPatternsCache[pattern] = _compilePattern(pattern); + + return CompiledPatternsCache[pattern]; + } + + /** + * Attempts to match a pattern on the given pathname. Patterns may use + * the following special characters: + * + * - :paramName Matches a URL segment up to the next /, ?, or #. The + * captured string is considered a "param" + * - () Wraps a segment of the URL that is optional + * - * Consumes (non-greedy) all characters up to the next + * character in the pattern, or to the end of the URL if + * there is none + * - ** Consumes (greedy) all characters up to the next character + * in the pattern, or to the end of the URL if there is none + * + * The return value is an object with the following properties: + * + * - remainingPathname + * - paramNames + * - paramValues + */ + + function matchPattern(pattern, pathname) { + // Make leading slashes consistent between pattern and pathname. + if (pattern.charAt(0) !== '/') { + pattern = '/' + pattern; + } + if (pathname.charAt(0) !== '/') { + pathname = '/' + pathname; + } + + var _compilePattern2 = compilePattern(pattern); + + var regexpSource = _compilePattern2.regexpSource; + var paramNames = _compilePattern2.paramNames; + var tokens = _compilePattern2.tokens; + + regexpSource += '/*'; // Capture path separators + + // Special-case patterns like '*' for catch-all routes. + var captureRemaining = tokens[tokens.length - 1] !== '*'; + + if (captureRemaining) { + // This will match newlines in the remaining path. + regexpSource += '([\\s\\S]*?)'; + } + + var match = pathname.match(new RegExp('^' + regexpSource + '$', 'i')); + + var remainingPathname = undefined, + paramValues = undefined; + if (match != null) { + if (captureRemaining) { + remainingPathname = match.pop(); + var matchedPath = match[0].substr(0, match[0].length - remainingPathname.length); + + // If we didn't match the entire pathname, then make sure that the match + // we did get ends at a path separator (potentially the one we added + // above at the beginning of the path, if the actual match was empty). + if (remainingPathname && matchedPath.charAt(matchedPath.length - 1) !== '/') { + return { + remainingPathname: null, + paramNames: paramNames, + paramValues: null + }; + } + } else { + // If this matched at all, then the match was the entire pathname. + remainingPathname = ''; + } + + paramValues = match.slice(1).map(function (v) { + return v != null ? decodeURIComponent(v) : v; + }); + } else { + remainingPathname = paramValues = null; + } + + return { + remainingPathname: remainingPathname, + paramNames: paramNames, + paramValues: paramValues + }; + } + + function getParamNames(pattern) { + return compilePattern(pattern).paramNames; + } + + function getParams(pattern, pathname) { + var _matchPattern = matchPattern(pattern, pathname); + + var paramNames = _matchPattern.paramNames; + var paramValues = _matchPattern.paramValues; + + if (paramValues != null) { + return paramNames.reduce(function (memo, paramName, index) { + memo[paramName] = paramValues[index]; + return memo; + }, {}); + } + + return null; + } + + /** + * Returns a version of the given pattern with params interpolated. Throws + * if there is a dynamic segment of the pattern for which there is no param. + */ + + function formatPattern(pattern, params) { + params = params || {}; + + var _compilePattern3 = compilePattern(pattern); + + var tokens = _compilePattern3.tokens; + + var parenCount = 0, + pathname = '', + splatIndex = 0; + + var token = undefined, + paramName = undefined, + paramValue = undefined; + for (var i = 0, len = tokens.length; i < len; ++i) { + token = tokens[i]; + + if (token === '*' || token === '**') { + paramValue = Array.isArray(params.splat) ? params.splat[splatIndex++] : params.splat; + + !(paramValue != null || parenCount > 0) ? false ? _invariant2['default'](false, 'Missing splat #%s for path "%s"', splatIndex, pattern) : _invariant2['default'](false) : undefined; + + if (paramValue != null) pathname += encodeURI(paramValue); + } else if (token === '(') { + parenCount += 1; + } else if (token === ')') { + parenCount -= 1; + } else if (token.charAt(0) === ':') { + paramName = token.substring(1); + paramValue = params[paramName]; + + !(paramValue != null || parenCount > 0) ? false ? _invariant2['default'](false, 'Missing "%s" parameter for path "%s"', paramName, pattern) : _invariant2['default'](false) : undefined; + + if (paramValue != null) pathname += encodeURIComponent(paramValue); + } else { + pathname += token; + } + } + + return pathname.replace(/\/+/g, '/'); + } + +/***/ }, +/* 9 */ +/***/ function(module, exports) { + + /** + * Indicates that navigation was caused by a call to history.push. + */ + 'use strict'; + + exports.__esModule = true; + var PUSH = 'PUSH'; + + exports.PUSH = PUSH; + /** + * Indicates that navigation was caused by a call to history.replace. + */ + var REPLACE = 'REPLACE'; + + exports.REPLACE = REPLACE; + /** + * Indicates that navigation was caused by some other action such + * as using a browser's back/forward buttons and/or manually manipulating + * the URL in a browser's location bar. This is the default. + * + * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate + * for more information. + */ + var POP = 'POP'; + + exports.POP = POP; + exports['default'] = { + PUSH: PUSH, + REPLACE: REPLACE, + POP: POP + }; + +/***/ }, +/* 10 */ +/***/ function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); + exports.canUseDOM = canUseDOM; + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _warning = __webpack_require__(4); + + var _warning2 = _interopRequireDefault(_warning); + + var _queryString = __webpack_require__(56); + + var _runTransitionHook = __webpack_require__(17); + + var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); + + var _PathUtils = __webpack_require__(7); + + var _deprecate = __webpack_require__(16); + + var _deprecate2 = _interopRequireDefault(_deprecate); + + var SEARCH_BASE_KEY = '$searchBase'; + + function defaultStringifyQuery(query) { + return _queryString.stringify(query).replace(/%20/g, '+'); + } + + var defaultParseQueryString = _queryString.parse; + + function isNestedObject(object) { + for (var p in object) { + if (object.hasOwnProperty(p) && typeof object[p] === 'object' && !Array.isArray(object[p]) && object[p] !== null) return true; + }return false; + } + + /** + * Returns a new createHistory function that may be used to create + * history objects that know how to handle URL queries. + */ + function useQueries(createHistory) { + return function () { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var stringifyQuery = options.stringifyQuery; + var parseQueryString = options.parseQueryString; + + var historyOptions = _objectWithoutProperties(options, ['stringifyQuery', 'parseQueryString']); + + var history = createHistory(historyOptions); + + if (typeof stringifyQuery !== 'function') stringifyQuery = defaultStringifyQuery; + + if (typeof parseQueryString !== 'function') parseQueryString = defaultParseQueryString; + + function addQuery(location) { + if (location.query == null) { + var search = location.search; + + location.query = parseQueryString(search.substring(1)); + location[SEARCH_BASE_KEY] = { search: search, searchBase: '' }; + } + + // TODO: Instead of all the book-keeping here, this should just strip the + // stringified query from the search. + + return location; + } + + function appendQuery(location, query) { + var _extends2; + + var searchBaseSpec = location[SEARCH_BASE_KEY]; + var queryString = query ? stringifyQuery(query) : ''; + if (!searchBaseSpec && !queryString) { + return location; + } + + false ? _warning2['default'](stringifyQuery !== defaultStringifyQuery || !isNestedObject(query), 'useQueries does not stringify nested query objects by default; ' + 'use a custom stringifyQuery function') : undefined; + + if (typeof location === 'string') location = _PathUtils.parsePath(location); + + var searchBase = undefined; + if (searchBaseSpec && location.search === searchBaseSpec.search) { + searchBase = searchBaseSpec.searchBase; + } else { + searchBase = location.search || ''; + } + + var search = searchBase; + if (queryString) { + search += (search ? '&' : '?') + queryString; + } + + return _extends({}, location, (_extends2 = { + search: search + }, _extends2[SEARCH_BASE_KEY] = { search: search, searchBase: searchBase }, _extends2)); + } + + // Override all read methods with query-aware versions. + function listenBefore(hook) { + return history.listenBefore(function (location, callback) { + _runTransitionHook2['default'](hook, addQuery(location), callback); + }); + } + + function listen(listener) { + return history.listen(function (location) { + listener(addQuery(location)); + }); + } + + // Override all write methods with query-aware versions. + function push(location) { + history.push(appendQuery(location, location.query)); + } + + function replace(location) { + history.replace(appendQuery(location, location.query)); + } + + function createPath(location, query) { + false ? _warning2['default'](!query, 'the query argument to createPath is deprecated; use a location descriptor instead') : undefined; + + return history.createPath(appendQuery(location, query || location.query)); + } + + function createHref(location, query) { + false ? _warning2['default'](!query, 'the query argument to createHref is deprecated; use a location descriptor instead') : undefined; + + return history.createHref(appendQuery(location, query || location.query)); + } + + function createLocation(location) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var fullLocation = history.createLocation.apply(history, [appendQuery(location, location.query)].concat(args)); + if (location.query) { + fullLocation.query = location.query; + } + return addQuery(fullLocation); + } + + // deprecated + function pushState(state, path, query) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + push(_extends({ state: state }, path, { query: query })); + } + + // deprecated + function replaceState(state, path, query) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + replace(_extends({ state: state }, path, { query: query })); + } + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen, + push: push, + replace: replace, + createPath: createPath, + createHref: createHref, + createLocation: createLocation, + + pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'), + replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead') + }); + }; + } + + exports['default'] = useQueries; + module.exports = exports['default']; + +/***/ }, +/* 12 */ +/***/ function(module, exports) { + + "use strict"; + + exports.__esModule = true; + var _slice = Array.prototype.slice; + exports.loopAsync = loopAsync; + exports.mapAsync = mapAsync; + + function loopAsync(turns, work, callback) { + var currentTurn = 0, + isDone = false; + var sync = false, + hasNext = false, + doneArgs = undefined; + + function done() { + isDone = true; + if (sync) { + // Iterate instead of recursing if possible. + doneArgs = [].concat(_slice.call(arguments)); + return; + } + + callback.apply(this, arguments); + } + + function next() { + if (isDone) { + return; + } + + hasNext = true; + if (sync) { + // Iterate instead of recursing if possible. + return; + } + + sync = true; + + while (!isDone && currentTurn < turns && hasNext) { + hasNext = false; + work.call(this, currentTurn++, next, done); + } + + sync = false; + + if (isDone) { + // This means the loop finished synchronously. + callback.apply(this, doneArgs); + return; + } + + if (currentTurn >= turns && hasNext) { + isDone = true; + callback(); + } + } + + next(); + } + + function mapAsync(array, work, callback) { + var length = array.length; + var values = []; + + if (length === 0) return callback(null, values); + + var isDone = false, + doneCount = 0; + + function done(index, error, value) { + if (isDone) return; + + if (error) { + isDone = true; + callback(error); + } else { + values[index] = value; + + isDone = ++doneCount === length; + + if (isDone) callback(null, values); + } + } + + array.forEach(function (item, index) { + work(item, index, function (error, value) { + done(index, error, value); + }); + }); + } + +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _deprecateObjectProperties = __webpack_require__(23); + + var _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties); + + var _getRouteParams = __webpack_require__(43); + + var _getRouteParams2 = _interopRequireDefault(_getRouteParams); + + var _RouteUtils = __webpack_require__(5); + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _React$PropTypes = _react2['default'].PropTypes; + var array = _React$PropTypes.array; + var func = _React$PropTypes.func; + var object = _React$PropTypes.object; + + /** + * A renders the component tree for a given router state + * and sets the history object and the current location in context. + */ + var RouterContext = _react2['default'].createClass({ + displayName: 'RouterContext', + + propTypes: { + history: object, + router: object.isRequired, + location: object.isRequired, + routes: array.isRequired, + params: object.isRequired, + components: array.isRequired, + createElement: func.isRequired + }, + + getDefaultProps: function getDefaultProps() { + return { + createElement: _react2['default'].createElement + }; + }, + + childContextTypes: { + history: object, + location: object.isRequired, + router: object.isRequired + }, + + getChildContext: function getChildContext() { + var _props = this.props; + var router = _props.router; + var history = _props.history; + var location = _props.location; + + if (!router) { + false ? _routerWarning2['default'](false, '`` expects a `router` rather than a `history`') : undefined; + + router = _extends({}, history, { + setRouteLeaveHook: history.listenBeforeLeavingRoute + }); + delete router.listenBeforeLeavingRoute; + } + + if (false) { + location = _deprecateObjectProperties2['default'](location, '`context.location` is deprecated, please use a route component\'s `props.location` instead. http://tiny.cc/router-accessinglocation'); + } + + return { history: history, location: location, router: router }; + }, + + createElement: function createElement(component, props) { + return component == null ? null : this.props.createElement(component, props); + }, + + render: function render() { + var _this = this; + + var _props2 = this.props; + var history = _props2.history; + var location = _props2.location; + var routes = _props2.routes; + var params = _props2.params; + var components = _props2.components; + + var element = null; + + if (components) { + element = components.reduceRight(function (element, components, index) { + if (components == null) return element; // Don't create new children; use the grandchildren. + + var route = routes[index]; + var routeParams = _getRouteParams2['default'](route, params); + var props = { + history: history, + location: location, + params: params, + route: route, + routeParams: routeParams, + routes: routes + }; + + if (_RouteUtils.isReactChildren(element)) { + props.children = element; + } else if (element) { + for (var prop in element) { + if (element.hasOwnProperty(prop)) props[prop] = element[prop]; + } + } + + if (typeof components === 'object') { + var elements = {}; + + for (var key in components) { + if (components.hasOwnProperty(key)) { + // Pass through the key as a prop to createElement to allow + // custom createElement functions to know which named component + // they're rendering, for e.g. matching up to fetched data. + elements[key] = _this.createElement(components[key], _extends({ + key: key }, props)); + } + } + + return elements; + } + + return _this.createElement(components, props); + }, element); + } + + !(element === null || element === false || _react2['default'].isValidElement(element)) ? false ? _invariant2['default'](false, 'The root route must render a single element') : _invariant2['default'](false) : undefined; + + return element; + } + + }); + + exports['default'] = RouterContext; + module.exports = exports['default']; + +/***/ }, +/* 14 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + exports['default'] = createTransitionManager; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _historyLibActions = __webpack_require__(9); + + var _computeChangedRoutes2 = __webpack_require__(41); + + var _computeChangedRoutes3 = _interopRequireDefault(_computeChangedRoutes2); + + var _TransitionUtils = __webpack_require__(39); + + var _isActive2 = __webpack_require__(45); + + var _isActive3 = _interopRequireDefault(_isActive2); + + var _getComponents = __webpack_require__(42); + + var _getComponents2 = _interopRequireDefault(_getComponents); + + var _matchRoutes = __webpack_require__(47); + + var _matchRoutes2 = _interopRequireDefault(_matchRoutes); + + function hasAnyProperties(object) { + for (var p in object) { + if (object.hasOwnProperty(p)) return true; + }return false; + } + + function createTransitionManager(history, routes) { + var state = {}; + + // Signature should be (location, indexOnly), but needs to support (path, + // query, indexOnly) + function isActive(location) { + var indexOnlyOrDeprecatedQuery = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; + var deprecatedIndexOnly = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; + + var indexOnly = undefined; + if (indexOnlyOrDeprecatedQuery && indexOnlyOrDeprecatedQuery !== true || deprecatedIndexOnly !== null) { + false ? _routerWarning2['default'](false, '`isActive(pathname, query, indexOnly) is deprecated; use `isActive(location, indexOnly)` with a location descriptor instead. http://tiny.cc/router-isActivedeprecated') : undefined; + location = { pathname: location, query: indexOnlyOrDeprecatedQuery }; + indexOnly = deprecatedIndexOnly || false; + } else { + location = history.createLocation(location); + indexOnly = indexOnlyOrDeprecatedQuery; + } + + return _isActive3['default'](location, indexOnly, state.location, state.routes, state.params); + } + + function createLocationFromRedirectInfo(location) { + return history.createLocation(location, _historyLibActions.REPLACE); + } + + var partialNextState = undefined; + + function match(location, callback) { + if (partialNextState && partialNextState.location === location) { + // Continue from where we left off. + finishMatch(partialNextState, callback); + } else { + _matchRoutes2['default'](routes, location, function (error, nextState) { + if (error) { + callback(error); + } else if (nextState) { + finishMatch(_extends({}, nextState, { location: location }), callback); + } else { + callback(); + } + }); + } + } + + function finishMatch(nextState, callback) { + var _computeChangedRoutes = _computeChangedRoutes3['default'](state, nextState); + + var leaveRoutes = _computeChangedRoutes.leaveRoutes; + var enterRoutes = _computeChangedRoutes.enterRoutes; + + _TransitionUtils.runLeaveHooks(leaveRoutes); + + // Tear down confirmation hooks for left routes + leaveRoutes.filter(function (route) { + return enterRoutes.indexOf(route) === -1; + }).forEach(removeListenBeforeHooksForRoute); + + _TransitionUtils.runEnterHooks(enterRoutes, nextState, function (error, redirectInfo) { + if (error) { + callback(error); + } else if (redirectInfo) { + callback(null, createLocationFromRedirectInfo(redirectInfo)); + } else { + // TODO: Fetch components after state is updated. + _getComponents2['default'](nextState, function (error, components) { + if (error) { + callback(error); + } else { + // TODO: Make match a pure function and have some other API + // for "match and update state". + callback(null, null, state = _extends({}, nextState, { components: components })); + } + }); + } + }); + } + + var RouteGuid = 1; + + function getRouteID(route) { + var create = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; + + return route.__id__ || create && (route.__id__ = RouteGuid++); + } + + var RouteHooks = {}; + + function getRouteHooksForRoutes(routes) { + return routes.reduce(function (hooks, route) { + hooks.push.apply(hooks, RouteHooks[getRouteID(route)]); + return hooks; + }, []); + } + + function transitionHook(location, callback) { + _matchRoutes2['default'](routes, location, function (error, nextState) { + if (nextState == null) { + // TODO: We didn't actually match anything, but hang + // onto error/nextState so we don't have to matchRoutes + // again in the listen callback. + callback(); + return; + } + + // Cache some state here so we don't have to + // matchRoutes() again in the listen callback. + partialNextState = _extends({}, nextState, { location: location }); + + var hooks = getRouteHooksForRoutes(_computeChangedRoutes3['default'](state, partialNextState).leaveRoutes); + + var result = undefined; + for (var i = 0, len = hooks.length; result == null && i < len; ++i) { + // Passing the location arg here indicates to + // the user that this is a transition hook. + result = hooks[i](location); + } + + callback(result); + }); + } + + /* istanbul ignore next: untestable with Karma */ + function beforeUnloadHook() { + // Synchronously check to see if any route hooks want + // to prevent the current window/tab from closing. + if (state.routes) { + var hooks = getRouteHooksForRoutes(state.routes); + + var message = undefined; + for (var i = 0, len = hooks.length; typeof message !== 'string' && i < len; ++i) { + // Passing no args indicates to the user that this is a + // beforeunload hook. We don't know the next location. + message = hooks[i](); + } + + return message; + } + } + + var unlistenBefore = undefined, + unlistenBeforeUnload = undefined; + + function removeListenBeforeHooksForRoute(route) { + var routeID = getRouteID(route, false); + if (!routeID) { + return; + } + + delete RouteHooks[routeID]; + + if (!hasAnyProperties(RouteHooks)) { + // teardown transition & beforeunload hooks + if (unlistenBefore) { + unlistenBefore(); + unlistenBefore = null; + } + + if (unlistenBeforeUnload) { + unlistenBeforeUnload(); + unlistenBeforeUnload = null; + } + } + } + + /** + * Registers the given hook function to run before leaving the given route. + * + * During a normal transition, the hook function receives the next location + * as its only argument and must return either a) a prompt message to show + * the user, to make sure they want to leave the page or b) false, to prevent + * the transition. + * + * During the beforeunload event (in browsers) the hook receives no arguments. + * In this case it must return a prompt message to prevent the transition. + * + * Returns a function that may be used to unbind the listener. + */ + function listenBeforeLeavingRoute(route, hook) { + // TODO: Warn if they register for a route that isn't currently + // active. They're probably doing something wrong, like re-creating + // route objects on every location change. + var routeID = getRouteID(route); + var hooks = RouteHooks[routeID]; + + if (!hooks) { + var thereWereNoRouteHooks = !hasAnyProperties(RouteHooks); + + RouteHooks[routeID] = [hook]; + + if (thereWereNoRouteHooks) { + // setup transition & beforeunload hooks + unlistenBefore = history.listenBefore(transitionHook); + + if (history.listenBeforeUnload) unlistenBeforeUnload = history.listenBeforeUnload(beforeUnloadHook); + } + } else { + if (hooks.indexOf(hook) === -1) { + false ? _routerWarning2['default'](false, 'adding multiple leave hooks for the same route is deprecated; manage multiple confirmations in your own code instead') : undefined; + + hooks.push(hook); + } + } + + return function () { + var hooks = RouteHooks[routeID]; + + if (hooks) { + var newHooks = hooks.filter(function (item) { + return item !== hook; + }); + + if (newHooks.length === 0) { + removeListenBeforeHooksForRoute(route); + } else { + RouteHooks[routeID] = newHooks; + } + } + }; + } + + /** + * This is the API for stateful environments. As the location + * changes, we update state and call the listener. We can also + * gracefully handle errors and redirects. + */ + function listen(listener) { + // TODO: Only use a single history listener. Otherwise we'll + // end up with multiple concurrent calls to match. + return history.listen(function (location) { + if (state.location === location) { + listener(null, state); + } else { + match(location, function (error, redirectLocation, nextState) { + if (error) { + listener(error); + } else if (redirectLocation) { + history.transitionTo(redirectLocation); + } else if (nextState) { + listener(null, nextState); + } else { + false ? _routerWarning2['default'](false, 'Location "%s" did not match any routes', location.pathname + location.search + location.hash) : undefined; + } + }); + } + }); + } + + return { + isActive: isActive, + match: match, + listenBeforeLeavingRoute: listenBeforeLeavingRoute, + listen: listen + }; + } + + //export default useRoutes + module.exports = exports['default']; + +/***/ }, +/* 15 */ +/***/ function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports.addEventListener = addEventListener; + exports.removeEventListener = removeEventListener; + exports.getHashPath = getHashPath; + exports.replaceHashPath = replaceHashPath; + exports.getWindowPath = getWindowPath; + exports.go = go; + exports.getUserConfirmation = getUserConfirmation; + exports.supportsHistory = supportsHistory; + exports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash; + + function addEventListener(node, event, listener) { + if (node.addEventListener) { + node.addEventListener(event, listener, false); + } else { + node.attachEvent('on' + event, listener); + } + } + + function removeEventListener(node, event, listener) { + if (node.removeEventListener) { + node.removeEventListener(event, listener, false); + } else { + node.detachEvent('on' + event, listener); + } + } + + function getHashPath() { + // We can't use window.location.hash here because it's not + // consistent across browsers - Firefox will pre-decode it! + return window.location.href.split('#')[1] || ''; + } + + function replaceHashPath(path) { + window.location.replace(window.location.pathname + window.location.search + '#' + path); + } + + function getWindowPath() { + return window.location.pathname + window.location.search + window.location.hash; + } + + function go(n) { + if (n) window.history.go(n); + } + + function getUserConfirmation(message, callback) { + callback(window.confirm(message)); + } + + /** + * Returns true if the HTML5 history API is supported. Taken from Modernizr. + * + * https://github.com/Modernizr/Modernizr/blob/master/LICENSE + * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js + * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586 + */ + + function supportsHistory() { + var ua = navigator.userAgent; + if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) { + return false; + } + return window.history && 'pushState' in window.history; + } + + /** + * Returns false if using go(n) with hash history causes a full page reload. + */ + + function supportsGoWithoutReloadUsingHash() { + var ua = navigator.userAgent; + return ua.indexOf('Firefox') === -1; + } + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(4); + + var _warning2 = _interopRequireDefault(_warning); + + function deprecate(fn, message) { + return function () { + false ? _warning2['default'](false, '[history] ' + message) : undefined; + return fn.apply(this, arguments); + }; + } + + exports['default'] = deprecate; + module.exports = exports['default']; + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(4); + + var _warning2 = _interopRequireDefault(_warning); + + function runTransitionHook(hook, location, callback) { + var result = hook(location, callback); + + if (hook.length < 2) { + // Assume the hook runs synchronously and automatically + // call the callback with the return value. + callback(result); + } else { + false ? _warning2['default'](result === undefined, 'You should not "return" in a transition hook with a callback argument; call the callback instead') : undefined; + } + } + + exports['default'] = runTransitionHook; + module.exports = exports['default']; + +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _React$PropTypes = _react2['default'].PropTypes; + var bool = _React$PropTypes.bool; + var object = _React$PropTypes.object; + var string = _React$PropTypes.string; + var func = _React$PropTypes.func; + var oneOfType = _React$PropTypes.oneOfType; + + function isLeftClickEvent(event) { + return event.button === 0; + } + + function isModifiedEvent(event) { + return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); + } + + function isEmptyObject(object) { + for (var p in object) { + if (object.hasOwnProperty(p)) return false; + }return true; + } + + function createLocationDescriptor(to, _ref) { + var query = _ref.query; + var hash = _ref.hash; + var state = _ref.state; + + if (query || hash || state) { + return { pathname: to, query: query, hash: hash, state: state }; + } + + return to; + } + + /** + * A is used to create an element that links to a route. + * When that route is active, the link gets the value of its + * activeClassName prop. + * + * For example, assuming you have the following route: + * + * + * + * You could use the following component to link to that route: + * + * + * + * Links may pass along location state and/or query string parameters + * in the state/query props, respectively. + * + * + */ + var Link = _react2['default'].createClass({ + displayName: 'Link', + + contextTypes: { + router: object + }, + + propTypes: { + to: oneOfType([string, object]).isRequired, + query: object, + hash: string, + state: object, + activeStyle: object, + activeClassName: string, + onlyActiveOnIndex: bool.isRequired, + onClick: func + }, + + getDefaultProps: function getDefaultProps() { + return { + onlyActiveOnIndex: false, + className: '', + style: {} + }; + }, + + handleClick: function handleClick(event) { + var allowTransition = true; + + if (this.props.onClick) this.props.onClick(event); + + if (isModifiedEvent(event) || !isLeftClickEvent(event)) return; + + if (event.defaultPrevented === true) allowTransition = false; + + // If target prop is set (e.g. to "_blank") let browser handle link. + /* istanbul ignore if: untestable with Karma */ + if (this.props.target) { + if (!allowTransition) event.preventDefault(); + + return; + } + + event.preventDefault(); + + if (allowTransition) { + var _props = this.props; + var to = _props.to; + var query = _props.query; + var hash = _props.hash; + var state = _props.state; + + var _location = createLocationDescriptor(to, { query: query, hash: hash, state: state }); + + this.context.router.push(_location); + } + }, + + render: function render() { + var _props2 = this.props; + var to = _props2.to; + var query = _props2.query; + var hash = _props2.hash; + var state = _props2.state; + var activeClassName = _props2.activeClassName; + var activeStyle = _props2.activeStyle; + var onlyActiveOnIndex = _props2.onlyActiveOnIndex; + + var props = _objectWithoutProperties(_props2, ['to', 'query', 'hash', 'state', 'activeClassName', 'activeStyle', 'onlyActiveOnIndex']); + + false ? _routerWarning2['default'](!(query || hash || state), 'the `query`, `hash`, and `state` props on `` are deprecated, use `. http://tiny.cc/router-isActivedeprecated') : undefined; + + // Ignore if rendered outside the context of router, simplifies unit testing. + var router = this.context.router; + + if (router) { + var _location2 = createLocationDescriptor(to, { query: query, hash: hash, state: state }); + props.href = router.createHref(_location2); + + if (activeClassName || activeStyle != null && !isEmptyObject(activeStyle)) { + if (router.isActive(_location2, onlyActiveOnIndex)) { + if (activeClassName) props.className += props.className === '' ? activeClassName : ' ' + activeClassName; + + if (activeStyle) props.style = _extends({}, props.style, activeStyle); + } + } + } + + return _react2['default'].createElement('a', _extends({}, props, { onClick: this.handleClick })); + } + + }); + + exports['default'] = Link; + module.exports = exports['default']; + +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _RouteUtils = __webpack_require__(5); + + var _PatternUtils = __webpack_require__(8); + + var _PropTypes = __webpack_require__(6); + + var _React$PropTypes = _react2['default'].PropTypes; + var string = _React$PropTypes.string; + var object = _React$PropTypes.object; + + /** + * A is used to declare another URL path a client should + * be sent to when they request a given URL. + * + * Redirects are placed alongside routes in the route configuration + * and are traversed in the same manner. + */ + var Redirect = _react2['default'].createClass({ + displayName: 'Redirect', + + statics: { + + createRouteFromReactElement: function createRouteFromReactElement(element) { + var route = _RouteUtils.createRouteFromReactElement(element); + + if (route.from) route.path = route.from; + + route.onEnter = function (nextState, replace) { + var location = nextState.location; + var params = nextState.params; + + var pathname = undefined; + if (route.to.charAt(0) === '/') { + pathname = _PatternUtils.formatPattern(route.to, params); + } else if (!route.to) { + pathname = location.pathname; + } else { + var routeIndex = nextState.routes.indexOf(route); + var parentPattern = Redirect.getRoutePattern(nextState.routes, routeIndex - 1); + var pattern = parentPattern.replace(/\/*$/, '/') + route.to; + pathname = _PatternUtils.formatPattern(pattern, params); + } + + replace({ + pathname: pathname, + query: route.query || location.query, + state: route.state || location.state + }); + }; + + return route; + }, + + getRoutePattern: function getRoutePattern(routes, routeIndex) { + var parentPattern = ''; + + for (var i = routeIndex; i >= 0; i--) { + var route = routes[i]; + var pattern = route.path || ''; + + parentPattern = pattern.replace(/\/*$/, '/') + parentPattern; + + if (pattern.indexOf('/') === 0) break; + } + + return '/' + parentPattern; + } + + }, + + propTypes: { + path: string, + from: string, // Alias for path + to: string.isRequired, + query: object, + state: object, + onEnter: _PropTypes.falsy, + children: _PropTypes.falsy + }, + + /* istanbul ignore next: sanity check */ + render: function render() { + true ? false ? _invariant2['default'](false, ' elements are for router configuration only and should not be rendered') : _invariant2['default'](false) : undefined; + } + + }); + + exports['default'] = Redirect; + module.exports = exports['default']; + +/***/ }, +/* 20 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + exports.createRouterObject = createRouterObject; + exports.createRoutingHistory = createRoutingHistory; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _deprecateObjectProperties = __webpack_require__(23); + + var _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties); + + function createRouterObject(history, transitionManager) { + return _extends({}, history, { + setRouteLeaveHook: transitionManager.listenBeforeLeavingRoute, + isActive: transitionManager.isActive + }); + } + + // deprecated + + function createRoutingHistory(history, transitionManager) { + history = _extends({}, history, transitionManager); + + if (false) { + history = _deprecateObjectProperties2['default'](history, '`props.history` and `context.history` are deprecated. Please use `context.router`. http://tiny.cc/router-contextchanges'); + } + + return history; + } + +/***/ }, +/* 21 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports['default'] = createMemoryHistory; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _historyLibUseQueries = __webpack_require__(11); + + var _historyLibUseQueries2 = _interopRequireDefault(_historyLibUseQueries); + + var _historyLibUseBasename = __webpack_require__(29); + + var _historyLibUseBasename2 = _interopRequireDefault(_historyLibUseBasename); + + var _historyLibCreateMemoryHistory = __webpack_require__(55); + + var _historyLibCreateMemoryHistory2 = _interopRequireDefault(_historyLibCreateMemoryHistory); + + function createMemoryHistory(options) { + // signatures and type checking differ between `useRoutes` and + // `createMemoryHistory`, have to create `memoryHistory` first because + // `useQueries` doesn't understand the signature + var memoryHistory = _historyLibCreateMemoryHistory2['default'](options); + var createHistory = function createHistory() { + return memoryHistory; + }; + var history = _historyLibUseQueries2['default'](_historyLibUseBasename2['default'](createHistory))(options); + history.__v2_compatible__ = true; + return history; + } + + module.exports = exports['default']; + +/***/ }, +/* 22 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _useRouterHistory = __webpack_require__(24); + + var _useRouterHistory2 = _interopRequireDefault(_useRouterHistory); + + var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); + + exports['default'] = function (createHistory) { + var history = undefined; + if (canUseDOM) history = _useRouterHistory2['default'](createHistory)(); + return history; + }; + + module.exports = exports['default']; + +/***/ }, +/* 23 */ +/***/ function(module, exports, __webpack_require__) { + + /*eslint no-empty: 0*/ + 'use strict'; + + exports.__esModule = true; + exports['default'] = deprecateObjectProperties; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var useMembrane = false; + + if (false) { + try { + if (Object.defineProperty({}, 'x', { get: function get() { + return true; + } }).x) { + useMembrane = true; + } + } catch (e) {} + } + + // wraps an object in a membrane to warn about deprecated property access + + function deprecateObjectProperties(object, message) { + if (!useMembrane) return object; + + var membrane = {}; + + var _loop = function (prop) { + if (typeof object[prop] === 'function') { + membrane[prop] = function () { + false ? _routerWarning2['default'](false, message) : undefined; + return object[prop].apply(object, arguments); + }; + } else { + Object.defineProperty(membrane, prop, { + configurable: false, + enumerable: false, + get: function get() { + false ? _routerWarning2['default'](false, message) : undefined; + return object[prop]; + } + }); + } + }; + + for (var prop in object) { + _loop(prop); + } + + return membrane; + } + + module.exports = exports['default']; + +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports['default'] = useRouterHistory; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _historyLibUseQueries = __webpack_require__(11); + + var _historyLibUseQueries2 = _interopRequireDefault(_historyLibUseQueries); + + var _historyLibUseBasename = __webpack_require__(29); + + var _historyLibUseBasename2 = _interopRequireDefault(_historyLibUseBasename); + + function useRouterHistory(createHistory) { + return function (options) { + var history = _historyLibUseQueries2['default'](_historyLibUseBasename2['default'](createHistory))(options); + history.__v2_compatible__ = true; + return history; + }; + } + + module.exports = exports['default']; + +/***/ }, +/* 25 */ +/***/ function(module, exports, __webpack_require__) { + + /*eslint-disable no-empty */ + 'use strict'; + + exports.__esModule = true; + exports.saveState = saveState; + exports.readState = readState; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(4); + + var _warning2 = _interopRequireDefault(_warning); + + var KeyPrefix = '@@History/'; + var QuotaExceededErrors = ['QuotaExceededError', 'QUOTA_EXCEEDED_ERR']; + + var SecurityError = 'SecurityError'; + + function createKey(key) { + return KeyPrefix + key; + } + + function saveState(key, state) { + try { + if (state == null) { + window.sessionStorage.removeItem(createKey(key)); + } else { + window.sessionStorage.setItem(createKey(key), JSON.stringify(state)); + } + } catch (error) { + if (error.name === SecurityError) { + // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any + // attempt to access window.sessionStorage. + false ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined; + + return; + } + + if (QuotaExceededErrors.indexOf(error.name) >= 0 && window.sessionStorage.length === 0) { + // Safari "private mode" throws QuotaExceededError. + false ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined; + + return; + } + + throw error; + } + } + + function readState(key) { + var json = undefined; + try { + json = window.sessionStorage.getItem(createKey(key)); + } catch (error) { + if (error.name === SecurityError) { + // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any + // attempt to access window.sessionStorage. + false ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined; + + return null; + } + } + + if (json) { + try { + return JSON.parse(json); + } catch (error) { + // Ignore invalid JSON. + } + } + + return null; + } + +/***/ }, +/* 26 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _ExecutionEnvironment = __webpack_require__(10); + + var _DOMUtils = __webpack_require__(15); + + var _createHistory = __webpack_require__(28); + + var _createHistory2 = _interopRequireDefault(_createHistory); + + function createDOMHistory(options) { + var history = _createHistory2['default'](_extends({ + getUserConfirmation: _DOMUtils.getUserConfirmation + }, options, { + go: _DOMUtils.go + })); + + function listen(listener) { + !_ExecutionEnvironment.canUseDOM ? false ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined; + + return history.listen(listener); + } + + return _extends({}, history, { + listen: listen + }); + } + + exports['default'] = createDOMHistory; + module.exports = exports['default']; + +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(4); + + var _warning2 = _interopRequireDefault(_warning); + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _Actions = __webpack_require__(9); + + var _PathUtils = __webpack_require__(7); + + var _ExecutionEnvironment = __webpack_require__(10); + + var _DOMUtils = __webpack_require__(15); + + var _DOMStateStorage = __webpack_require__(25); + + var _createDOMHistory = __webpack_require__(26); + + var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory); + + function isAbsolutePath(path) { + return typeof path === 'string' && path.charAt(0) === '/'; + } + + function ensureSlash() { + var path = _DOMUtils.getHashPath(); + + if (isAbsolutePath(path)) return true; + + _DOMUtils.replaceHashPath('/' + path); + + return false; + } + + function addQueryStringValueToPath(path, key, value) { + return path + (path.indexOf('?') === -1 ? '?' : '&') + (key + '=' + value); + } + + function stripQueryStringValueFromPath(path, key) { + return path.replace(new RegExp('[?&]?' + key + '=[a-zA-Z0-9]+'), ''); + } + + function getQueryStringValueFromPath(path, key) { + var match = path.match(new RegExp('\\?.*?\\b' + key + '=(.+?)\\b')); + return match && match[1]; + } + + var DefaultQueryKey = '_k'; + + function createHashHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + !_ExecutionEnvironment.canUseDOM ? false ? _invariant2['default'](false, 'Hash history needs a DOM') : _invariant2['default'](false) : undefined; + + var queryKey = options.queryKey; + + if (queryKey === undefined || !!queryKey) queryKey = typeof queryKey === 'string' ? queryKey : DefaultQueryKey; + + function getCurrentLocation() { + var path = _DOMUtils.getHashPath(); + + var key = undefined, + state = undefined; + if (queryKey) { + key = getQueryStringValueFromPath(path, queryKey); + path = stripQueryStringValueFromPath(path, queryKey); + + if (key) { + state = _DOMStateStorage.readState(key); + } else { + state = null; + key = history.createKey(); + _DOMUtils.replaceHashPath(addQueryStringValueToPath(path, queryKey, key)); + } + } else { + key = state = null; + } + + var location = _PathUtils.parsePath(path); + + return history.createLocation(_extends({}, location, { state: state }), undefined, key); + } + + function startHashChangeListener(_ref) { + var transitionTo = _ref.transitionTo; + + function hashChangeListener() { + if (!ensureSlash()) return; // Always make sure hashes are preceeded with a /. + + transitionTo(getCurrentLocation()); + } + + ensureSlash(); + _DOMUtils.addEventListener(window, 'hashchange', hashChangeListener); + + return function () { + _DOMUtils.removeEventListener(window, 'hashchange', hashChangeListener); + }; + } + + function finishTransition(location) { + var basename = location.basename; + var pathname = location.pathname; + var search = location.search; + var state = location.state; + var action = location.action; + var key = location.key; + + if (action === _Actions.POP) return; // Nothing to do. + + var path = (basename || '') + pathname + search; + + if (queryKey) { + path = addQueryStringValueToPath(path, queryKey, key); + _DOMStateStorage.saveState(key, state); + } else { + // Drop key and state. + location.key = location.state = null; + } + + var currentHash = _DOMUtils.getHashPath(); + + if (action === _Actions.PUSH) { + if (currentHash !== path) { + window.location.hash = path; + } else { + false ? _warning2['default'](false, 'You cannot PUSH the same path using hash history') : undefined; + } + } else if (currentHash !== path) { + // REPLACE + _DOMUtils.replaceHashPath(path); + } + } + + var history = _createDOMHistory2['default'](_extends({}, options, { + getCurrentLocation: getCurrentLocation, + finishTransition: finishTransition, + saveState: _DOMStateStorage.saveState + })); + + var listenerCount = 0, + stopHashChangeListener = undefined; + + function listenBefore(listener) { + if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history); + + var unlisten = history.listenBefore(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopHashChangeListener(); + }; + } + + function listen(listener) { + if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history); + + var unlisten = history.listen(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopHashChangeListener(); + }; + } + + function push(location) { + false ? _warning2['default'](queryKey || location.state == null, 'You cannot use state without a queryKey it will be dropped') : undefined; + + history.push(location); + } + + function replace(location) { + false ? _warning2['default'](queryKey || location.state == null, 'You cannot use state without a queryKey it will be dropped') : undefined; + + history.replace(location); + } + + var goIsSupportedWithoutReload = _DOMUtils.supportsGoWithoutReloadUsingHash(); + + function go(n) { + false ? _warning2['default'](goIsSupportedWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : undefined; + + history.go(n); + } + + function createHref(path) { + return '#' + history.createHref(path); + } + + // deprecated + function registerTransitionHook(hook) { + if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history); + + history.registerTransitionHook(hook); + } + + // deprecated + function unregisterTransitionHook(hook) { + history.unregisterTransitionHook(hook); + + if (--listenerCount === 0) stopHashChangeListener(); + } + + // deprecated + function pushState(state, path) { + false ? _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped') : undefined; + + history.pushState(state, path); + } + + // deprecated + function replaceState(state, path) { + false ? _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped') : undefined; + + history.replaceState(state, path); + } + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen, + push: push, + replace: replace, + go: go, + createHref: createHref, + + registerTransitionHook: registerTransitionHook, // deprecated - warning is in createHistory + unregisterTransitionHook: unregisterTransitionHook, // deprecated - warning is in createHistory + pushState: pushState, // deprecated - warning is in createHistory + replaceState: replaceState // deprecated - warning is in createHistory + }); + } + + exports['default'] = createHashHistory; + module.exports = exports['default']; + +/***/ }, +/* 28 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(4); + + var _warning2 = _interopRequireDefault(_warning); + + var _deepEqual = __webpack_require__(49); + + var _deepEqual2 = _interopRequireDefault(_deepEqual); + + var _PathUtils = __webpack_require__(7); + + var _AsyncUtils = __webpack_require__(52); + + var _Actions = __webpack_require__(9); + + var _createLocation2 = __webpack_require__(54); + + var _createLocation3 = _interopRequireDefault(_createLocation2); + + var _runTransitionHook = __webpack_require__(17); + + var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); + + var _deprecate = __webpack_require__(16); + + var _deprecate2 = _interopRequireDefault(_deprecate); + + function createRandomKey(length) { + return Math.random().toString(36).substr(2, length); + } + + function locationsAreEqual(a, b) { + return a.pathname === b.pathname && a.search === b.search && + //a.action === b.action && // Different action !== location change. + a.key === b.key && _deepEqual2['default'](a.state, b.state); + } + + var DefaultKeyLength = 6; + + function createHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var getCurrentLocation = options.getCurrentLocation; + var finishTransition = options.finishTransition; + var saveState = options.saveState; + var go = options.go; + var keyLength = options.keyLength; + var getUserConfirmation = options.getUserConfirmation; + + if (typeof keyLength !== 'number') keyLength = DefaultKeyLength; + + var transitionHooks = []; + + function listenBefore(hook) { + transitionHooks.push(hook); + + return function () { + transitionHooks = transitionHooks.filter(function (item) { + return item !== hook; + }); + }; + } + + var allKeys = []; + var changeListeners = []; + var location = undefined; + + function getCurrent() { + if (pendingLocation && pendingLocation.action === _Actions.POP) { + return allKeys.indexOf(pendingLocation.key); + } else if (location) { + return allKeys.indexOf(location.key); + } else { + return -1; + } + } + + function updateLocation(newLocation) { + var current = getCurrent(); + + location = newLocation; + + if (location.action === _Actions.PUSH) { + allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]); + } else if (location.action === _Actions.REPLACE) { + allKeys[current] = location.key; + } + + changeListeners.forEach(function (listener) { + listener(location); + }); + } + + function listen(listener) { + changeListeners.push(listener); + + if (location) { + listener(location); + } else { + var _location = getCurrentLocation(); + allKeys = [_location.key]; + updateLocation(_location); + } + + return function () { + changeListeners = changeListeners.filter(function (item) { + return item !== listener; + }); + }; + } + + function confirmTransitionTo(location, callback) { + _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) { + _runTransitionHook2['default'](transitionHooks[index], location, function (result) { + if (result != null) { + done(result); + } else { + next(); + } + }); + }, function (message) { + if (getUserConfirmation && typeof message === 'string') { + getUserConfirmation(message, function (ok) { + callback(ok !== false); + }); + } else { + callback(message !== false); + } + }); + } + + var pendingLocation = undefined; + + function transitionTo(nextLocation) { + if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do. + + pendingLocation = nextLocation; + + confirmTransitionTo(nextLocation, function (ok) { + if (pendingLocation !== nextLocation) return; // Transition was interrupted. + + if (ok) { + // treat PUSH to current path like REPLACE to be consistent with browsers + if (nextLocation.action === _Actions.PUSH) { + var prevPath = createPath(location); + var nextPath = createPath(nextLocation); + + if (nextPath === prevPath && _deepEqual2['default'](location.state, nextLocation.state)) nextLocation.action = _Actions.REPLACE; + } + + if (finishTransition(nextLocation) !== false) updateLocation(nextLocation); + } else if (location && nextLocation.action === _Actions.POP) { + var prevIndex = allKeys.indexOf(location.key); + var nextIndex = allKeys.indexOf(nextLocation.key); + + if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL. + } + }); + } + + function push(location) { + transitionTo(createLocation(location, _Actions.PUSH, createKey())); + } + + function replace(location) { + transitionTo(createLocation(location, _Actions.REPLACE, createKey())); + } + + function goBack() { + go(-1); + } + + function goForward() { + go(1); + } + + function createKey() { + return createRandomKey(keyLength); + } + + function createPath(location) { + if (location == null || typeof location === 'string') return location; + + var pathname = location.pathname; + var search = location.search; + var hash = location.hash; + + var result = pathname; + + if (search) result += search; + + if (hash) result += hash; + + return result; + } + + function createHref(location) { + return createPath(location); + } + + function createLocation(location, action) { + var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2]; + + if (typeof action === 'object') { + false ? _warning2['default'](false, 'The state (2nd) argument to history.createLocation is deprecated; use a ' + 'location descriptor instead') : undefined; + + if (typeof location === 'string') location = _PathUtils.parsePath(location); + + location = _extends({}, location, { state: action }); + + action = key; + key = arguments[3] || createKey(); + } + + return _createLocation3['default'](location, action, key); + } + + // deprecated + function setState(state) { + if (location) { + updateLocationState(location, state); + updateLocation(location); + } else { + updateLocationState(getCurrentLocation(), state); + } + } + + function updateLocationState(location, state) { + location.state = _extends({}, location.state, state); + saveState(location.key, location.state); + } + + // deprecated + function registerTransitionHook(hook) { + if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook); + } + + // deprecated + function unregisterTransitionHook(hook) { + transitionHooks = transitionHooks.filter(function (item) { + return item !== hook; + }); + } + + // deprecated + function pushState(state, path) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + push(_extends({ state: state }, path)); + } + + // deprecated + function replaceState(state, path) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + replace(_extends({ state: state }, path)); + } + + return { + listenBefore: listenBefore, + listen: listen, + transitionTo: transitionTo, + push: push, + replace: replace, + go: go, + goBack: goBack, + goForward: goForward, + createKey: createKey, + createPath: createPath, + createHref: createHref, + createLocation: createLocation, + + setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'), + registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'), + unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'), + pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'), + replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead') + }; + } + + exports['default'] = createHistory; + module.exports = exports['default']; + +/***/ }, +/* 29 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _ExecutionEnvironment = __webpack_require__(10); + + var _PathUtils = __webpack_require__(7); + + var _runTransitionHook = __webpack_require__(17); + + var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); + + var _deprecate = __webpack_require__(16); + + var _deprecate2 = _interopRequireDefault(_deprecate); + + function useBasename(createHistory) { + return function () { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var basename = options.basename; + + var historyOptions = _objectWithoutProperties(options, ['basename']); + + var history = createHistory(historyOptions); + + // Automatically use the value of in HTML + // documents as basename if it's not explicitly given. + if (basename == null && _ExecutionEnvironment.canUseDOM) { + var base = document.getElementsByTagName('base')[0]; + + if (base) basename = _PathUtils.extractPath(base.href); + } + + function addBasename(location) { + if (basename && location.basename == null) { + if (location.pathname.indexOf(basename) === 0) { + location.pathname = location.pathname.substring(basename.length); + location.basename = basename; + + if (location.pathname === '') location.pathname = '/'; + } else { + location.basename = ''; + } + } + + return location; + } + + function prependBasename(location) { + if (!basename) return location; + + if (typeof location === 'string') location = _PathUtils.parsePath(location); + + var pname = location.pathname; + var normalizedBasename = basename.slice(-1) === '/' ? basename : basename + '/'; + var normalizedPathname = pname.charAt(0) === '/' ? pname.slice(1) : pname; + var pathname = normalizedBasename + normalizedPathname; + + return _extends({}, location, { + pathname: pathname + }); + } + + // Override all read methods with basename-aware versions. + function listenBefore(hook) { + return history.listenBefore(function (location, callback) { + _runTransitionHook2['default'](hook, addBasename(location), callback); + }); + } + + function listen(listener) { + return history.listen(function (location) { + listener(addBasename(location)); + }); + } + + // Override all write methods with basename-aware versions. + function push(location) { + history.push(prependBasename(location)); + } + + function replace(location) { + history.replace(prependBasename(location)); + } + + function createPath(location) { + return history.createPath(prependBasename(location)); + } + + function createHref(location) { + return history.createHref(prependBasename(location)); + } + + function createLocation(location) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return addBasename(history.createLocation.apply(history, [prependBasename(location)].concat(args))); + } + + // deprecated + function pushState(state, path) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + push(_extends({ state: state }, path)); + } + + // deprecated + function replaceState(state, path) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + replace(_extends({ state: state }, path)); + } + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen, + push: push, + replace: replace, + createPath: createPath, + createHref: createHref, + createLocation: createLocation, + + pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'), + replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead') + }); + }; + } + + exports['default'] = useBasename; + module.exports = exports['default']; + +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _PropTypes = __webpack_require__(6); + + /** + * A mixin that adds the "history" instance variable to components. + */ + var History = { + + contextTypes: { + history: _PropTypes.history + }, + + componentWillMount: function componentWillMount() { + false ? _routerWarning2['default'](false, 'the `History` mixin is deprecated, please access `context.router` with your own `contextTypes`. http://tiny.cc/router-historymixin') : undefined; + this.history = this.context.history; + } + + }; + + exports['default'] = History; + module.exports = exports['default']; + +/***/ }, +/* 31 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _Link = __webpack_require__(18); + + var _Link2 = _interopRequireDefault(_Link); + + /** + * An is used to link to an . + */ + var IndexLink = _react2['default'].createClass({ + displayName: 'IndexLink', + + render: function render() { + return _react2['default'].createElement(_Link2['default'], _extends({}, this.props, { onlyActiveOnIndex: true })); + } + + }); + + exports['default'] = IndexLink; + module.exports = exports['default']; + +/***/ }, +/* 32 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _Redirect = __webpack_require__(19); + + var _Redirect2 = _interopRequireDefault(_Redirect); + + var _PropTypes = __webpack_require__(6); + + var _React$PropTypes = _react2['default'].PropTypes; + var string = _React$PropTypes.string; + var object = _React$PropTypes.object; + + /** + * An is used to redirect from an indexRoute. + */ + var IndexRedirect = _react2['default'].createClass({ + displayName: 'IndexRedirect', + + statics: { + + createRouteFromReactElement: function createRouteFromReactElement(element, parentRoute) { + /* istanbul ignore else: sanity check */ + if (parentRoute) { + parentRoute.indexRoute = _Redirect2['default'].createRouteFromReactElement(element); + } else { + false ? _routerWarning2['default'](false, 'An does not make sense at the root of your route config') : undefined; + } + } + + }, + + propTypes: { + to: string.isRequired, + query: object, + state: object, + onEnter: _PropTypes.falsy, + children: _PropTypes.falsy + }, + + /* istanbul ignore next: sanity check */ + render: function render() { + true ? false ? _invariant2['default'](false, ' elements are for router configuration only and should not be rendered') : _invariant2['default'](false) : undefined; + } + + }); + + exports['default'] = IndexRedirect; + module.exports = exports['default']; + +/***/ }, +/* 33 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _RouteUtils = __webpack_require__(5); + + var _PropTypes = __webpack_require__(6); + + var func = _react2['default'].PropTypes.func; + + /** + * An is used to specify its parent's in + * a JSX route config. + */ + var IndexRoute = _react2['default'].createClass({ + displayName: 'IndexRoute', + + statics: { + + createRouteFromReactElement: function createRouteFromReactElement(element, parentRoute) { + /* istanbul ignore else: sanity check */ + if (parentRoute) { + parentRoute.indexRoute = _RouteUtils.createRouteFromReactElement(element); + } else { + false ? _routerWarning2['default'](false, 'An does not make sense at the root of your route config') : undefined; + } + } + + }, + + propTypes: { + path: _PropTypes.falsy, + component: _PropTypes.component, + components: _PropTypes.components, + getComponent: func, + getComponents: func + }, + + /* istanbul ignore next: sanity check */ + render: function render() { + true ? false ? _invariant2['default'](false, ' elements are for router configuration only and should not be rendered') : _invariant2['default'](false) : undefined; + } + + }); + + exports['default'] = IndexRoute; + module.exports = exports['default']; + +/***/ }, +/* 34 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var object = _react2['default'].PropTypes.object; + + /** + * The Lifecycle mixin adds the routerWillLeave lifecycle method to a + * component that may be used to cancel a transition or prompt the user + * for confirmation. + * + * On standard transitions, routerWillLeave receives a single argument: the + * location we're transitioning to. To cancel the transition, return false. + * To prompt the user for confirmation, return a prompt message (string). + * + * During the beforeunload event (assuming you're using the useBeforeUnload + * history enhancer), routerWillLeave does not receive a location object + * because it isn't possible for us to know the location we're transitioning + * to. In this case routerWillLeave must return a prompt message to prevent + * the user from closing the window/tab. + */ + var Lifecycle = { + + contextTypes: { + history: object.isRequired, + // Nested children receive the route as context, either + // set by the route component using the RouteContext mixin + // or by some other ancestor. + route: object + }, + + propTypes: { + // Route components receive the route object as a prop. + route: object + }, + + componentDidMount: function componentDidMount() { + false ? _routerWarning2['default'](false, 'the `Lifecycle` mixin is deprecated, please use `context.router.setRouteLeaveHook(route, hook)`. http://tiny.cc/router-lifecyclemixin') : undefined; + !this.routerWillLeave ? false ? _invariant2['default'](false, 'The Lifecycle mixin requires you to define a routerWillLeave method') : _invariant2['default'](false) : undefined; + + var route = this.props.route || this.context.route; + + !route ? false ? _invariant2['default'](false, 'The Lifecycle mixin must be used on either a) a or ' + 'b) a descendant of a that uses the RouteContext mixin') : _invariant2['default'](false) : undefined; + + this._unlistenBeforeLeavingRoute = this.context.history.listenBeforeLeavingRoute(route, this.routerWillLeave); + }, + + componentWillUnmount: function componentWillUnmount() { + if (this._unlistenBeforeLeavingRoute) this._unlistenBeforeLeavingRoute(); + } + + }; + + exports['default'] = Lifecycle; + module.exports = exports['default']; + +/***/ }, +/* 35 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _RouteUtils = __webpack_require__(5); + + var _PropTypes = __webpack_require__(6); + + var _React$PropTypes = _react2['default'].PropTypes; + var string = _React$PropTypes.string; + var func = _React$PropTypes.func; + + /** + * A is used to declare which components are rendered to the + * page when the URL matches a given pattern. + * + * Routes are arranged in a nested tree structure. When a new URL is + * requested, the tree is searched depth-first to find a route whose + * path matches the URL. When one is found, all routes in the tree + * that lead to it are considered "active" and their components are + * rendered into the DOM, nested in the same order as in the tree. + */ + var Route = _react2['default'].createClass({ + displayName: 'Route', + + statics: { + createRouteFromReactElement: _RouteUtils.createRouteFromReactElement + }, + + propTypes: { + path: string, + component: _PropTypes.component, + components: _PropTypes.components, + getComponent: func, + getComponents: func + }, + + /* istanbul ignore next: sanity check */ + render: function render() { + true ? false ? _invariant2['default'](false, ' elements are for router configuration only and should not be rendered') : _invariant2['default'](false) : undefined; + } + + }); + + exports['default'] = Route; + module.exports = exports['default']; + +/***/ }, +/* 36 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var object = _react2['default'].PropTypes.object; + + /** + * The RouteContext mixin provides a convenient way for route + * components to set the route in context. This is needed for + * routes that render elements that want to use the Lifecycle + * mixin to prevent transitions. + */ + var RouteContext = { + + propTypes: { + route: object.isRequired + }, + + childContextTypes: { + route: object.isRequired + }, + + getChildContext: function getChildContext() { + return { + route: this.props.route + }; + }, + + componentWillMount: function componentWillMount() { + false ? _routerWarning2['default'](false, 'The `RouteContext` mixin is deprecated. You can provide `this.props.route` on context with your own `contextTypes`. http://tiny.cc/router-routecontextmixin') : undefined; + } + + }; + + exports['default'] = RouteContext; + module.exports = exports['default']; + +/***/ }, +/* 37 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _historyLibCreateHashHistory = __webpack_require__(27); + + var _historyLibCreateHashHistory2 = _interopRequireDefault(_historyLibCreateHashHistory); + + var _historyLibUseQueries = __webpack_require__(11); + + var _historyLibUseQueries2 = _interopRequireDefault(_historyLibUseQueries); + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _createTransitionManager = __webpack_require__(14); + + var _createTransitionManager2 = _interopRequireDefault(_createTransitionManager); + + var _PropTypes = __webpack_require__(6); + + var _RouterContext = __webpack_require__(13); + + var _RouterContext2 = _interopRequireDefault(_RouterContext); + + var _RouteUtils = __webpack_require__(5); + + var _RouterUtils = __webpack_require__(20); + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + function isDeprecatedHistory(history) { + return !history || !history.__v2_compatible__; + } + + var _React$PropTypes = _react2['default'].PropTypes; + var func = _React$PropTypes.func; + var object = _React$PropTypes.object; + + /** + * A is a high-level API for automatically setting up + * a router that renders a with all the props + * it needs each time the URL changes. + */ + var Router = _react2['default'].createClass({ + displayName: 'Router', + + propTypes: { + history: object, + children: _PropTypes.routes, + routes: _PropTypes.routes, // alias for children + render: func, + createElement: func, + onError: func, + onUpdate: func, + + // PRIVATE: For client-side rehydration of server match. + matchContext: object + }, + + getDefaultProps: function getDefaultProps() { + return { + render: function render(props) { + return _react2['default'].createElement(_RouterContext2['default'], props); + } + }; + }, + + getInitialState: function getInitialState() { + return { + location: null, + routes: null, + params: null, + components: null + }; + }, + + handleError: function handleError(error) { + if (this.props.onError) { + this.props.onError.call(this, error); + } else { + // Throw errors by default so we don't silently swallow them! + throw error; // This error probably occurred in getChildRoutes or getComponents. + } + }, + + componentWillMount: function componentWillMount() { + var _this = this; + + var _props = this.props; + var parseQueryString = _props.parseQueryString; + var stringifyQuery = _props.stringifyQuery; + + false ? _routerWarning2['default'](!(parseQueryString || stringifyQuery), '`parseQueryString` and `stringifyQuery` are deprecated. Please create a custom history. http://tiny.cc/router-customquerystring') : undefined; + + var _createRouterObjects = this.createRouterObjects(); + + var history = _createRouterObjects.history; + var transitionManager = _createRouterObjects.transitionManager; + var router = _createRouterObjects.router; + + this._unlisten = transitionManager.listen(function (error, state) { + if (error) { + _this.handleError(error); + } else { + _this.setState(state, _this.props.onUpdate); + } + }); + + this.history = history; + this.router = router; + }, + + createRouterObjects: function createRouterObjects() { + var matchContext = this.props.matchContext; + + if (matchContext) { + return matchContext; + } + + var history = this.props.history; + var _props2 = this.props; + var routes = _props2.routes; + var children = _props2.children; + + if (isDeprecatedHistory(history)) { + history = this.wrapDeprecatedHistory(history); + } + + var transitionManager = _createTransitionManager2['default'](history, _RouteUtils.createRoutes(routes || children)); + var router = _RouterUtils.createRouterObject(history, transitionManager); + var routingHistory = _RouterUtils.createRoutingHistory(history, transitionManager); + + return { history: routingHistory, transitionManager: transitionManager, router: router }; + }, + + wrapDeprecatedHistory: function wrapDeprecatedHistory(history) { + var _props3 = this.props; + var parseQueryString = _props3.parseQueryString; + var stringifyQuery = _props3.stringifyQuery; + + var createHistory = undefined; + if (history) { + false ? _routerWarning2['default'](false, 'It appears you have provided a deprecated history object to ``, please use a history provided by ' + 'React Router with `import { browserHistory } from \'react-router\'` or `import { hashHistory } from \'react-router\'`. ' + 'If you are using a custom history please create it with `useRouterHistory`, see http://tiny.cc/router-usinghistory for details.') : undefined; + createHistory = function () { + return history; + }; + } else { + false ? _routerWarning2['default'](false, '`Router` no longer defaults the history prop to hash history. Please use the `hashHistory` singleton instead. http://tiny.cc/router-defaulthistory') : undefined; + createHistory = _historyLibCreateHashHistory2['default']; + } + + return _historyLibUseQueries2['default'](createHistory)({ parseQueryString: parseQueryString, stringifyQuery: stringifyQuery }); + }, + + /* istanbul ignore next: sanity check */ + componentWillReceiveProps: function componentWillReceiveProps(nextProps) { + false ? _routerWarning2['default'](nextProps.history === this.props.history, 'You cannot change ; it will be ignored') : undefined; + + false ? _routerWarning2['default']((nextProps.routes || nextProps.children) === (this.props.routes || this.props.children), 'You cannot change ; it will be ignored') : undefined; + }, + + componentWillUnmount: function componentWillUnmount() { + if (this._unlisten) this._unlisten(); + }, + + render: function render() { + var _state = this.state; + var location = _state.location; + var routes = _state.routes; + var params = _state.params; + var components = _state.components; + var _props4 = this.props; + var createElement = _props4.createElement; + var render = _props4.render; + + var props = _objectWithoutProperties(_props4, ['createElement', 'render']); + + if (location == null) return null; // Async match + + // Only forward non-Router-specific props to routing context, as those are + // the only ones that might be custom routing context props. + Object.keys(Router.propTypes).forEach(function (propType) { + return delete props[propType]; + }); + + return render(_extends({}, props, { + history: this.history, + router: this.router, + location: location, + routes: routes, + params: params, + components: components, + createElement: createElement + })); + } + + }); + + exports['default'] = Router; + module.exports = exports['default']; + +/***/ }, +/* 38 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _RouterContext = __webpack_require__(13); + + var _RouterContext2 = _interopRequireDefault(_RouterContext); + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var RoutingContext = _react2['default'].createClass({ + displayName: 'RoutingContext', + + componentWillMount: function componentWillMount() { + false ? _routerWarning2['default'](false, '`RoutingContext` has been renamed to `RouterContext`. Please use `import { RouterContext } from \'react-router\'`. http://tiny.cc/router-routercontext') : undefined; + }, + + render: function render() { + return _react2['default'].createElement(_RouterContext2['default'], this.props); + } + }); + + exports['default'] = RoutingContext; + module.exports = exports['default']; + +/***/ }, +/* 39 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.runEnterHooks = runEnterHooks; + exports.runLeaveHooks = runLeaveHooks; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _AsyncUtils = __webpack_require__(12); + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + function createEnterHook(hook, route) { + return function (a, b, callback) { + hook.apply(route, arguments); + + if (hook.length < 3) { + // Assume hook executes synchronously and + // automatically call the callback. + callback(); + } + }; + } + + function getEnterHooks(routes) { + return routes.reduce(function (hooks, route) { + if (route.onEnter) hooks.push(createEnterHook(route.onEnter, route)); + + return hooks; + }, []); + } + + /** + * Runs all onEnter hooks in the given array of routes in order + * with onEnter(nextState, replace, callback) and calls + * callback(error, redirectInfo) when finished. The first hook + * to use replace short-circuits the loop. + * + * If a hook needs to run asynchronously, it may use the callback + * function. However, doing so will cause the transition to pause, + * which could lead to a non-responsive UI if the hook is slow. + */ + + function runEnterHooks(routes, nextState, callback) { + var hooks = getEnterHooks(routes); + + if (!hooks.length) { + callback(); + return; + } + + var redirectInfo = undefined; + function replace(location, deprecatedPathname, deprecatedQuery) { + if (deprecatedPathname) { + false ? _routerWarning2['default'](false, '`replaceState(state, pathname, query) is deprecated; use `replace(location)` with a location descriptor instead. http://tiny.cc/router-isActivedeprecated') : undefined; + redirectInfo = { + pathname: deprecatedPathname, + query: deprecatedQuery, + state: location + }; + + return; + } + + redirectInfo = location; + } + + _AsyncUtils.loopAsync(hooks.length, function (index, next, done) { + hooks[index](nextState, replace, function (error) { + if (error || redirectInfo) { + done(error, redirectInfo); // No need to continue. + } else { + next(); + } + }); + }, callback); + } + + /** + * Runs all onLeave hooks in the given array of routes in order. + */ + + function runLeaveHooks(routes) { + for (var i = 0, len = routes.length; i < len; ++i) { + if (routes[i].onLeave) routes[i].onLeave.call(routes[i]); + } + } + +/***/ }, +/* 40 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _historyLibCreateBrowserHistory = __webpack_require__(53); + + var _historyLibCreateBrowserHistory2 = _interopRequireDefault(_historyLibCreateBrowserHistory); + + var _createRouterHistory = __webpack_require__(22); + + var _createRouterHistory2 = _interopRequireDefault(_createRouterHistory); + + exports['default'] = _createRouterHistory2['default'](_historyLibCreateBrowserHistory2['default']); + module.exports = exports['default']; + +/***/ }, +/* 41 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _PatternUtils = __webpack_require__(8); + + function routeParamsChanged(route, prevState, nextState) { + if (!route.path) return false; + + var paramNames = _PatternUtils.getParamNames(route.path); + + return paramNames.some(function (paramName) { + return prevState.params[paramName] !== nextState.params[paramName]; + }); + } + + /** + * Returns an object of { leaveRoutes, enterRoutes } determined by + * the change from prevState to nextState. We leave routes if either + * 1) they are not in the next state or 2) they are in the next state + * but their params have changed (i.e. /users/123 => /users/456). + * + * leaveRoutes are ordered starting at the leaf route of the tree + * we're leaving up to the common parent route. enterRoutes are ordered + * from the top of the tree we're entering down to the leaf route. + */ + function computeChangedRoutes(prevState, nextState) { + var prevRoutes = prevState && prevState.routes; + var nextRoutes = nextState.routes; + + var leaveRoutes = undefined, + enterRoutes = undefined; + if (prevRoutes) { + (function () { + var parentIsLeaving = false; + leaveRoutes = prevRoutes.filter(function (route) { + if (parentIsLeaving) { + return true; + } else { + var isLeaving = nextRoutes.indexOf(route) === -1 || routeParamsChanged(route, prevState, nextState); + if (isLeaving) parentIsLeaving = true; + return isLeaving; + } + }); + + // onLeave hooks start at the leaf route. + leaveRoutes.reverse(); + + enterRoutes = nextRoutes.filter(function (route) { + return prevRoutes.indexOf(route) === -1 || leaveRoutes.indexOf(route) !== -1; + }); + })(); + } else { + leaveRoutes = []; + enterRoutes = nextRoutes; + } + + return { + leaveRoutes: leaveRoutes, + enterRoutes: enterRoutes + }; + } + + exports['default'] = computeChangedRoutes; + module.exports = exports['default']; + +/***/ }, +/* 42 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _AsyncUtils = __webpack_require__(12); + + function getComponentsForRoute(location, route, callback) { + if (route.component || route.components) { + callback(null, route.component || route.components); + } else if (route.getComponent) { + route.getComponent(location, callback); + } else if (route.getComponents) { + route.getComponents(location, callback); + } else { + callback(); + } + } + + /** + * Asynchronously fetches all components needed for the given router + * state and calls callback(error, components) when finished. + * + * Note: This operation may finish synchronously if no routes have an + * asynchronous getComponents method. + */ + function getComponents(nextState, callback) { + _AsyncUtils.mapAsync(nextState.routes, function (route, index, callback) { + getComponentsForRoute(nextState.location, route, callback); + }, callback); + } + + exports['default'] = getComponents; + module.exports = exports['default']; + +/***/ }, +/* 43 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _PatternUtils = __webpack_require__(8); + + /** + * Extracts an object of params the given route cares about from + * the given params object. + */ + function getRouteParams(route, params) { + var routeParams = {}; + + if (!route.path) return routeParams; + + var paramNames = _PatternUtils.getParamNames(route.path); + + for (var p in params) { + if (params.hasOwnProperty(p) && paramNames.indexOf(p) !== -1) routeParams[p] = params[p]; + }return routeParams; + } + + exports['default'] = getRouteParams; + module.exports = exports['default']; + +/***/ }, +/* 44 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _historyLibCreateHashHistory = __webpack_require__(27); + + var _historyLibCreateHashHistory2 = _interopRequireDefault(_historyLibCreateHashHistory); + + var _createRouterHistory = __webpack_require__(22); + + var _createRouterHistory2 = _interopRequireDefault(_createRouterHistory); + + exports['default'] = _createRouterHistory2['default'](_historyLibCreateHashHistory2['default']); + module.exports = exports['default']; + +/***/ }, +/* 45 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports['default'] = isActive; + + var _PatternUtils = __webpack_require__(8); + + function deepEqual(a, b) { + if (a == b) return true; + + if (a == null || b == null) return false; + + if (Array.isArray(a)) { + return Array.isArray(b) && a.length === b.length && a.every(function (item, index) { + return deepEqual(item, b[index]); + }); + } + + if (typeof a === 'object') { + for (var p in a) { + if (!a.hasOwnProperty(p)) { + continue; + } + + if (a[p] === undefined) { + if (b[p] !== undefined) { + return false; + } + } else if (!b.hasOwnProperty(p)) { + return false; + } else if (!deepEqual(a[p], b[p])) { + return false; + } + } + + return true; + } + + return String(a) === String(b); + } + + function paramsAreActive(paramNames, paramValues, activeParams) { + // FIXME: This doesn't work on repeated params in activeParams. + return paramNames.every(function (paramName, index) { + return String(paramValues[index]) === String(activeParams[paramName]); + }); + } + + function getMatchingRouteIndex(pathname, activeRoutes, activeParams) { + var remainingPathname = pathname, + paramNames = [], + paramValues = []; + + for (var i = 0, len = activeRoutes.length; i < len; ++i) { + var route = activeRoutes[i]; + var pattern = route.path || ''; + + if (pattern.charAt(0) === '/') { + remainingPathname = pathname; + paramNames = []; + paramValues = []; + } + + if (remainingPathname !== null) { + var matched = _PatternUtils.matchPattern(pattern, remainingPathname); + remainingPathname = matched.remainingPathname; + paramNames = [].concat(paramNames, matched.paramNames); + paramValues = [].concat(paramValues, matched.paramValues); + } + + if (remainingPathname === '' && route.path && paramsAreActive(paramNames, paramValues, activeParams)) return i; + } + + return null; + } + + /** + * Returns true if the given pathname matches the active routes + * and params. + */ + function routeIsActive(pathname, routes, params, indexOnly) { + var i = getMatchingRouteIndex(pathname, routes, params); + + if (i === null) { + // No match. + return false; + } else if (!indexOnly) { + // Any match is good enough. + return true; + } + + // If any remaining routes past the match index have paths, then we can't + // be on the index route. + return routes.slice(i + 1).every(function (route) { + return !route.path; + }); + } + + /** + * Returns true if all key/value pairs in the given query are + * currently active. + */ + function queryIsActive(query, activeQuery) { + if (activeQuery == null) return query == null; + + if (query == null) return true; + + return deepEqual(query, activeQuery); + } + + /** + * Returns true if a to the given pathname/query combination is + * currently active. + */ + + function isActive(_ref, indexOnly, currentLocation, routes, params) { + var pathname = _ref.pathname; + var query = _ref.query; + + if (currentLocation == null) return false; + + if (!routeIsActive(pathname, routes, params, indexOnly)) return false; + + return queryIsActive(query, currentLocation.query); + } + + module.exports = exports['default']; + +/***/ }, +/* 46 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _createMemoryHistory = __webpack_require__(21); + + var _createMemoryHistory2 = _interopRequireDefault(_createMemoryHistory); + + var _createTransitionManager = __webpack_require__(14); + + var _createTransitionManager2 = _interopRequireDefault(_createTransitionManager); + + var _RouteUtils = __webpack_require__(5); + + var _RouterUtils = __webpack_require__(20); + + /** + * A high-level API to be used for server-side rendering. + * + * This function matches a location to a set of routes and calls + * callback(error, redirectLocation, renderProps) when finished. + * + * Note: You probably don't want to use this in a browser unless you're using + * server-side rendering with async routes. + */ + function match(_ref, callback) { + var history = _ref.history; + var routes = _ref.routes; + var location = _ref.location; + + var options = _objectWithoutProperties(_ref, ['history', 'routes', 'location']); + + !(history || location) ? false ? _invariant2['default'](false, 'match needs a history or a location') : _invariant2['default'](false) : undefined; + + history = history ? history : _createMemoryHistory2['default'](options); + var transitionManager = _createTransitionManager2['default'](history, _RouteUtils.createRoutes(routes)); + + var unlisten = undefined; + + if (location) { + // Allow match({ location: '/the/path', ... }) + location = history.createLocation(location); + } else { + // Pick up the location from the history via synchronous history.listen + // call if needed. + unlisten = history.listen(function (historyLocation) { + location = historyLocation; + }); + } + + var router = _RouterUtils.createRouterObject(history, transitionManager); + history = _RouterUtils.createRoutingHistory(history, transitionManager); + + transitionManager.match(location, function (error, redirectLocation, nextState) { + callback(error, redirectLocation, nextState && _extends({}, nextState, { + history: history, + router: router, + matchContext: { history: history, transitionManager: transitionManager, router: router } + })); + + // Defer removing the listener to here to prevent DOM histories from having + // to unwind DOM event listeners unnecessarily, in case callback renders a + // and attaches another history listener. + if (unlisten) { + unlisten(); + } + }); + } + + exports['default'] = match; + module.exports = exports['default']; + +/***/ }, +/* 47 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _AsyncUtils = __webpack_require__(12); + + var _PatternUtils = __webpack_require__(8); + + var _RouteUtils = __webpack_require__(5); + + function getChildRoutes(route, location, callback) { + if (route.childRoutes) { + return [null, route.childRoutes]; + } + if (!route.getChildRoutes) { + return []; + } + + var sync = true, + result = undefined; + + route.getChildRoutes(location, function (error, childRoutes) { + childRoutes = !error && _RouteUtils.createRoutes(childRoutes); + if (sync) { + result = [error, childRoutes]; + return; + } + + callback(error, childRoutes); + }); + + sync = false; + return result; // Might be undefined. + } + + function getIndexRoute(route, location, callback) { + if (route.indexRoute) { + callback(null, route.indexRoute); + } else if (route.getIndexRoute) { + route.getIndexRoute(location, function (error, indexRoute) { + callback(error, !error && _RouteUtils.createRoutes(indexRoute)[0]); + }); + } else if (route.childRoutes) { + (function () { + var pathless = route.childRoutes.filter(function (obj) { + return !obj.hasOwnProperty('path'); + }); + + _AsyncUtils.loopAsync(pathless.length, function (index, next, done) { + getIndexRoute(pathless[index], location, function (error, indexRoute) { + if (error || indexRoute) { + var routes = [pathless[index]].concat(Array.isArray(indexRoute) ? indexRoute : [indexRoute]); + done(error, routes); + } else { + next(); + } + }); + }, function (err, routes) { + callback(null, routes); + }); + })(); + } else { + callback(); + } + } + + function assignParams(params, paramNames, paramValues) { + return paramNames.reduce(function (params, paramName, index) { + var paramValue = paramValues && paramValues[index]; + + if (Array.isArray(params[paramName])) { + params[paramName].push(paramValue); + } else if (paramName in params) { + params[paramName] = [params[paramName], paramValue]; + } else { + params[paramName] = paramValue; + } + + return params; + }, params); + } + + function createParams(paramNames, paramValues) { + return assignParams({}, paramNames, paramValues); + } + + function matchRouteDeep(route, location, remainingPathname, paramNames, paramValues, callback) { + var pattern = route.path || ''; + + if (pattern.charAt(0) === '/') { + remainingPathname = location.pathname; + paramNames = []; + paramValues = []; + } + + if (remainingPathname !== null) { + var matched = _PatternUtils.matchPattern(pattern, remainingPathname); + remainingPathname = matched.remainingPathname; + paramNames = [].concat(paramNames, matched.paramNames); + paramValues = [].concat(paramValues, matched.paramValues); + + if (remainingPathname === '' && route.path) { + var _ret2 = (function () { + var match = { + routes: [route], + params: createParams(paramNames, paramValues) + }; + + getIndexRoute(route, location, function (error, indexRoute) { + if (error) { + callback(error); + } else { + if (Array.isArray(indexRoute)) { + var _match$routes; + + false ? _routerWarning2['default'](indexRoute.every(function (route) { + return !route.path; + }), 'Index routes should not have paths') : undefined; + (_match$routes = match.routes).push.apply(_match$routes, indexRoute); + } else if (indexRoute) { + false ? _routerWarning2['default'](!indexRoute.path, 'Index routes should not have paths') : undefined; + match.routes.push(indexRoute); + } + + callback(null, match); + } + }); + return { + v: undefined + }; + })(); + + if (typeof _ret2 === 'object') return _ret2.v; + } + } + + if (remainingPathname != null || route.childRoutes) { + // Either a) this route matched at least some of the path or b) + // we don't have to load this route's children asynchronously. In + // either case continue checking for matches in the subtree. + var onChildRoutes = function onChildRoutes(error, childRoutes) { + if (error) { + callback(error); + } else if (childRoutes) { + // Check the child routes to see if any of them match. + matchRoutes(childRoutes, location, function (error, match) { + if (error) { + callback(error); + } else if (match) { + // A child route matched! Augment the match and pass it up the stack. + match.routes.unshift(route); + callback(null, match); + } else { + callback(); + } + }, remainingPathname, paramNames, paramValues); + } else { + callback(); + } + }; + + var result = getChildRoutes(route, location, onChildRoutes); + if (result) { + onChildRoutes.apply(undefined, result); + } + } else { + callback(); + } + } + + /** + * Asynchronously matches the given location to a set of routes and calls + * callback(error, state) when finished. The state object will have the + * following properties: + * + * - routes An array of routes that matched, in hierarchical order + * - params An object of URL parameters + * + * Note: This operation may finish synchronously if no routes have an + * asynchronous getChildRoutes method. + */ + function matchRoutes(routes, location, callback) { + var remainingPathname = arguments.length <= 3 || arguments[3] === undefined ? location.pathname : arguments[3]; + var paramNames = arguments.length <= 4 || arguments[4] === undefined ? [] : arguments[4]; + var paramValues = arguments.length <= 5 || arguments[5] === undefined ? [] : arguments[5]; + return (function () { + _AsyncUtils.loopAsync(routes.length, function (index, next, done) { + matchRouteDeep(routes[index], location, remainingPathname, paramNames, paramValues, function (error, match) { + if (error || match) { + done(error, match); + } else { + next(); + } + }); + }, callback); + })(); + } + + exports['default'] = matchRoutes; + module.exports = exports['default']; + +/***/ }, +/* 48 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _historyLibUseQueries = __webpack_require__(11); + + var _historyLibUseQueries2 = _interopRequireDefault(_historyLibUseQueries); + + var _createTransitionManager = __webpack_require__(14); + + var _createTransitionManager2 = _interopRequireDefault(_createTransitionManager); + + var _routerWarning = __webpack_require__(1); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + /** + * Returns a new createHistory function that may be used to create + * history objects that know about routing. + * + * Enhances history objects with the following methods: + * + * - listen((error, nextState) => {}) + * - listenBeforeLeavingRoute(route, (nextLocation) => {}) + * - match(location, (error, redirectLocation, nextState) => {}) + * - isActive(pathname, query, indexOnly=false) + */ + function useRoutes(createHistory) { + false ? _routerWarning2['default'](false, '`useRoutes` is deprecated. Please use `createTransitionManager` instead.') : undefined; + + return function () { + var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + var routes = _ref.routes; + + var options = _objectWithoutProperties(_ref, ['routes']); + + var history = _historyLibUseQueries2['default'](createHistory)(options); + var transitionManager = _createTransitionManager2['default'](history, routes); + return _extends({}, history, transitionManager); + }; + } + + exports['default'] = useRoutes; + module.exports = exports['default']; + +/***/ }, +/* 49 */ +/***/ function(module, exports, __webpack_require__) { + + var pSlice = Array.prototype.slice; + var objectKeys = __webpack_require__(51); + var isArguments = __webpack_require__(50); + + var deepEqual = module.exports = function (actual, expected, opts) { + if (!opts) opts = {}; + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (actual instanceof Date && expected instanceof Date) { + return actual.getTime() === expected.getTime(); + + // 7.3. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') { + return opts.strict ? actual === expected : actual == expected; + + // 7.4. For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected, opts); + } + } + + function isUndefinedOrNull(value) { + return value === null || value === undefined; + } + + function isBuffer (x) { + if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false; + if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { + return false; + } + if (x.length > 0 && typeof x[0] !== 'number') return false; + return true; + } + + function objEquiv(a, b, opts) { + var i, key; + if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + //~~~I've managed to break Object.keys through screwy arguments passing. + // Converting to array solves the problem. + if (isArguments(a)) { + if (!isArguments(b)) { + return false; + } + a = pSlice.call(a); + b = pSlice.call(b); + return deepEqual(a, b, opts); + } + if (isBuffer(a)) { + if (!isBuffer(b)) { + return false; + } + if (a.length !== b.length) return false; + for (i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false; + } + return true; + } + try { + var ka = objectKeys(a), + kb = objectKeys(b); + } catch (e) {//happens when one is a string literal and the other isn't + return false; + } + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!deepEqual(a[key], b[key], opts)) return false; + } + return typeof a === typeof b; + } + + +/***/ }, +/* 50 */ +/***/ function(module, exports) { + + var supportsArgumentsClass = (function(){ + return Object.prototype.toString.call(arguments) + })() == '[object Arguments]'; + + exports = module.exports = supportsArgumentsClass ? supported : unsupported; + + exports.supported = supported; + function supported(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; + }; + + exports.unsupported = unsupported; + function unsupported(object){ + return object && + typeof object == 'object' && + typeof object.length == 'number' && + Object.prototype.hasOwnProperty.call(object, 'callee') && + !Object.prototype.propertyIsEnumerable.call(object, 'callee') || + false; + }; + + +/***/ }, +/* 51 */ +/***/ function(module, exports) { + + exports = module.exports = typeof Object.keys === 'function' + ? Object.keys : shim; + + exports.shim = shim; + function shim (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; + } + + +/***/ }, +/* 52 */ +/***/ function(module, exports) { + + "use strict"; + + exports.__esModule = true; + exports.loopAsync = loopAsync; + + function loopAsync(turns, work, callback) { + var currentTurn = 0; + var isDone = false; + + function done() { + isDone = true; + callback.apply(this, arguments); + } + + function next() { + if (isDone) return; + + if (currentTurn < turns) { + work.call(this, currentTurn++, next, done); + } else { + done.apply(this, arguments); + } + } + + next(); + } + +/***/ }, +/* 53 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _Actions = __webpack_require__(9); + + var _PathUtils = __webpack_require__(7); + + var _ExecutionEnvironment = __webpack_require__(10); + + var _DOMUtils = __webpack_require__(15); + + var _DOMStateStorage = __webpack_require__(25); + + var _createDOMHistory = __webpack_require__(26); + + var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory); + + /** + * Creates and returns a history object that uses HTML5's history API + * (pushState, replaceState, and the popstate event) to manage history. + * This is the recommended method of managing history in browsers because + * it provides the cleanest URLs. + * + * Note: In browsers that do not support the HTML5 history API full + * page reloads will be used to preserve URLs. + */ + function createBrowserHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + !_ExecutionEnvironment.canUseDOM ? false ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined; + + var forceRefresh = options.forceRefresh; + + var isSupported = _DOMUtils.supportsHistory(); + var useRefresh = !isSupported || forceRefresh; + + function getCurrentLocation(historyState) { + historyState = historyState || window.history.state || {}; + + var path = _DOMUtils.getWindowPath(); + var _historyState = historyState; + var key = _historyState.key; + + var state = undefined; + if (key) { + state = _DOMStateStorage.readState(key); + } else { + state = null; + key = history.createKey(); + + if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null, path); + } + + var location = _PathUtils.parsePath(path); + + return history.createLocation(_extends({}, location, { state: state }), undefined, key); + } + + function startPopStateListener(_ref) { + var transitionTo = _ref.transitionTo; + + function popStateListener(event) { + if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit. + + transitionTo(getCurrentLocation(event.state)); + } + + _DOMUtils.addEventListener(window, 'popstate', popStateListener); + + return function () { + _DOMUtils.removeEventListener(window, 'popstate', popStateListener); + }; + } + + function finishTransition(location) { + var basename = location.basename; + var pathname = location.pathname; + var search = location.search; + var hash = location.hash; + var state = location.state; + var action = location.action; + var key = location.key; + + if (action === _Actions.POP) return; // Nothing to do. + + _DOMStateStorage.saveState(key, state); + + var path = (basename || '') + pathname + search + hash; + var historyState = { + key: key + }; + + if (action === _Actions.PUSH) { + if (useRefresh) { + window.location.href = path; + return false; // Prevent location update. + } else { + window.history.pushState(historyState, null, path); + } + } else { + // REPLACE + if (useRefresh) { + window.location.replace(path); + return false; // Prevent location update. + } else { + window.history.replaceState(historyState, null, path); + } + } + } + + var history = _createDOMHistory2['default'](_extends({}, options, { + getCurrentLocation: getCurrentLocation, + finishTransition: finishTransition, + saveState: _DOMStateStorage.saveState + })); + + var listenerCount = 0, + stopPopStateListener = undefined; + + function listenBefore(listener) { + if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); + + var unlisten = history.listenBefore(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopPopStateListener(); + }; + } + + function listen(listener) { + if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); + + var unlisten = history.listen(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopPopStateListener(); + }; + } + + // deprecated + function registerTransitionHook(hook) { + if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); + + history.registerTransitionHook(hook); + } + + // deprecated + function unregisterTransitionHook(hook) { + history.unregisterTransitionHook(hook); + + if (--listenerCount === 0) stopPopStateListener(); + } + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen, + registerTransitionHook: registerTransitionHook, + unregisterTransitionHook: unregisterTransitionHook + }); + } + + exports['default'] = createBrowserHistory; + module.exports = exports['default']; + +/***/ }, +/* 54 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(4); + + var _warning2 = _interopRequireDefault(_warning); + + var _Actions = __webpack_require__(9); + + var _PathUtils = __webpack_require__(7); + + function createLocation() { + var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0]; + var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1]; + var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; + + var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; + + if (typeof location === 'string') location = _PathUtils.parsePath(location); + + if (typeof action === 'object') { + false ? _warning2['default'](false, 'The state (2nd) argument to createLocation is deprecated; use a ' + 'location descriptor instead') : undefined; + + location = _extends({}, location, { state: action }); + + action = key || _Actions.POP; + key = _fourthArg; + } + + var pathname = location.pathname || '/'; + var search = location.search || ''; + var hash = location.hash || ''; + var state = location.state || null; + + return { + pathname: pathname, + search: search, + hash: hash, + state: state, + action: action, + key: key + }; + } + + exports['default'] = createLocation; + module.exports = exports['default']; + +/***/ }, +/* 55 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(4); + + var _warning2 = _interopRequireDefault(_warning); + + var _invariant = __webpack_require__(3); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _PathUtils = __webpack_require__(7); + + var _Actions = __webpack_require__(9); + + var _createHistory = __webpack_require__(28); + + var _createHistory2 = _interopRequireDefault(_createHistory); + + function createStateStorage(entries) { + return entries.filter(function (entry) { + return entry.state; + }).reduce(function (memo, entry) { + memo[entry.key] = entry.state; + return memo; + }, {}); + } + + function createMemoryHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + if (Array.isArray(options)) { + options = { entries: options }; + } else if (typeof options === 'string') { + options = { entries: [options] }; + } + + var history = _createHistory2['default'](_extends({}, options, { + getCurrentLocation: getCurrentLocation, + finishTransition: finishTransition, + saveState: saveState, + go: go + })); + + var _options = options; + var entries = _options.entries; + var current = _options.current; + + if (typeof entries === 'string') { + entries = [entries]; + } else if (!Array.isArray(entries)) { + entries = ['/']; + } + + entries = entries.map(function (entry) { + var key = history.createKey(); + + if (typeof entry === 'string') return { pathname: entry, key: key }; + + if (typeof entry === 'object' && entry) return _extends({}, entry, { key: key }); + + true ? false ? _invariant2['default'](false, 'Unable to create history entry from %s', entry) : _invariant2['default'](false) : undefined; + }); + + if (current == null) { + current = entries.length - 1; + } else { + !(current >= 0 && current < entries.length) ? false ? _invariant2['default'](false, 'Current index must be >= 0 and < %s, was %s', entries.length, current) : _invariant2['default'](false) : undefined; + } + + var storage = createStateStorage(entries); + + function saveState(key, state) { + storage[key] = state; + } + + function readState(key) { + return storage[key]; + } + + function getCurrentLocation() { + var entry = entries[current]; + var key = entry.key; + var basename = entry.basename; + var pathname = entry.pathname; + var search = entry.search; + + var path = (basename || '') + pathname + (search || ''); + + var state = undefined; + if (key) { + state = readState(key); + } else { + state = null; + key = history.createKey(); + entry.key = key; + } + + var location = _PathUtils.parsePath(path); + + return history.createLocation(_extends({}, location, { state: state }), undefined, key); + } + + function canGo(n) { + var index = current + n; + return index >= 0 && index < entries.length; + } + + function go(n) { + if (n) { + if (!canGo(n)) { + false ? _warning2['default'](false, 'Cannot go(%s) there is not enough history', n) : undefined; + return; + } + + current += n; + + var currentLocation = getCurrentLocation(); + + // change action to POP + history.transitionTo(_extends({}, currentLocation, { action: _Actions.POP })); + } + } + + function finishTransition(location) { + switch (location.action) { + case _Actions.PUSH: + current += 1; + + // if we are not on the top of stack + // remove rest and push new + if (current < entries.length) entries.splice(current); + + entries.push(location); + saveState(location.key, location.state); + break; + case _Actions.REPLACE: + entries[current] = location; + saveState(location.key, location.state); + break; + } + } + + return history; + } + + exports['default'] = createMemoryHistory; + module.exports = exports['default']; + +/***/ }, +/* 56 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var strictUriEncode = __webpack_require__(57); + + exports.extract = function (str) { + return str.split('?')[1] || ''; + }; + + exports.parse = function (str) { + if (typeof str !== 'string') { + return {}; + } + + str = str.trim().replace(/^(\?|#|&)/, ''); + + if (!str) { + return {}; + } + + return str.split('&').reduce(function (ret, param) { + var parts = param.replace(/\+/g, ' ').split('='); + // Firefox (pre 40) decodes `%3D` to `=` + // https://github.com/sindresorhus/query-string/pull/37 + var key = parts.shift(); + var val = parts.length > 0 ? parts.join('=') : undefined; + + key = decodeURIComponent(key); + + // missing `=` should be `null`: + // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters + val = val === undefined ? null : decodeURIComponent(val); + + if (!ret.hasOwnProperty(key)) { + ret[key] = val; + } else if (Array.isArray(ret[key])) { + ret[key].push(val); + } else { + ret[key] = [ret[key], val]; + } + + return ret; + }, {}); + }; + + exports.stringify = function (obj) { + return obj ? Object.keys(obj).sort().map(function (key) { + var val = obj[key]; + + if (val === undefined) { + return ''; + } + + if (val === null) { + return key; + } + + if (Array.isArray(val)) { + return val.sort().map(function (val2) { + return strictUriEncode(key) + '=' + strictUriEncode(val2); + }).join('&'); + } + + return strictUriEncode(key) + '=' + strictUriEncode(val); + }).filter(function (x) { + return x.length > 0; + }).join('&') : ''; + }; + + +/***/ }, +/* 57 */ +/***/ function(module, exports) { + + 'use strict'; + module.exports = function (str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase(); + }); + }; + + +/***/ } +/******/ ]) +}); +; \ No newline at end of file diff --git a/public/javascripts/wechat/ReactRouter.min.js b/public/javascripts/wechat/ReactRouter.min.js new file mode 100644 index 000000000..af370173e --- /dev/null +++ b/public/javascripts/wechat/ReactRouter.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactRouter=t(require("react")):e.ReactRouter=t(e.React)}(this,function(e){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0;var o=n(37),a=r(o);t.Router=a["default"];var u=n(18),i=r(u);t.Link=i["default"];var s=n(31),c=r(s);t.IndexLink=c["default"];var f=n(32),l=r(f);t.IndexRedirect=l["default"];var d=n(33),p=r(d);t.IndexRoute=p["default"];var h=n(19),v=r(h);t.Redirect=v["default"];var y=n(35),g=r(y);t.Route=g["default"];var m=n(30),_=r(m);t.History=_["default"];var P=n(34),O=r(P);t.Lifecycle=O["default"];var R=n(36),x=r(R);t.RouteContext=x["default"];var w=n(48),b=r(w);t.useRoutes=b["default"];var M=n(5);t.createRoutes=M.createRoutes;var E=n(13),j=r(E);t.RouterContext=j["default"];var S=n(38),A=r(S);t.RoutingContext=A["default"];var C=n(6),k=r(C);t.PropTypes=k["default"];var T=n(46),H=r(T);t.match=H["default"];var L=n(24),q=r(L);t.useRouterHistory=q["default"];var U=n(8);t.formatPattern=U.formatPattern;var N=n(40),B=r(N);t.browserHistory=B["default"];var I=n(44),D=r(I);t.hashHistory=D["default"];var F=n(21),W=r(F);t.createMemoryHistory=W["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){t="[react-router] "+t;for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;n>o;o++)r[o-2]=arguments[o]}t.__esModule=!0,t["default"]=o;var a=n(4);r(a);e.exports=t["default"]},function(t,n){t.exports=e},function(e,t,n){"use strict";var r=function(e,t,n,r,o,a,u,i){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,u,i],f=0;s=new Error(t.replace(/%s/g,function(){return c[f++]})),s.name="Invariant Violation"}throw s.framesToPop=1,s}};e.exports=r},function(e,t,n){"use strict";var r=function(){};e.exports=r},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){return null==e||p["default"].isValidElement(e)}function a(e){return o(e)||Array.isArray(e)&&e.every(o)}function u(e,t,n){e=e||"UnknownComponent";for(var r in t)if(t.hasOwnProperty(r)){var o=t[r](n,r,e);o instanceof Error}}function i(e,t){return l({},e,t)}function s(e){var t=e.type,n=i(t.defaultProps,e.props);if(t.propTypes&&u(t.displayName||t.name,t.propTypes,n),n.children){var r=c(n.children,n);r.length&&(n.childRoutes=r),delete n.children}return n}function c(e,t){var n=[];return p["default"].Children.forEach(e,function(e){if(p["default"].isValidElement(e))if(e.type.createRouteFromReactElement){var r=e.type.createRouteFromReactElement(e,t);r&&n.push(r)}else n.push(s(e))}),n}function f(e){return a(e)?e=c(e):e&&!Array.isArray(e)&&(e=[e]),e}t.__esModule=!0;var l=Object.assign||function(e){for(var t=1;t should not have a "'+t+'" prop'):void 0}t.__esModule=!0,t.falsy=r;var o=n(2),a=o.PropTypes.func,u=o.PropTypes.object,i=o.PropTypes.arrayOf,s=o.PropTypes.oneOfType,c=o.PropTypes.element,f=o.PropTypes.shape,l=o.PropTypes.string,d=f({listen:a.isRequired,pushState:a.isRequired,replaceState:a.isRequired,go:a.isRequired});t.history=d;var p=f({pathname:l.isRequired,search:l.isRequired,state:u,action:l.isRequired,key:l});t.location=p;var h=s([a,l]);t.component=h;var v=s([h,u]);t.components=v;var y=s([u,c]);t.route=y;var g=s([y,i(y)]);t.routes=g,t["default"]={falsy:r,history:d,location:p,component:h,components:v,route:y}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){var t=e.match(/^https?:\/\/[^\/]*/);return null==t?e:e.substring(t[0].length)}function a(e){var t=o(e),n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substring(a),t=t.substring(0,a));var u=t.indexOf("?");return-1!==u&&(n=t.substring(u),t=t.substring(0,u)),""===t&&(t="/"),{pathname:t,search:n,hash:r}}t.__esModule=!0,t.extractPath=o,t.parsePath=a;var u=n(4);r(u)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function a(e){return o(e).replace(/\/+/g,"/+")}function u(e){for(var t="",n=[],r=[],o=void 0,u=0,i=/:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*\*|\*|\(|\)/g;o=i.exec(e);)o.index!==u&&(r.push(e.slice(u,o.index)),t+=a(e.slice(u,o.index))),o[1]?(t+="([^/?#]+)",n.push(o[1])):"**"===o[0]?(t+="([\\s\\S]*)",n.push("splat")):"*"===o[0]?(t+="([\\s\\S]*?)",n.push("splat")):"("===o[0]?t+="(?:":")"===o[0]&&(t+=")?"),r.push(o[0]),u=i.lastIndex;return u!==e.length&&(r.push(e.slice(u,e.length)),t+=a(e.slice(u,e.length))),{pattern:e,regexpSource:t,paramNames:n,tokens:r}}function i(e){return e in h||(h[e]=u(e)),h[e]}function s(e,t){"/"!==e.charAt(0)&&(e="/"+e),"/"!==t.charAt(0)&&(t="/"+t);var n=i(e),r=n.regexpSource,o=n.paramNames,a=n.tokens;r+="/*";var u="*"!==a[a.length-1];u&&(r+="([\\s\\S]*?)");var s=t.match(new RegExp("^"+r+"$","i")),c=void 0,f=void 0;if(null!=s){if(u){c=s.pop();var l=s[0].substr(0,s[0].length-c.length);if(c&&"/"!==l.charAt(l.length-1))return{remainingPathname:null,paramNames:o,paramValues:null}}else c="";f=s.slice(1).map(function(e){return null!=e?decodeURIComponent(e):e})}else c=f=null;return{remainingPathname:c,paramNames:o,paramValues:f}}function c(e){return i(e).paramNames}function f(e,t){var n=s(e,t),r=n.paramNames,o=n.paramValues;return null!=o?r.reduce(function(e,t,n){return e[t]=o[n],e},{}):null}function l(e,t){t=t||{};for(var n=i(e),r=n.tokens,o=0,a="",u=0,s=void 0,c=void 0,f=void 0,l=0,d=r.length;d>l;++l)s=r[l],"*"===s||"**"===s?(f=Array.isArray(t.splat)?t.splat[u++]:t.splat,null!=f||o>0?void 0:p["default"](!1),null!=f&&(a+=encodeURI(f))):"("===s?o+=1:")"===s?o-=1:":"===s.charAt(0)?(c=s.substring(1),f=t[c],null!=f||o>0?void 0:p["default"](!1),null!=f&&(a+=encodeURIComponent(f))):a+=s;return a.replace(/\/+/g,"/")}t.__esModule=!0,t.compilePattern=i,t.matchPattern=s,t.getParamNames=c,t.getParams=f,t.formatPattern=l;var d=n(3),p=r(d),h={}},function(e,t){"use strict";t.__esModule=!0;var n="PUSH";t.PUSH=n;var r="REPLACE";t.REPLACE=r;var o="POP";t.POP=o,t["default"]={PUSH:n,REPLACE:r,POP:o}},function(e,t){"use strict";t.__esModule=!0;var n=!("undefined"==typeof window||!window.document||!window.document.createElement);t.canUseDOM=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e){return c.stringify(e).replace(/%20/g,"+")}function u(e){return function(){function t(e){if(null==e.query){var t=e.search;e.query=R(t.substring(1)),e[v]={search:t,searchBase:""}}return e}function n(e,t){var n,r=e[v],o=t?O(t):"";if(!r&&!o)return e;"string"==typeof e&&(e=d.parsePath(e));var a=void 0;a=r&&e.search===r.search?r.searchBase:e.search||"";var u=a;return o&&(u+=(u?"&":"?")+o),i({},e,(n={search:u},n[v]={search:u,searchBase:a},n))}function r(e){return w.listenBefore(function(n,r){l["default"](e,t(n),r)})}function u(e){return w.listen(function(n){e(t(n))})}function s(e){w.push(n(e,e.query))}function c(e){w.replace(n(e,e.query))}function f(e,t){return w.createPath(n(e,t||e.query))}function p(e,t){return w.createHref(n(e,t||e.query))}function g(e){for(var r=arguments.length,o=Array(r>1?r-1:0),a=1;r>a;a++)o[a-1]=arguments[a];var u=w.createLocation.apply(w,[n(e,e.query)].concat(o));return e.query&&(u.query=e.query),t(u)}function m(e,t,n){"string"==typeof t&&(t=d.parsePath(t)),s(i({state:e},t,{query:n}))}function _(e,t,n){"string"==typeof t&&(t=d.parsePath(t)),c(i({state:e},t,{query:n}))}var P=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],O=P.stringifyQuery,R=P.parseQueryString,x=o(P,["stringifyQuery","parseQueryString"]),w=e(x);return"function"!=typeof O&&(O=a),"function"!=typeof R&&(R=y),i({},w,{listenBefore:r,listen:u,push:s,replace:c,createPath:f,createHref:p,createLocation:g,pushState:h["default"](m,"pushState is deprecated; use push instead"),replaceState:h["default"](_,"replaceState is deprecated; use replace instead")})}}t.__esModule=!0;var i=Object.assign||function(e){for(var t=1;tu&&c;)c=!1,t.call(this,u++,a,r);return s=!1,i?void n.apply(this,f):void(u>=e&&c&&(i=!0,n()))}}var u=0,i=!1,s=!1,c=!1,f=void 0;a()}function r(e,t,n){function r(e,t,r){u||(t?(u=!0,n(t)):(a[e]=r,u=++i===o,u&&n(null,a)))}var o=e.length,a=[];if(0===o)return n(null,a);var u=!1,i=0;e.forEach(function(e,n){t(e,n,function(e,t){r(n,e,t)})})}t.__esModule=!0;var o=Array.prototype.slice;t.loopAsync=n,t.mapAsync=r},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0;var o=Object.assign||function(e){for(var t=1;ti;++i)a=o[i](e);n(a)})}function y(){if(O.routes){for(var e=d(O.routes),t=void 0,n=0,r=e.length;"string"!=typeof t&&r>n;++n)t=e[n]();return t}}function m(e){var t=c(e,!1);t&&(delete w[t],o(w)||(b&&(b(),b=null),M&&(M(),M=null)))}function _(t,n){var r=c(t),a=w[r];if(a)-1===a.indexOf(n)&&a.push(n);else{var u=!o(w);w[r]=[n],u&&(b=e.listenBefore(h),e.listenBeforeUnload&&(M=e.listenBeforeUnload(y)))}return function(){var e=w[r];if(e){var o=e.filter(function(e){return e!==n});0===o.length?m(t):w[r]=o}}}function P(t){return e.listen(function(n){O.location===n?t(null,O):a(n,function(n,r,o){n?t(n):r?e.transitionTo(r):o&&t(null,o)})})}var O={},R=void 0,x=1,w={},b=void 0,M=void 0;return{isActive:n,match:a,listenBeforeLeavingRoute:_,listen:P}}t.__esModule=!0;var u=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e){return 0===e.button}function u(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function i(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0}function s(e,t){var n=t.query,r=t.hash,o=t.state;return n||r||o?{pathname:e,query:n,hash:r,state:o}:e}t.__esModule=!0;var c=Object.assign||function(e){for(var t=1;t=0;r--){var o=e[r],a=o.path||"";if(n=a.replace(/\/*$/,"/")+n,0===a.indexOf("/"))break}return"/"+n}},propTypes:{path:d,from:d,to:d.isRequired,query:p,state:p,onEnter:f.falsy,children:f.falsy},render:function(){i["default"](!1)}});t["default"]=h,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){return u({},e,{setRouteLeaveHook:t.listenBeforeLeavingRoute,isActive:t.isActive})}function a(e,t){return e=u({},e,t)}t.__esModule=!0;var u=Object.assign||function(e){for(var t=1;t=0&&0===window.sessionStorage.length)return;throw n}}function u(e){var t=void 0;try{t=window.sessionStorage.getItem(o(e))}catch(n){if(n.name===f)return null}if(t)try{return JSON.parse(t)}catch(n){}return null}t.__esModule=!0,t.saveState=a,t.readState=u;var i=n(4),s=(r(i),"@@History/"),c=["QuotaExceededError","QUOTA_EXCEEDED_ERR"],f="SecurityError"},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){function t(e){return s.canUseDOM?void 0:i["default"](!1),n.listen(e)}var n=l["default"](a({getUserConfirmation:c.getUserConfirmation},e,{go:c.go}));return a({},n,{listen:t})}t.__esModule=!0;var a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e){return function(){function t(e){return _&&null==e.basename&&(0===e.pathname.indexOf(_)?(e.pathname=e.pathname.substring(_.length),e.basename=_,""===e.pathname&&(e.pathname="/")):e.basename=""),e}function n(e){if(!_)return e;"string"==typeof e&&(e=s.parsePath(e));var t=e.pathname,n="/"===_.slice(-1)?_:_+"/",r="/"===t.charAt(0)?t.slice(1):t,o=n+r;return u({},e,{pathname:o})}function r(e){return O.listenBefore(function(n,r){f["default"](e,t(n),r)})}function a(e){return O.listen(function(n){e(t(n))})}function c(e){O.push(n(e))}function l(e){O.replace(n(e))}function p(e){return O.createPath(n(e))}function h(e){return O.createHref(n(e))}function v(e){for(var r=arguments.length,o=Array(r>1?r-1:0),a=1;r>a;a++)o[a-1]=arguments[a];return t(O.createLocation.apply(O,[n(e)].concat(o)))}function y(e,t){"string"==typeof t&&(t=s.parsePath(t)),c(u({state:e},t))}function g(e,t){"string"==typeof t&&(t=s.parsePath(t)),l(u({state:e},t))}var m=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],_=m.basename,P=o(m,["basename"]),O=e(P);if(null==_&&i.canUseDOM){var R=document.getElementsByTagName("base")[0];R&&(_=s.extractPath(R.href))}return u({},O,{listenBefore:r,listen:a,push:c,replace:l,createPath:p,createHref:h,createLocation:v,pushState:d["default"](y,"pushState is deprecated; use push instead"),replaceState:d["default"](g,"replaceState is deprecated; use replace instead")})}}t.__esModule=!0;var u=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e){return!e||!e.__v2_compatible__}t.__esModule=!0;var u=Object.assign||function(e){for(var t=1;tt;++t)e[t].onLeave&&e[t].onLeave.call(e[t])}t.__esModule=!0,t.runEnterHooks=u,t.runLeaveHooks=i;var s=n(12),c=n(1);r(c)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0;var o=n(53),a=r(o),u=n(22),i=r(u);t["default"]=i["default"](a["default"]),e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t,n){if(!e.path)return!1;var r=a.getParamNames(e.path);return r.some(function(e){return t.params[e]!==n.params[e]})}function o(e,t){var n=e&&e.routes,o=t.routes,a=void 0,u=void 0;return n?!function(){var i=!1;a=n.filter(function(n){if(i)return!0;var a=-1===o.indexOf(n)||r(n,e,t);return a&&(i=!0),a}),a.reverse(),u=o.filter(function(e){return-1===n.indexOf(e)||-1!==a.indexOf(e)})}():(a=[],u=o),{leaveRoutes:a,enterRoutes:u}}t.__esModule=!0;var a=n(8);t["default"]=o,e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t,n){t.component||t.components?n(null,t.component||t.components):t.getComponent?t.getComponent(e,n):t.getComponents?t.getComponents(e,n):n()}function o(e,t){a.mapAsync(e.routes,function(t,n,o){r(e.location,t,o)},t)}t.__esModule=!0;var a=n(12);t["default"]=o,e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t){var n={};if(!e.path)return n;var r=o.getParamNames(e.path);for(var a in t)t.hasOwnProperty(a)&&-1!==r.indexOf(a)&&(n[a]=t[a]);return n}t.__esModule=!0;var o=n(8);t["default"]=r,e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0;var o=n(27),a=r(o),u=n(22),i=r(u);t["default"]=i["default"](a["default"]),e.exports=t["default"]},function(e,t,n){"use strict";function r(e,t){if(e==t)return!0;if(null==e||null==t)return!1;if(Array.isArray(e))return Array.isArray(t)&&e.length===t.length&&e.every(function(e,n){return r(e,t[n])});if("object"==typeof e){for(var n in e)if(e.hasOwnProperty(n))if(void 0===e[n]){if(void 0!==t[n])return!1}else{if(!t.hasOwnProperty(n))return!1;if(!r(e[n],t[n]))return!1}return!0}return String(e)===String(t)}function o(e,t,n){return e.every(function(e,r){return String(t[r])===String(n[e])})}function a(e,t,n){for(var r=e,a=[],u=[],i=0,s=t.length;s>i;++i){var f=t[i],l=f.path||"";if("/"===l.charAt(0)&&(r=e,a=[],u=[]),null!==r){var d=c.matchPattern(l,r);r=d.remainingPathname,a=[].concat(a,d.paramNames),u=[].concat(u,d.paramValues)}if(""===r&&f.path&&o(a,u,n))return i}return null}function u(e,t,n,r){var o=a(e,t,n);return null===o?!1:r?t.slice(o+1).every(function(e){return!e.path}):!0}function i(e,t){return null==t?null==e:null==e?!0:r(e,t)}function s(e,t,n,r,o){var a=e.pathname,s=e.query;return null==n?!1:u(a,r,o,t)?i(s,n.query):!1}t.__esModule=!0,t["default"]=s;var c=n(8);e.exports=t["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e,t){var n=e.history,r=e.routes,a=e.location,i=o(e,["history","routes","location"]);n||a?void 0:s["default"](!1),n=n?n:f["default"](i);var c=d["default"](n,p.createRoutes(r)),l=void 0;a?a=n.createLocation(a):l=n.listen(function(e){a=e});var v=h.createRouterObject(n,c);n=h.createRoutingHistory(n,c),c.match(a,function(e,r,o){t(e,r,o&&u({},o,{history:n,router:v,matchContext:{history:n,transitionManager:c,router:v}})),l&&l()})}t.__esModule=!0;var u=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e){return function(){var t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],n=t.routes,r=o(t,["routes"]),a=s["default"](e)(r),i=f["default"](a,n);return u({},a,i)}}t.__esModule=!0;var u=Object.assign||function(e){for(var t=1;t0&&"number"!=typeof e[0]?!1:!0:!1}function a(e,t,n){var a,f;if(r(e)||r(t))return!1;if(e.prototype!==t.prototype)return!1;if(s(e))return s(t)?(e=u.call(e),t=u.call(t),c(e,t,n)):!1;if(o(e)){if(!o(t))return!1;if(e.length!==t.length)return!1;for(a=0;a=0;a--)if(l[a]!=d[a])return!1;for(a=l.length-1;a>=0;a--)if(f=l[a],!c(e[f],t[f],n))return!1;return typeof e==typeof t}var u=Array.prototype.slice,i=n(51),s=n(50),c=e.exports=function(e,t,n){return n||(n={}),e===t?!0:e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():!e||!t||"object"!=typeof e&&"object"!=typeof t?n.strict?e===t:e==t:a(e,t,n)}},function(e,t){function n(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function r(e){return e&&"object"==typeof e&&"number"==typeof e.length&&Object.prototype.hasOwnProperty.call(e,"callee")&&!Object.prototype.propertyIsEnumerable.call(e,"callee")||!1}var o="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();t=e.exports=o?n:r,t.supported=n,t.unsupported=r},function(e,t){function n(e){var t=[];for(var n in e)t.push(n);return t}t=e.exports="function"==typeof Object.keys?Object.keys:n,t.shim=n},function(e,t){"use strict";function n(e,t,n){function r(){u=!0,n.apply(this,arguments)}function o(){u||(e>a?t.call(this,a++,o,r):r.apply(this,arguments))}var a=0,u=!1;o()}t.__esModule=!0,t.loopAsync=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(){function e(e){e=e||window.history.state||{};var t=l.getWindowPath(),n=e,r=n.key,o=void 0;r?o=d.readState(r):(o=null,r=_.createKey(),g&&window.history.replaceState(a({},e,{key:r}),null,t));var u=c.parsePath(t);return _.createLocation(a({},u,{state:o}),void 0,r)}function t(t){function n(t){void 0!==t.state&&r(e(t.state))}var r=t.transitionTo;return l.addEventListener(window,"popstate",n),function(){l.removeEventListener(window,"popstate",n)}}function n(e){var t=e.basename,n=e.pathname,r=e.search,o=e.hash,a=e.state,u=e.action,i=e.key;if(u!==s.POP){d.saveState(i,a);var c=(t||"")+n+r+o,f={key:i};if(u===s.PUSH){if(m)return window.location.href=c,!1;window.history.pushState(f,null,c)}else{if(m)return window.location.replace(c),!1;window.history.replaceState(f,null,c)}}}function r(e){1===++P&&(O=t(_));var n=_.listenBefore(e);return function(){n(),0===--P&&O()}}function o(e){1===++P&&(O=t(_));var n=_.listen(e);return function(){n(),0===--P&&O()}}function u(e){1===++P&&(O=t(_)),_.registerTransitionHook(e)}function p(e){_.unregisterTransitionHook(e),0===--P&&O()}var v=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];f.canUseDOM?void 0:i["default"](!1);var y=v.forceRefresh,g=l.supportsHistory(),m=!g||y,_=h["default"](a({},v,{getCurrentLocation:e,finishTransition:n,saveState:d.saveState})),P=0,O=void 0;return a({},_,{listenBefore:r,listen:o,registerTransitionHook:u,unregisterTransitionHook:p})}t.__esModule=!0;var a=Object.assign||function(e){for(var t=1;t=0&&t=0&&y Date: Mon, 21 Mar 2016 18:23:34 +0800 Subject: [PATCH 078/423] =?UTF-8?q?url=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/javascripts/wechat/wechat.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/javascripts/wechat/wechat.jsx b/public/javascripts/wechat/wechat.jsx index ce5d47d56..29a8da732 100644 --- a/public/javascripts/wechat/wechat.jsx +++ b/public/javascripts/wechat/wechat.jsx @@ -8,7 +8,7 @@ var Index = React.createClass({ } }); -var apiUrl = 'http://localhost:3000/api/v1/'; +var apiUrl = '/api/v1/'; var PostContainer = React.createClass({ loadDataFromServer: function(){ From aaa2a0dea7b7c60ac0434ea710ea383af7e05ffe Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Mon, 21 Mar 2016 18:26:35 +0800 Subject: [PATCH 079/423] =?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=A4=B4=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/app.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/public/app.html b/public/app.html index 708859714..5ebcdc286 100644 --- a/public/app.html +++ b/public/app.html @@ -2,6 +2,13 @@ react js + + + + + + + From 63ae921c4099d4a1e5e081bbb33beaf572dd7fe6 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Fri, 25 Mar 2016 17:07:06 +0800 Subject: [PATCH 080/423] =?UTF-8?q?return=20=E6=94=BE=E9=94=99=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/javascripts/homework.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/javascripts/homework.js b/public/javascripts/homework.js index b03ddf1bf..3bca1606c 100644 --- a/public/javascripts/homework.js +++ b/public/javascripts/homework.js @@ -97,8 +97,8 @@ $(function(){ alert("您的答案超时了, 请检查代码是否存在死循环的错误."); } else { alert("测试失败,服务器出错."); - return; } + return; }); }; From a58ba8080c7a132d151f0c4ffad7c9814a7c2a09 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Fri, 25 Mar 2016 21:06:25 +0800 Subject: [PATCH 081/423] =?UTF-8?q?=E7=BC=96=E7=A8=8B=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E5=8A=A0=E4=B8=AA=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/new_user_commit_homework.html.erb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/users/new_user_commit_homework.html.erb b/app/views/users/new_user_commit_homework.html.erb index e5e2a385c..0c2a32865 100644 --- a/app/views/users/new_user_commit_homework.html.erb +++ b/app/views/users/new_user_commit_homework.html.erb @@ -30,7 +30,7 @@ 超时! - 测试错误! + 测试错误! 您的输出:
 
@@ -133,7 +133,8 @@ <% else %>
    - <% test.results.reverse.each_with_index do |x, i| %> + <%puts test.results %> + <% test.results.reverse.each_with_index do |x, i| %>
  • 测试<%=test.results.size-i%> <% if x["status"].to_i != 0 %> <% if x["status"].to_i == 2 %> From ef49715b085b6c5d44d1868a4eae3bae34f95ef5 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Fri, 25 Mar 2016 21:11:13 +0800 Subject: [PATCH 082/423] =?UTF-8?q?=E7=BC=96=E7=A8=8B=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=8A=A0=E4=B8=AAresults=E4=B8=BA=E7=A9=BA=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/student_work/_programing_work_show.html.erb | 3 ++- app/views/users/new_user_commit_homework.html.erb | 4 +++- app/views/users/user_commit_homework.html.erb | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/views/student_work/_programing_work_show.html.erb b/app/views/student_work/_programing_work_show.html.erb index ae2237bdc..6009dfbb5 100644 --- a/app/views/student_work/_programing_work_show.html.erb +++ b/app/views/student_work/_programing_work_show.html.erb @@ -55,8 +55,8 @@
      <% test.results.reverse.each_with_index do |x, i| %> + <% unless x.nil? %>
    • - 测试<%=test.results.size-i%> <% if x["status"].to_i != 0 %> <% if x["status"].to_i == 2 %> @@ -82,6 +82,7 @@
      <% end %>
    • + <% end %> <% end %>
diff --git a/app/views/users/new_user_commit_homework.html.erb b/app/views/users/new_user_commit_homework.html.erb index 0c2a32865..e33362a0a 100644 --- a/app/views/users/new_user_commit_homework.html.erb +++ b/app/views/users/new_user_commit_homework.html.erb @@ -133,8 +133,9 @@ <% else %>
    - <%puts test.results %> + <% logger.error("################################################{test.results}") %> <% test.results.reverse.each_with_index do |x, i| %> + <% unless x.nil? %>
  • 测试<%=test.results.size-i%> <% if x["status"].to_i != 0 %> <% if x["status"].to_i == 2 %> @@ -160,6 +161,7 @@
  • <% end %> <% end %> + <% end %>
<% end %> diff --git a/app/views/users/user_commit_homework.html.erb b/app/views/users/user_commit_homework.html.erb index 40fd9d241..cab3c55ab 100644 --- a/app/views/users/user_commit_homework.html.erb +++ b/app/views/users/user_commit_homework.html.erb @@ -101,6 +101,7 @@
    <% test.results.reverse.each_with_index do |x, i| %> + <% unless x.nil? %>
  • 测试<%=test.results.size-i%> <% if x["status"].to_i != 0 %> <% if x["status"].to_i == 2 %> @@ -125,6 +126,7 @@
  • <% end %> + <% end %> <% end %>
From e62ee2eadee62e8bdb310944deda6cb7625fae0b Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Sat, 26 Mar 2016 13:44:13 +0800 Subject: [PATCH 083/423] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=84=E6=B5=8B?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/student_work_controller.rb | 52 +++++++++------------- public/javascripts/homework.js | 11 +++-- 2 files changed, 29 insertions(+), 34 deletions(-) diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index 89f67ddf4..e40475d51 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -55,12 +55,11 @@ class StudentWorkController < ApplicationController render :json => resultObj end - $test_result = {} - $test_status = {} +#由于负载问题 不要使用全局变量 #根据传入的tIndex确定是第几次测试 def program_test_ex is_test = params[:is_test] == 'true' - resultObj = {status: 0, results: [], error_msg: '', time: Time.now.strftime('%Y-%m-%d %T'),tseq:1,tcount:1} #保存每测试一次返回的结果 + resultObj = {status: 0, results: [], error_msg: '', time: Time.now.strftime('%Y-%m-%d %T'),tseq:1,tcount:1,testid:1} #保存每测试一次返回的结果 student_work = find_or_save_student_work(is_test) @@ -81,7 +80,7 @@ class StudentWorkController < ApplicationController #-1 默认值 0全部正确并结束 2 超时 -2 编译错误 resultObj[:status] = -1 - resultObj[:results] = result["results"][0] #本次测试结果 + resultObj[:results] = result["results"].first #本次测试结果 resultObj[:error_msg] = result["error_msg"] #编译错误时的信息 if result["status"].to_i == -2 #编译错误 @@ -94,24 +93,6 @@ class StudentWorkController < ApplicationController resultObj[:status] = 200 else - #索引 - work_id = student_work.id - - #测试第一个时初始化下全局变量 - if index == 1 - $test_result[work_id] = [] #保存本次测试的结果 输入输出 - $test_status[work_id] = 0 #保存本次测试的结果 正确还是错误 - end - - if result["status"].to_i == -2 - $test_result[work_id] = [result["error_msg"]] - $test_status[work_id] = -2 - else - #存下每次的结果 只有每次都为0才全部正确 - $test_status[work_id] = result["status"] != 0 ? result["status"]:$test_status[work_id] - $test_result[work_id][index - 1] = resultObj[:results] - end - student_work.name = params[:title] student_work.description = params[:src] @@ -121,20 +102,31 @@ class StudentWorkController < ApplicationController student_work.late_penalty = 0 end + #每次都要把数据存到数据库中 + status = resultObj[:status] + if index == 1 + student_work_test = student_work.student_work_tests.build(status: resultObj[:status], + results: [resultObj[:results]],src: params[:src]) + student_work_test.save! + resultObj[:testid] = student_work_test.id + else + student_work_test = StudentWorkTest.find(params[:testid]) + results = student_work_test.results + results << resultObj[:results] + student_work_test.results = results + student_work_test.status = (result["status"] != 0 ? result["status"] : student_work_test.status) + student_work_test.save! + status = student_work_test.status + resultObj[:testid] = student_work_test.id + end + #超时或编译错误则直接返回了并存入数据库 if resultObj[:status] == 2 || resultObj[:status] == -2 || index == @homework.homework_tests.size - if $test_status[work_id] == 0 + if status == 0 resultObj[:status] = 0 end - - student_work_test = student_work.student_work_tests.build(status: $test_status[work_id], - results: $test_result[work_id],src: params[:src]) - student_work.save resultObj[:time] = student_work_test.created_at.to_s(:db) resultObj[:index] = student_work.student_work_tests.count - - $test_result[work_id] = nil - $test_status[work_id] = nil end #渲染返回结果 diff --git a/public/javascripts/homework.js b/public/javascripts/homework.js index 3bca1606c..5b7f1b046 100644 --- a/public/javascripts/homework.js +++ b/public/javascripts/homework.js @@ -57,10 +57,12 @@ $(function(){ ); */ //先测试一次并返回测试集个数及结果再判断是否需要继续进行测试 - var test_post = function(i){ + var test_post = function(i, testid){ $.post( '/student_work/program_test_ex', - {homework: homework_id, student_work_id: student_work_id, src: src, title: title, is_test: is_test,tIndex:i}, + {homework: homework_id, student_work_id: student_work_id, + src: src, title: title, is_test: is_test,tIndex:i, + testid: testid}, function(data,status){ var tSeq = data.tseq; var tCount = data.tcount; @@ -90,7 +92,7 @@ $(function(){ return; } - test_post(i+1); + test_post(i+1, data.testid); } ).fail(function(xhr, status){ if(status == 'timeout'){ @@ -100,9 +102,10 @@ $(function(){ } return; }); + }; - test_post(1); + test_post(1, 0); }; $('#test-program-btn').on('click', test_program); From 4f7d698076b9b51cd68b559ca6fc20d9e84db6d4 Mon Sep 17 00:00:00 2001 From: Tim Date: Sat, 26 Mar 2016 14:45:57 +0800 Subject: [PATCH 084/423] wechat init --- config/menu.yml | 17 ++++--- public/assets/wechat/issue.html | 52 +++++++++++++++++++++ public/javascripts/wechat/wechat-dev.js | 54 ++++++++++++++++++++++ public/javascripts/wechat/wechat.jsx | 60 ++++++++++++++++--------- 4 files changed, 156 insertions(+), 27 deletions(-) create mode 100644 public/assets/wechat/issue.html create mode 100644 public/javascripts/wechat/wechat-dev.js diff --git a/config/menu.yml b/config/menu.yml index c88e94ec4..711b087d1 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -1,13 +1,20 @@ button: - - type: "click" + type: "view" name: "最新动态" - key: "MY_NEWS" + url: "http://wechat.trustie.net/assets/wechat/issue.html" - type: "click" name: "意见返馈" key: "FEEDBACK" - - type: "view" - name: "进入网站" - url: "http://www.trustie.net/" \ No newline at end of file + name: "更多" + sub_button: + - + type: "view" + name: "进入网站" + url: "http://www.trustie.net/" + - + type: "view" + name: "使用手册" + url: "https://www.trustie.net/organizations/1/downloads" \ No newline at end of file diff --git a/public/assets/wechat/issue.html b/public/assets/wechat/issue.html new file mode 100644 index 000000000..7b6eedde2 --- /dev/null +++ b/public/assets/wechat/issue.html @@ -0,0 +1,52 @@ + + + + react js + + + + + + + + + + + +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/wechat/wechat-dev.js b/public/javascripts/wechat/wechat-dev.js new file mode 100644 index 000000000..9c5704b8c --- /dev/null +++ b/public/javascripts/wechat/wechat-dev.js @@ -0,0 +1,54 @@ +/** + * Created by root on 3/25/16. + */ +$(document).ready(function(){ + + var bt=baidu.template; + bt.LEFT_DELIMITER=''; + + + var apiUrl = '/api/v1/' + var setTemplate = function(data){ + console.log(data); + + + var html=bt('t:result-list',{issues: data}); + $('#container').prepend(html); + } + + var loadDataFromServer = function(id){ + $.ajax({ + url: apiUrl + 'issues/' + id, + dataType: 'json', + success: function(data){ + setTemplate(data.data); + }, + error: function(xhr,status,err){ + console.log(err); + } + }) + }; + + + loadDataFromServer(299); + + + var postWidth = $(".post-wrapper").width(); + var titleWidth = postWidth - 80; + $(".post-title").css("maxWidth",titleWidth); + + $(".post-all-content").each(function(){ + var postHeight = $(this).height(); + if (postHeight > 90){ + $(this).parent().next().css("display","block"); + $(this).parent().next().toggle(function(){ + $(this).text("点击隐藏"); + $(this).prev().css("height",postHeight); + },function(){ + $(this).text("点击展开"); + $(this).prev().css("height",90); + }); + } + }); +}); diff --git a/public/javascripts/wechat/wechat.jsx b/public/javascripts/wechat/wechat.jsx index 29a8da732..86d92318b 100644 --- a/public/javascripts/wechat/wechat.jsx +++ b/public/javascripts/wechat/wechat.jsx @@ -10,6 +10,8 @@ var Index = React.createClass({ var apiUrl = '/api/v1/'; +var converter = new Showdown.converter(); + var PostContainer = React.createClass({ loadDataFromServer: function(){ $.ajax({ @@ -31,36 +33,52 @@ var PostContainer = React.createClass({ }, render: function(){ return ( -
-
- -
-
- ) + + )issues } }); var PostView = React.createClass({ + testClick: function(){ + console.log("123123"); + }, + render: function(){ if(!this.props.data){ return
} - return ( -
-
-
{this.props.data.subject}
-
-
-
-

{this.props.data.description}

+ + var issueEach = this.props.data.map(function(issue){ + + var descMarkup = converter.makeHtml(issue.description.toString()); + + return ( +
+
+
+
+
{issue.subject}
+ +
+
+
+
+ 点击展开 +
+ {issue.created_on} +
+
+
- 点击展开 -
- {this.props.data.time} -
-
- ) + ) + }); + + return( +
{issueEach}
+ ); + + } }); @@ -77,5 +95,3 @@ var routes = ( React.render(routes, document.getElementById("container")); - - From 5116d75eb71c05f2f3a22bfb9091629f23692949 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Sat, 26 Mar 2016 14:48:57 +0800 Subject: [PATCH 085/423] =?UTF-8?q?=E7=BC=96=E7=A8=8B=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E7=A9=BA=E6=A0=BC=E7=94=A8=E2=96=A1=E8=A1=A8=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/student_work_controller.rb | 6 ++++++ public/javascripts/homework.js | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index e40475d51..b02638f9e 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -76,6 +76,12 @@ class StudentWorkController < ApplicationController #请求测试 result = test_realtime_ex(test, params[:src]) + + if result["status"].to_i != -2 + result["results"].first['output'] = result["results"].first['output'].gsub(" ","□") + result["results"].first['result'] = result["results"].first['result'].gsub(" ","□") + end + logger.debug result #-1 默认值 0全部正确并结束 2 超时 -2 编译错误 diff --git a/public/javascripts/homework.js b/public/javascripts/homework.js index 5b7f1b046..46dfed122 100644 --- a/public/javascripts/homework.js +++ b/public/javascripts/homework.js @@ -426,7 +426,7 @@ $(function(){ //注意\n\ //1:该程序每次运行的时间必须小于200毫秒,否则会超时,程序超时将不会测试剩余的测试集\n\ //2:该程序每次运行使用的内存不能超过1M,否则会返回错误\n\ - //3:该程序每次运行输出的结果最多显示100个字符(多余的不显示)\n\ + //3:该程序每次运行输出的结果最多显示100个字符(多余的不显示),空格用□表示\n\ import java.io.*;\n\ import java.util.*;\n\ \n\ @@ -450,7 +450,7 @@ class Main\n\ //注意\n\ //1:该程序每次运行的时间必须小于200毫秒,否则会超时,程序超时将不会测试剩余的测试集\n\ //2:该程序每次运行使用的内存不能超过1M,否则会返回错误\n\ - //3:该程序每次运行输出的结果最多显示100个字符(多余的不显示)\n\ + //3:该程序每次运行输出的结果最多显示100个字符(多余的不显示),空格用□表示\n\ #include \n\ int main()\n\ {\n\ @@ -470,7 +470,7 @@ src = '\ //注意\n\ //1:该程序每次运行的时间必须小于200毫秒,否则会超时,程序超时将不会测试剩余的测试集\n\ //2:该程序每次运行使用的内存不能超过1M,否则会返回错误\n\ - //3:该程序每次运行输出的结果最多显示100个字符(多余的不显示)\n\ + //3:该程序每次运行输出的结果最多显示100个字符(多余的不显示),空格用□表示\n\ #include \n\ using namespace std;\n\ \n\ @@ -491,7 +491,7 @@ src = '\ #注意\n\ #1:该程序每次运行的时间必须小于200毫秒,否则会超时,程序超时将不会测试剩余的测试集\n\ #2:该程序每次运行使用的内存不能超过1M,否则会返回错误\n\ - #3:该程序每次运行输出的结果最多显示100个字符(多余的不显示)\n\ + #3:该程序每次运行输出的结果最多显示100个字符(多余的不显示),空格用□表示\n\ import sys \n\ \n\ #获取参数方式,使用raw_input\n\ From 43de1a21b18d6c724c1a743a2f8512330eac96d0 Mon Sep 17 00:00:00 2001 From: Tim Date: Sat, 26 Mar 2016 14:54:36 +0800 Subject: [PATCH 086/423] =?UTF-8?q?issues=20api=20=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/issues.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/api/mobile/apis/issues.rb b/app/api/mobile/apis/issues.rb index 212a505e7..23d8b955f 100644 --- a/app/api/mobile/apis/issues.rb +++ b/app/api/mobile/apis/issues.rb @@ -7,7 +7,7 @@ module Mobile desc "get special issuse" get ':id' do - issue = Issue.find(params[:id]) + issue = Issue.where("project_id = ?", params[:id]) present :data, issue, with: Mobile::Entities::Issue present :status, 0 end From 88ba2bf5562c25df29ccbcb18507858edc452f0b Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Sat, 26 Mar 2016 14:59:51 +0800 Subject: [PATCH 087/423] =?UTF-8?q?=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/student_work_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index b02638f9e..c238b4da3 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -90,6 +90,7 @@ class StudentWorkController < ApplicationController resultObj[:error_msg] = result["error_msg"] #编译错误时的信息 if result["status"].to_i == -2 #编译错误 + resultObj[:results] = result["error_msg"] resultObj[:status] = -2 elsif result["results"][0]["status"].to_i == 2 resultObj[:status] = 2 @@ -116,6 +117,7 @@ class StudentWorkController < ApplicationController student_work_test.save! resultObj[:testid] = student_work_test.id else + #先从数据库取出result student_work_test = StudentWorkTest.find(params[:testid]) results = student_work_test.results results << resultObj[:results] From f217c9097aee73330bdc7e40eb4309903ddd28fe Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Sat, 26 Mar 2016 15:44:28 +0800 Subject: [PATCH 088/423] =?UTF-8?q?=E5=85=A8=E9=83=A8=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E6=8F=90=E7=A4=BA=E6=98=AF=E5=90=A6=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/student_work_controller.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index c238b4da3..903030ecb 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -99,7 +99,6 @@ class StudentWorkController < ApplicationController unless student_work.save resultObj[:status] = 200 else - student_work.name = params[:title] student_work.description = params[:src] @@ -110,9 +109,9 @@ class StudentWorkController < ApplicationController end #每次都要把数据存到数据库中 - status = resultObj[:status] + status = result["status"] if index == 1 - student_work_test = student_work.student_work_tests.build(status: resultObj[:status], + student_work_test = student_work.student_work_tests.build(status: status, results: [resultObj[:results]],src: params[:src]) student_work_test.save! resultObj[:testid] = student_work_test.id @@ -130,9 +129,10 @@ class StudentWorkController < ApplicationController #超时或编译错误则直接返回了并存入数据库 if resultObj[:status] == 2 || resultObj[:status] == -2 || index == @homework.homework_tests.size - if status == 0 + if status == 0 resultObj[:status] = 0 end + student_work.save! resultObj[:time] = student_work_test.created_at.to_s(:db) resultObj[:index] = student_work.student_work_tests.count end From 60931dde6ab2a87cf6c6b0a1a794635ce51b5749 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sat, 26 Mar 2016 15:52:14 +0800 Subject: [PATCH 089/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96ope?= =?UTF-8?q?nid=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 12 ++++++++++ config/menu.yml | 2 +- config/routes.rb | 1 + public/assets/wechat/issue.html | 1 + public/javascripts/wechat/auth.js | 29 +++++++++++++++++++++++++ public/javascripts/wechat/wechat-dev.js | 25 +++++++++++---------- 6 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 public/javascripts/wechat/auth.js diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 60a674446..c00a8a86e 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -171,6 +171,18 @@ class WechatsController < ActionController::Base end end + + def get_open_id + begin + raise "非法操作, code不存在" unless params[:code] + openid = get_openid(params[:code]) + raise "无法获取到openid" unless openid + render :text => {status:0, openid: openid}.to_json + rescue Exception=>e + render :text => {status: -1, msg: e.message}.to_json + end + end + def bind begin raise "非法操作, code不存在" unless params[:code] diff --git a/config/menu.yml b/config/menu.yml index 711b087d1..106bbfd07 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -2,7 +2,7 @@ button: - type: "view" name: "最新动态" - url: "http://wechat.trustie.net/assets/wechat/issue.html" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=http://wechat.trustie.net/assets/wechat/issue.html&response_type=code&scope=snsapi_base&state=123#wechat_redirect" - type: "click" name: "意见返馈" diff --git a/config/routes.rb b/config/routes.rb index 396be9c66..2313088cc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1165,6 +1165,7 @@ RedmineApp::Application.routes.draw do collection do get :login post :bind + get :get_open_id end end diff --git a/public/assets/wechat/issue.html b/public/assets/wechat/issue.html index 7b6eedde2..86c4e494a 100644 --- a/public/assets/wechat/issue.html +++ b/public/assets/wechat/issue.html @@ -47,6 +47,7 @@ + \ No newline at end of file diff --git a/public/javascripts/wechat/auth.js b/public/javascripts/wechat/auth.js new file mode 100644 index 000000000..aeaa03db1 --- /dev/null +++ b/public/javascripts/wechat/auth.js @@ -0,0 +1,29 @@ +$(function(){ + //获取url中的参数 + function getUrlParam(name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 + var r = window.location.search.substr(1).match(reg); //匹配目标参数 + if (r != null) return unescape(r[2]); return null; //返回参数值 + } + + var g_openid = ""; + + window.getOpenId = function(cb){ + if (g_openid.length>0){ + cb(g_openid); + } + var code = getUrlParam("code"); + $.ajax({ + url: '/wechat/get_open_id?code='+code, + type: 'get', + dataType: 'json', + success: function(data){ + g_openid = data.openid; + cb(g_openid); + }, + error: function(xhr,err){ + alert("认证失败: "+err); + } + }); + } +}); \ No newline at end of file diff --git a/public/javascripts/wechat/wechat-dev.js b/public/javascripts/wechat/wechat-dev.js index 9c5704b8c..760140991 100644 --- a/public/javascripts/wechat/wechat-dev.js +++ b/public/javascripts/wechat/wechat-dev.js @@ -11,23 +11,26 @@ $(document).ready(function(){ var apiUrl = '/api/v1/' var setTemplate = function(data){ console.log(data); - - var html=bt('t:result-list',{issues: data}); $('#container').prepend(html); } var loadDataFromServer = function(id){ - $.ajax({ - url: apiUrl + 'issues/' + id, - dataType: 'json', - success: function(data){ - setTemplate(data.data); - }, - error: function(xhr,status,err){ - console.log(err); - } + getOpenId(function(openid){ + alert(openid); + $.ajax({ + url: apiUrl + 'issues/' + id + "?openid="+openid, + dataType: 'json', + success: function(data){ + setTemplate(data.data); + }, + error: function(xhr,status,err){ + console.log(err); + } + }); }) + + }; From d5124e128ee5a6eb68dae732ecd797a5cc3706b1 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sat, 26 Mar 2016 15:56:36 +0800 Subject: [PATCH 090/423] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/issue.html | 3 --- public/javascripts/wechat/auth.js | 6 ++++++ public/javascripts/wechat/wechat-dev.js | 1 - 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/public/assets/wechat/issue.html b/public/assets/wechat/issue.html index 86c4e494a..f49dfdcfa 100644 --- a/public/assets/wechat/issue.html +++ b/public/assets/wechat/issue.html @@ -15,9 +15,6 @@
- - - + + + + + + +
+
+ +
    + + <% if User.current.logged? %> + + + <% else %> + + + <% end %> +
+ +
+
+
+
+
+
+
+ + + + + +
+ <%= link_to truncate(@organization.name,:length => 26), organization_path(@organization.id), :class=>"pr_info_name c_dark fb break_word" %> + <% if User.current.logged? %> + <% if @organization.is_public? %> + <%= l(:label_public)%> + <% else %> + <%= l(:label_private)%> + <% end %> + <% end %> +
+ + <% if User.current.admin_of_org?(@organization) %> + 配置 + <% end %> + + + + + + + + + + +
+
+ <%= link_to '文章', organization_org_document_comments_path(@organization) %>  + <%# if User.current.logged? %> + ( + <%= link_to OrgDocumentComment.where("organization_id =? and parent_id is null", @organization.id).count, organization_org_document_comments_path(@organization), :class => "linkBlue" %> + ) + <%# end %> + <% if User.current.logged? %> +  |  + <%= link_to '成员', members_organization_path(@organization.id) %>  + (<%= link_to @organization.org_members.count, members_organization_path(@organization.id), :id => 'org_members_count_id', :class => "linkBlue" %>) + <% end %> +
+
+
+ <%= render :partial => "organizations/org_left_subfield_list", :locals => {:organization => @organization} %> +
+
访问计数 <%= @organization.visits.to_i %>
+
+
+ <%= render_flash_messages %> + <%= yield %> + <%= call_hook :view_layouts_base_content %> +
+
+
+
+ + +
+ +
+ + + + + + + + From f4b4bf40ded56a0e892fbb4071328be7517530d4 Mon Sep 17 00:00:00 2001 From: ouyangxuhua Date: Mon, 28 Mar 2016 11:24:31 +0800 Subject: [PATCH 092/423] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E6=98=BE=E7=A4=BA=E6=A8=A1=E5=BC=8F=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E5=B9=B6=E4=B8=94=E5=9C=A8=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E5=92=8C=E9=85=8D=E7=BD=AE=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E4=B8=AD=E8=83=BD=E5=A4=9F=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/organizations_controller.rb | 2 ++ app/views/organizations/new.html.erb | 7 +++++++ app/views/organizations/setting.html.erb | 14 ++++++++++++++ ...22312_add_coulumn_show_mode_to_organizations.rb | 5 +++++ ...160328022623_set_show_mode_for_organizations.rb | 12 ++++++++++++ 5 files changed, 40 insertions(+) create mode 100644 db/migrate/20160328022312_add_coulumn_show_mode_to_organizations.rb create mode 100644 db/migrate/20160328022623_set_show_mode_for_organizations.rb diff --git a/app/controllers/organizations_controller.rb b/app/controllers/organizations_controller.rb index da0eb8009..80f196ba5 100644 --- a/app/controllers/organizations_controller.rb +++ b/app/controllers/organizations_controller.rb @@ -56,6 +56,7 @@ class OrganizationsController < ApplicationController @organization.description = params[:organization][:description] @organization.is_public = params[:organization][:is_public] @organization.allow_guest_download = params[:organization][:allow_guest_download] == '1' ? 1 : 0 + @organization.show_mode = params[:show_mode] @organization.creator_id = User.current.id member = OrgMember.new(:user_id => User.current.id) @@ -120,6 +121,7 @@ class OrganizationsController < ApplicationController # @organization.domain = params[:organization][:domain] @organization.is_public = params[:organization][:is_public] == 'on' ? 1 : 0 @organization.allow_guest_download = params[:organization][:allow_guest_download] == 'on' ? 1 : 0 + @organization.show_mode = params[:show_mode] #@organization.name = params[:organization][:name] @organization.save respond_to do |format| diff --git a/app/views/organizations/new.html.erb b/app/views/organizations/new.html.erb index b0c961d82..efe481b77 100644 --- a/app/views/organizations/new.html.erb +++ b/app/views/organizations/new.html.erb @@ -28,6 +28,13 @@ value:"#{User.current.id.to_s + '_' +Time.now.to_s.gsub(' ','_').gsub(':','').gsub('+','')}" %>

+
  • + 显示模式    : + + + + +
  • diff --git a/app/views/organizations/setting.html.erb b/app/views/organizations/setting.html.erb index c0ca2cfe4..b11e5a780 100644 --- a/app/views/organizations/setting.html.erb +++ b/app/views/organizations/setting.html.erb @@ -72,6 +72,20 @@
  • +
    + 显示模式 : + <% if @organization.show_mode == 0 %> + + + + + <% else %> + + + + + <% end %> +
    公开 : class="ml3" />
    diff --git a/db/migrate/20160328022312_add_coulumn_show_mode_to_organizations.rb b/db/migrate/20160328022312_add_coulumn_show_mode_to_organizations.rb new file mode 100644 index 000000000..11f3fa22e --- /dev/null +++ b/db/migrate/20160328022312_add_coulumn_show_mode_to_organizations.rb @@ -0,0 +1,5 @@ +class AddCoulumnShowModeToOrganizations < ActiveRecord::Migration + def change + add_column :organizations, :show_mode, :integer, :default => 0 + end +end diff --git a/db/migrate/20160328022623_set_show_mode_for_organizations.rb b/db/migrate/20160328022623_set_show_mode_for_organizations.rb new file mode 100644 index 000000000..719dfc1ff --- /dev/null +++ b/db/migrate/20160328022623_set_show_mode_for_organizations.rb @@ -0,0 +1,12 @@ +class SetShowModeForOrganizations < ActiveRecord::Migration + def up + Organization.transaction do + Organization.all.each do |org| + org.update_attribute(:show_mode, 0) + end + end + end + + def down + end +end From 67ff9fb6e2cde66514800aba2c1bdc106c7387e3 Mon Sep 17 00:00:00 2001 From: ouyangxuhua Date: Mon, 28 Mar 2016 13:03:13 +0800 Subject: [PATCH 093/423] =?UTF-8?q?=E7=BB=84=E7=BB=87=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/organizations/setting.html.erb | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/app/views/organizations/setting.html.erb b/app/views/organizations/setting.html.erb index b11e5a780..39848d192 100644 --- a/app/views/organizations/setting.html.erb +++ b/app/views/organizations/setting.html.erb @@ -74,17 +74,10 @@
    显示模式 : - <% if @organization.show_mode == 0 %> - - - - - <% else %> - - - - - <% end %> + /> + + /> +
    公开 : class="ml3" /> From 4b6b5504cabd144adc9fed212c553c668173b645 Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 28 Mar 2016 14:11:40 +0800 Subject: [PATCH 094/423] =?UTF-8?q?=E5=8C=97=E6=96=97=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=EF=BC=88=E6=9C=AA=E5=AE=8C=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/organizations_controller.rb | 2 +- app/views/layouts/base_org_newstyle.html.erb | 568 +++++++++++++----- public/images/org_new_style/bg.jpg | Bin 0 -> 55689 bytes public/images/org_new_style/bg2.jpg | Bin 0 -> 31668 bytes public/images/org_new_style/con-left1.jpg | Bin 0 -> 6345 bytes public/images/org_new_style/con-left2.jpg | Bin 0 -> 4417 bytes public/images/org_new_style/con-right.gif | Bin 0 -> 1894 bytes public/images/org_new_style/detailimg1.jpg | Bin 0 -> 50723 bytes public/images/org_new_style/detailimg2.jpg | Bin 0 -> 33550 bytes public/images/org_new_style/detailimg3.jpg | Bin 0 -> 22446 bytes public/images/org_new_style/detailimg4.jpg | Bin 0 -> 32803 bytes .../org_new_style/header-background.jpg | Bin 0 -> 134016 bytes public/images/org_new_style/icons.png | Bin 0 -> 39862 bytes public/images/org_new_style/img1.jpg | Bin 0 -> 27550 bytes public/images/org_new_style/img2.jpg | Bin 0 -> 25093 bytes public/images/org_new_style/logo.jpg | Bin 0 -> 16979 bytes public/images/org_new_style/pic1.jpg | Bin 0 -> 57968 bytes public/images/org_new_style/pic2.jpg | Bin 0 -> 54611 bytes public/images/org_new_style/pic3.jpg | Bin 0 -> 34750 bytes public/images/org_new_style/slide1.png | Bin 0 -> 235600 bytes public/images/org_new_style/slide2.png | Bin 0 -> 232903 bytes public/stylesheets/org_new_style.css | 182 ++++++ 22 files changed, 596 insertions(+), 156 deletions(-) create mode 100644 public/images/org_new_style/bg.jpg create mode 100644 public/images/org_new_style/bg2.jpg create mode 100644 public/images/org_new_style/con-left1.jpg create mode 100644 public/images/org_new_style/con-left2.jpg create mode 100644 public/images/org_new_style/con-right.gif create mode 100644 public/images/org_new_style/detailimg1.jpg create mode 100644 public/images/org_new_style/detailimg2.jpg create mode 100644 public/images/org_new_style/detailimg3.jpg create mode 100644 public/images/org_new_style/detailimg4.jpg create mode 100644 public/images/org_new_style/header-background.jpg create mode 100644 public/images/org_new_style/icons.png create mode 100644 public/images/org_new_style/img1.jpg create mode 100644 public/images/org_new_style/img2.jpg create mode 100644 public/images/org_new_style/logo.jpg create mode 100644 public/images/org_new_style/pic1.jpg create mode 100644 public/images/org_new_style/pic2.jpg create mode 100644 public/images/org_new_style/pic3.jpg create mode 100644 public/images/org_new_style/slide1.png create mode 100644 public/images/org_new_style/slide2.png create mode 100644 public/stylesheets/org_new_style.css diff --git a/app/controllers/organizations_controller.rb b/app/controllers/organizations_controller.rb index 6cd55be39..68bcd2b22 100644 --- a/app/controllers/organizations_controller.rb +++ b/app/controllers/organizations_controller.rb @@ -29,7 +29,7 @@ class OrganizationsController < ApplicationController helper :issues include UsersHelper before_filter :find_organization, :only => [:show, :members, :apply_subdomain, :select_org_layout] - layout 'base_org' + layout 'base_org_newstyle' def index end diff --git a/app/views/layouts/base_org_newstyle.html.erb b/app/views/layouts/base_org_newstyle.html.erb index 0296d20b4..bdfec084f 100644 --- a/app/views/layouts/base_org_newstyle.html.erb +++ b/app/views/layouts/base_org_newstyle.html.erb @@ -1,6 +1,3 @@ -<% @nav_dispaly_project_label = 1 - @nav_dispaly_forum_label = 1 %> -<%#@nav_dispaly_project_label = 1 %> @@ -12,8 +9,8 @@ <%= favicon %> <%= javascript_heads %> <%= heads_for_theme %> - <%= stylesheet_link_tag 'pleft','prettify','jquery/jquery-ui-1.9.2','header','new_user','repository','courses','org', 'share' %> - <%= javascript_include_tag 'cookie','project', 'organization','header','prettify','select_list_move','org'%> + <%= stylesheet_link_tag 'org_new_style' %> + <%= javascript_include_tag 'org'%> <%= javascript_include_tag 'attachments' %> <%= call_hook :view_layouts_base_html_head %> @@ -29,138 +26,434 @@ showMathMenuMSIE: false, tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} }); - + + + -
    -
    - -
      - - <% if User.current.logged? %> - - - <% else %> - - - <% end %> -
    - +
    +
    +
    +
    + + +
    -
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +

    中国北斗开源社区
    GNSS

    +

    open laboratory of simulation and testing

    +

    + More +

    +
    +
    +
    +
    +

    中国北斗开源社区
    GNSS

    +

    open laboratory of simulation and testing

    +

    + More +

    +
    +
    + +
    +
    +

    中国北斗开源社区
    GNSS

    +

    open laboratory of simulation and testing

    +

    + More +

    +
    +
    +
    +
    + ? ? +
    +
    -
    -
    -
    -
    - - - - - -
    - <%= link_to truncate(@organization.name,:length => 26), organization_path(@organization.id), :class=>"pr_info_name c_dark fb break_word" %> - <% if User.current.logged? %> - <% if @organization.is_public? %> - <%= l(:label_public)%> - <% else %> - <%= l(:label_private)%> - <% end %> - <% end %> -
    - <% if User.current.admin_of_org?(@organization) %> - 配置 - <% end %> +
    +
    +

    北斗开放实验室

    open laboratory

    +
    + + + +
    +
    +
    +
    - - - - - - - - -
    -
    - <%= link_to '文章', organization_org_document_comments_path(@organization) %>  - <%# if User.current.logged? %> - ( - <%= link_to OrgDocumentComment.where("organization_id =? and parent_id is null", @organization.id).count, organization_org_document_comments_path(@organization), :class => "linkBlue" %> - ) - <%# end %> - <% if User.current.logged? %> -  |  - <%= link_to '成员', members_organization_path(@organization.id) %>  - (<%= link_to @organization.org_members.count, members_organization_path(@organization.id), :id => 'org_members_count_id', :class => "linkBlue" %>) - <% end %> +
    +
    +

    北斗项目动态

    project activities

    + +
    +
    +
    +
    +

    2016.01.30环球网卫星导航仿真与测试开放实验室落户泉州

    +

    卫星导航仿真与测试开放实验室是国内首个GNSS仿真与测试开放共享平台,北斗泉州实验室由国防科技大学泉州工业技术研究中心、福建省福信富通网络科技股份有限公司与开放实验室合作共建,计划于2016年3月建成并投用,将承建国内首个北斗海上数据应用中心,利用开放实验室优势资源承担相关专业人才培训,联合所属区域高校和企业开展船载导航终端北斗导航定位数据的采集、分析和应用,服务于全国北斗终端测试检定和相关应用研究。 + 据介绍,实验室建成后,将为泉州以及周边县(市、区)的北斗产业应用发展提供相应支撑,并依托泉州的地理和政策优势,推动北斗向海上丝绸之路经济带沿线国家的推广应用。

    +
    +
    +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    + +
    -
    - <%= render :partial => "organizations/org_left_subfield_list", :locals => {:organization => @organization} %> -
    -
    访问计数 <%= @organization.visits.to_i %>
    -
    - <%= render_flash_messages %> - <%= yield %> - <%= call_hook :view_layouts_base_content %> -
    + + +
    +
    + + + +
    +
    - -
    - + +
    @@ -168,41 +461,6 @@ <%= l(:label_loading) %>
    - diff --git a/public/images/org_new_style/bg.jpg b/public/images/org_new_style/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a993fc0cab17d3d96b0eeb0bdc037ffec63cb308 GIT binary patch literal 55689 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 bLAmqN>hDcsl^F#O54ZQfaXfim{Qpe=Z`?@3 literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/con-left1.jpg b/public/images/org_new_style/con-left1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4936fa8571a935e4b0a0ee36ef19b9157b0c609 GIT binary patch literal 6345 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 literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/con-left2.jpg b/public/images/org_new_style/con-left2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7b7f3472f94cf4f43b3e64e34eaf5bd99f85697 GIT binary patch literal 4417 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 PR2hq1&sYSrt;zobYF0+f literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/con-right.gif b/public/images/org_new_style/con-right.gif new file mode 100644 index 0000000000000000000000000000000000000000..d49c2003ee90dce27e4573e8c13d87281f81529d GIT binary patch literal 1894 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%0DPyipmITY>?0N%@GbI*J4wPi=m67Q%f;SE_! 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 literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/detailimg2.jpg b/public/images/org_new_style/detailimg2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc51a17149b7e0b279f36a6ae83554ba2ac9d480 GIT binary patch literal 33550 zcmeFaWmH_-(kR-vL$IL1EfCz@J-B=DG|)&lPS7M+0t5~2uE8z1LkPhM4#5c)+;2mY zefB=z`R={%-tor!@v_EPbJnb?S+l0DUR15(cItMCcvadRXaxYs%QFIy0RR9J00#yR z00V{YZekdO``io)ll+2hpfJNP9#|;M4g(7yh2~)B%>jk+pm{j-1_r_3*Ug5)U!b?& z6)NBX{l9W?3kNex3f1Qh&JK|04vrL(8r&2*Kzj=ZHwb`(jh#n;jZ=Vwn}VHFfRj&v ziybNfs#p3?-EMCI0NC`O^7rp3e}kb#=!FP?`=uiywDh|lWYA9i?gt$d{(C=QV1LSE zf#P9*!DU4E!T@s6>~1`M=eJY0I{@_i9+*ff0bp-;0hsqCfQ8>3>+KBS6#yL>85so` z9R&p)8x0i=8y^cD9Sffj7Z)EFmk=BM{`!^uEc|;4gMoℑ?|6Y~KcCMG7{U4n`C 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 E032-Z6aWAK literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/detailimg4.jpg b/public/images/org_new_style/detailimg4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22b3e674d25c1d48aadb083fedce24d2b80f7ee1 GIT binary patch literal 32803 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 literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/header-background.jpg b/public/images/org_new_style/header-background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..998acd6d5de8c00a78e82e92d467b2007f1bdb78 GIT binary patch literal 134016 zcmbq*1z1$u`uEV?3>`x^GK9cT0}S0Ag2XU{Gz=0-cXxO9AP53u0V1g&Qlg+zN+=3~ zg48$a(c`)I-1EQp`SyO8XV2Oz-}ha=x7Kj}?0gx(pcdrj3;<|p2?7WKe_rSB093F5 zxO*@F3xJC$mInaNmvKy7kw_oNg$rK(q7F{pjtEh>x95c*2cHXIQLzgEd8Hs92e>-| z335cZxOpjXez<*~6XfQkz-b|+C#L74ig0z)4Dmylgy@^XL)_uAPMk`LAo(Cjkf)C) z0_gw>^7QcXhXg5be(xNDdHz;>ffMw-3esJHQ~BGdAWJ<%kgB&I0wg7RQ3Nh_Q5qyI zD+-p9mX?$j28oM-r7nm`T#yhG5to2Sia{jBL4RDFn9=;4oFT?A^*_eKd{f~3V^M*D zfueyDqTYTk7r?TzvKPd}FNlkaU}}i?2YVqMf<(OhxqkKlL-@n}+<@Jvumg z2Ot$VF*E(K1WzA5ykJkYm_nAt#J-tYiVgcni^rof3Q5p{BNf`DOCFm*L`DRpsKDKJ<~N=8LSO<7!8 zT0#;msV1o`_Oq>)mp{_M3y%2N*6q)>lKPtbSzK-_+t!w>mz@`hvP;q$XQ2pH@P z7RN||h_kqig9sRmkP?xVkZ=-lbd+(H5p$N6k#&;d{G&Ha+h5f9|LE-kX2KV~3BYdx z@v{gcW#1lui8toUuML9m!t4q^jQF4L0LZ@!HNdG4v(2#1UjSkN__(;Zc)0j@c=$y4 zm_HIie0)L@Qet8fVq#KC((e}~DLDlt1vx1V4J|DV4GS|fGYk8#3yXk&fQ*!kfs&Ge z2}lKG`t{OjkELjSTpY}zaEPz~RG4xOFtxIggD)oyUZi-Y3N3zRyD?Y41aNBE z(N9(KV-z>tu8F@?R>uI(#VVL70UXIo^<&g;qko&iH$qWiQ*+?ZfHD1W(yHK|KL?QF zU}2_;Lj_O*oQ2HhKM!Vt-J#SUp+Geec1_xvUXe)AFs|AfOhK}nsY-ZK5svFUt?^sC z{4yiJ2E937W>dBtIpXOjb=*4SZb-yjix~A{m%FzE-suTs z?LpZzDKvH>MgmFlAamqKI5|XPSYsf+i0^mgRua}UlIYLx(Ti2_yU>y<0{;KyZjQWw zp3#0upxm_0ST8cg_;}9UaHC}b>42&?H&zQVK76*6hR_|KGx)rITLi9Hc2$qJcNe!E z%W-d}ML|cVw#j~;&6)bD|Fd^3jhBY$Iaha7I=DFdZv{N{Z}~c0nR$F|ZPzzW?_fwO zzzsVb@2P*{=J+7-(co>QmAZ;XJ}7{VU-FA?Iv;%2wUtNCiGWWbJxV-^SE+GIgL*=0 zCzEd2q&upL6&t*Y+F~Mk2h{VkIms6-m37v#axJNlG9))u`GYt= zNc6vaM)s;PRY*ZgDp>wU0{$JbD}Qn2f0@F+)=jeCMB}bgzS5i0`i<}ZRx6}JA0rz7 z-A!6fYwVZ6Qt_|%m-4DFcjD=GA~W}Ql}p|-5D2lF*EoFWwVFFg3u$glT5EDZw~H;T z)N)OXBvRWz(oQ;N9V$m^s+QgGu9&tj!Fma7kNh_0EvNE!N6S16ZoPWww*%R|4A&Y& zwCF$d8@3hN$o0@4MidiS3U^XrV*w(dAWA~qe|o^jPpFB25#o}|H4|^fzc{dkORl3E zjG5{PjHDKrIW@uaFx!v-1QrS0My3#JxM4oj%(-8kSE`-8A!QwODMM+;x}>IOE}Uey zkD7GS_8hR-_U4+}Ie;dX_{dzh7G$ZTXMF1P{_S+4_}T`3yq-B9+2yiFa9hjVA#1-2 zm)Pq2k>%t8-g3Yw`p%7uT`5gsN(@1U!bcIHjt5D%KQqK;A zunegyczJUqA|RmQp-||BC1c)Oe6!UDMsAM>^-)+;%7tk8pvWds!tuu^iQx-kr!~>?M^Yiib?RqPi zL_?9AlL9Dksd(s6Ma!*8-c>;koM}W_o-FYL7=|kU<&yBAupOwHH-iy)WPxdf-3=Fg zLvUid#<69K?#TeYDbw69*n%nGe zpk>h#BI%pULzRzQZO90a4M*pI>=OPAfV7gKS95we*{8j?vDss>K6Ql?&)HyoGT^W= zgM3|2nUrXY+l)qx)Ohh476Y;!_Z08A-4T9sk;@HdeHP9%$8mdqfl**)k!Vg_t}z+N zw#;wmcujsQ`5x4G|O;ta`7+3!KR+9PXXQn_SE?$?Z6H{+3 z^Z`umwV04p!&^(&q)7gY196gj?s2-0gVxRgek1XqVE$IWU9fw}Y4Pdv@?(ETmLN2# zaGha_lSW<0U>z6tZ-Vz1VFGMaR5-&vOkw|!%Ool~q0Gnvw#;5NWkOtN#5bt}80l^q za{qY#5A0AQ|F(-Uk`=XuGB=1(&04?p!jxK-?mb$7^FK8Ci##)mCTT|gJzg;WO>y*6 zz)rAg9JJ*?xhlp9?8uyNR^t79Jqa*vx>r`R7lG%(lw;1&OuPteb#AVbNa^6(v}_$N zSCF)E?{w~{#8Zc{0&~HQV_k)dS1oj%dAMgi84Dih->$25knOeXvTCTr>?UzW+RT62 zEBH87S%2(0{E;SkD5>oiQ^PqBhwO}mc3%#nbam@guhJ$-tYa-qJ zB+QvxkI=i8JBq1kOY|;WJ$}RaQKr}5KAuAm*D(xn8TWi)RqUoyysS^DRDUz36<-`I ztf@dR>pRa@KXkHg3J)tgx$Y6iYuK@o<)}Ts@i1ND0;h%3*r>MnTChg^3wA&qirY7X z8_;iR(Y<5*KpzrOpgp;t2iRd0o1IVMxf5YQV|`Zsf@+(`SHwwmq%?#8_AMjf z!-;tND)E`y0@enR%5)T3R;?Q151ctGvZ;>+qN;6PWZ>QIHr>0j9eHt3^8oiqMAQ1< z-esJ9FsFQwCZLo%$h{c$LkwvDf$3s8(lEoQmUw(}lK3gy?-i3M3BNI)volsA2f-ho z63EX5`xE`tOw^+36%08ke~BQz3O|wv@CP^$F@sqDIvx&4;{Mb>^X|XVO;~{F7i-&# zpBRv8eL=jOHEi%3rtS|Pe3;4|oR`|)crE;F5v5x7=6Ur6po2B`gMfgX34KQG_I@8X z;1GI9&EEq8!ZTblJWw{yk-0IA&T;I({RZ>DePH9`7ypu>?^9y@VTCnxI`txWjd_I$G3Y}n1e7zO&v zw*Nb55J2N@;6jry_QOxE4knP2;GhK{-#6R0ok@s`Q`IT0z=`70@>`$9cm0JN{LtS7 zkCZ@-^EU-T{;kWu!IFsob4I_lihl0Nc&!XEBv^fA#Z0>qhJ6m`H@8+R%vCA1kE%@; zn!Fc9lA15X8r)KtXUzv)nlWdj+G?M1FIwj^n`9-*>EmR;19q7%h)u^4u_ zW{68w%yC6MsejStkC|e$`mdr0HEI4oD}0|bQxhwdiuOj&XkHf>mWv$7$?1$r*7K)k zj#|D95f1Hs_|jiY?O2zND^%rRYcN|_RN5K;iKY8{#`eWuRi%&MUy_0se_S4sT zAzf8QGzUV|br$BlPEsFDEa=nSau!*&XEue6_FtjWIw6+6@^RI+kXCg81}x1?3RFS@ zl|m;}D<vfJEvRS##ZcRNvAjeC5< zneV#^Qw>8d;+R3FHNTJiH9A>WKf<`bxBUzG{=(!RGW72Q{4XUHG0=!#ohpA&ha9$r z$#?lCE^aQ^sONT@5}T}77((ha5p}-R@lNVj)$tw(&*lyzY{Hu9Ald^y2yib{A;(CD z5l<|i@c}WccfmmDy~zOc9+vZ-eo045;>B&Uhh|0+6dfJF9mk=j*SJy&S{VC#>&|3$ z&CvCTMO5g}A&Q(kcg!CZ)tkYtyzQjL6 zJGWs>-AHb$qooM8LHwpEv4oqvGB*bmnYp7co-yNv{$$nu$_|H7mV4h8;a9&??)~DV z0^O2X9HGR&1k4cCQZO~SNFP>@kVFXNDVTOSIWI5ixe`H&C|zdN;4)=u&O@DY_#e2x$rhaOuKjj1pvhNU>P=Sd#QU5kh zC`n|)K3*SBevSzjRkuFI6J63LQC9ITNftvVK%`nOO$;On$sg9Con+B z=&?+@Bb~c($I7r;URMo(xq|Py!>w)l+LGRud&bj<kcjeZDzaS9;<9_W z(LE1%C{ySIpRV9J#Be!F5X`U88?Pj@)ql;3$c^v@NxoSx%eueopH%y~z<+_w%HLK- zWjaD#nUH-03TCd+2$PzfO?0sLC>z`-@nz}Yi1vzhARdGz67*Z9Bm#O&*|ywL*?Of_ zqOTX4U<*b7$eXT{+p~193!=)g*oV~|<*?SU61UlKMU6ksm0jj9jpuweRvNvinr(zf^WP4u6w0UJ$5HzU0nRY*i$D%xZ z>FuoFX2Yn{Ul@s}(mSCdhHsqd8aY#yI4`3)q+BD7hg6fUgZh`+`Y8*)P~!UoK+SZG$cORQc>lGB^OFY@;Th!gch@v{ zip@1dKF#(o_;*bgj33bK)OD{reqqWDl~|uOUE!*F+3uh{aCOO6*V}ZGRb@s$=~;Ax zaSbY%d|RsLO~+=`1H{<8K3ox2wq1sH$OKho2oAbi`e837+IE_A@jTU#vnAEl!r8j@ z_OiNRc~3AaJ^6OGXfOjA_R7Y{Ph$P&$#WKp{%Nma(GCz(iH;j0&0?>=NU@#Qdgy$> zWEY75kvPI?+jYjY->z0BE($m4I$4cX&Hsm-d*?4AZ zb95+tjZqt^1@>eymOU4y>bVO|ymjx!1o0Vsy~>ss8#O+6bWRACU~E_8~7N+DQ6c zL;Mti$PNL@5nN~la}1CZBL+bJZ%_o#=66i^<&_C!>2FYTWWDCh0{v|D6G3pM?il@$ zOzeL{u74;2sQq;1z6tpcJ)yk)Nqq0}q=BM%X=}xj<6Mp78<(RN_n_owV#H=Cg9|yc zLsgrEtsyRBl^M!QSCE%&f$LwaOTj_jED5Z0cfsott0FlyeiO{7P>sv(lrVz^lzvif z`(~3hFVA>0@irU13eAun+ z?1pTu!pSIrk?(XO!e>g*lX)=KXQp7>S923dAygCjG>5f2aJ*&}%1xYLMlv<3Si_GIlacWcS`n7YPb zV{;;pnm%gGOt1d|c`^{=+5hPu{AX_d!sI`^rtdI=uf_j8j`pLOZ)T!zkD9n{V&+Wg z7|~B5{caB}ivOcS4oGsk@)xc7Z(>Hu`j2k00txSf6pP9UP$wLWVB#m_x=A<=W z?BZkuRwN2pMix@3XjI*3qE?ul8CEk9?G~aFbrv>2HnLoe7s^d*CtGr1a@XXw#zPt3 zm3I*6)SSASW;VCK3jHK{ij5wRJBjvvA{oNpAy#UB%^B(nX`HeARNH$wWShF`@Ag~7 zziy!)Fv{R$%pZwCB^m{~E-^+e$pOErfu!)&_!!)a%3dc zJ^giC%^v>ska?PY1C88aCH7B7z)&{bw{V&>O)NXD^@hiXua(|MD$MRX3@Z_`f~#6K z!FLo*D6!4~HHnB&zP$47Idzbkp3ghzteso@g++EAk(L#C;O8=%xs$Shm_4-Gfz@3$ zuC!o!UHKY=NI`f1f(heHEBDv^Paqr+SL+7CDD9%Dtl@_`7J!7;c1>J4JH2y>zf_T$ z_+J7vYPg_p)*qGfH{J`}D-Qkk_BRmtBMAAY#n_Zj&T;RtECm`mm#zQxH2`dwGAOC02;yYXB;InESh{HZ)bFk6&dt<^McfXP)pbly zBN-mASqf3ld-zvV=!KMR*R)s;EEKYt>s%hQ)_g@=iHy+#kmVggLM-MKvI&Rvx39{& zzwzT38j!ch?%mt}6voiP|J(Zhvwr)b+=0`n>C9R*7WXv((F~@GN(Z2XRVKS-_!fO)MC3L{*$2A;y!N(&w>EC7_lP?!wP({Vdu!_DGXN z(uCr z8a$CT7J^Sr|CVu)?JgTh`hSGxFpR_cX2?+K=0h|8uKHiK-tXM{dsF7``uOi#$;Gar zo)70Hs#|LcCYGx1Z8cU&jgXJ=W)?7!9oM1wE;r$A@stAL`b~r-(HlweqID>Ka$6%~ zRZYdQ!N4$7W`gVMwJmPcO?a}&GN=xPrO5LoL(fLHC1<>J4mos~uiYE9-7QsCy&;(6 zS;Lmv^zPHMk735Bi?_vu9)H#dN8Q=$LH`esfotA5k|=RQ0ehZ*e-kwoV2CePauD+c z=P`1x=zh-Okpb-+3n!0Qlh2+wH3@+_{cQ}x#`Ho=+^S4X%!2ra+(bDzAR5{gU?vj` zr{Yq=6E$=go{=8@_8KPNz)I;x$!uI?Uo4lZykMXs3#;10bFt1KOwG2S!(n9rm8PNV zvz5V59@+_i74Qm}veDBLtQVqdYuc|on75)}mpbO=!>4lF-v*s@RHPhHF#piyT|96ZxE@H1+rS8jW5Uc2h>aTo zox!dIxl;d7ZIakn*iZ~w@W&pKa%Mxvv#!jUUm!6MS+Eh*L}kfxYO{>lud)SPOt)vX6q z)uI7CgK>&FGSoi-jFK}(6>0ptXKeT<5>R5%ez!xNeg;u~$OtV+SGO3Nl!MvY7{{kh zi)Rcsfs*_$^7E6guHOv~vfEW9AOr^`OKHRsHYjQk%=(+z|9^4)XIFnORb()_kCsV2 zMQw&;=qCW~t%O$WNNvrAP*Wlt=oQ0@cxi(m5?1wCd}r}cQwwu^v0GuSQJY*BZ@+&~ zGwi%;-JTkpKj&V^oR&-{E!Z?%8re5xX}wWTw=qIDW>(1Na9BLL z(erG(;zVJ!X)^ceIY9GvkHy%P)sKbZA9LInu2Y)K7L87G!UvkOAR*$ z7zos#C5LO_?xDAb53dMfGU_FPIMB9equh_VdEIOihI023mlb61Pqm&^9yYE`ouvl) z9@b}@Dw2QL0t5=YVImlKro$MyQl=+!0(>g`VXZA@pQ3M3apmQeAUoAl;yJb(rzWFy zip19#x5^x9!pP^3<7cxUN!^m}GxuOStrOdRSbkVv;CAVwRPv$9Q+xd^k?v&f^#GU8 zGgSsc!5VvG9CP<2_ai@I9o&Kj$eUkhn!Eo3sZYJ0&9BQUtNK)p7aewjD}n8F=TV4I!g1ypF99FRLmGq|h?;lA9dboTN@ zw10 zbQTZq5<6PaWFHHD<>r*w^~^j=%u=G$RX0C-GTNMw=M3hnaei08el~r7@6F0+T6HmP z|L`6r-RwQQpzD%pyYg%=r8y%T>@1ijs+_RXEHHohp&`1e+>BBj5Y&w4+JsAnHy2=? zXuX9!&236rDn*nuQmUz7`Y>H}1kRxTG%L(!PiU)l~75g zG|9z_$?hdi!LaxlY&s9djtPFp0(=1szJYaB91ECvv9bXp__{cuG}yW(xk#FW21`6=iBym8RxZhs`MOjqk4lr>NY%EGyj75Q`Zes_vx!BP7 z4Qm7C7H+dzM{ewt+#p-so?{+D^lfe}2vePmLe_qD3)F+%;q5*t<379ed z&F8?BMCM_1*$*}MXNQ=of3;cu`i;PamEOZ~di87{KYEnj*tsH_)6^1+zxpwrI=QWl z4y;PO5-cSS#?d2A%Fjth&_0NvYtgvMdZSGrV>dqA{=&g=f66l+-vdiNV!?kCq0V~8 zX|moa_1VrBjet5I85gX9$4zO51n>7|{k!hCPDwH2+6;%9PBSJFNvK+RHZ5xJb2(iB z&PdATHXEy79Vpay1|JZJlh-xpsdL(Sl_8v4Tw!F2ucI@20?Kt#j-Y1-E9SKtm!(N| z>$ONBcrWq<9LR&_R>^erBQG(`i|nQvul7&cT9Dskl|}6IrMI6ox$EJs@>30NPK^~c zyrtN9G1yE!e3_5I)KAy)%6 zmjrw|wa-e}QxgS=Uu@pw_OsQ+4IN=*U_VTY@95$xUp!#5*+0Ik<~X<8`s(?La$!nz z^r(w243&Rkf8R=EEbY~MyI3Q%A4*Q!cLp_mIQ(^SpjmAB{iCASuXXA2l8{B8Tml(= z&sNU?k1R-Rxot!W)6sk`bc$)VdERD?w0?vrI>zU4X;PjU5&tQ;&Gj@X?K6|tCx9|^ z?p+sp#G8fj)a;bk3P!BgqnHL>)J}k2h?*Re;FEoejJU{0TTzwX`d@x|Dc1xZpOEVP{v)X$)Ea#um9=CMk$m0OT4$ODf0+Y}=liD-E2%5E9Rhtyl&YmN$R2?Q!XDl{L^DluzFM#5%W_ zYk_u;si(_)s&_*`gZ=S?@`sD$%jvIG-p+Uz9ZsJK#a@l#QlTR1g7z7yFHv4rU~d?S z)n80M6yi7ukvJrN&P!dQbva7n?Z; zR5~i1uHoOc6=$O8TV;jkTd|3jIkXC%-s0xrUn0R(ui`T|_od$7=>9wboTZqu`8-Hu z&5H!IhWUJ6VZZfW>0oPbtvx6iLhyM)N2%9nufTxvNw|j##hF!Tk*@*ezTL6i8nZIC zZD)zepaT2Z%#n(MRATrz$n0d&m*DgLF^aGD=YTg!VH!Qz$L{O#r|c`VC-XA~XNyO6 z=YabBk0zfKVCR7M=YU+7Q~8{eNv-Z>MU{rVQgMLSvJxaDo+5hk29B9=0mo;HPYP;F z$ARmO5jpK^!xfmd;hszyjbBK8oVKqUzAhN%oWJ3B>7?-fN#oJ%Oo?uU!z!OPS`wm40W zL9PihjdeI|4LveBx}rR!EQXj{n?Z)wc*RJ}m*0NHko3nLDTr@Gmce8CyN}1nfen4a z{R4>qHI2mZXPo8l&ocdn-#9)m{w0bTD1&#^f!9ILMmh5Yr@USbfyxllvwz=mK=NvbhX-BY0lh}%}=kjP88nBjb<|9 zw!XNaW2{m3+N#orE?{a4Zb8DicY^{Otv#65y9zVjonfm+K;nA1cb4**HZ~uE5>>xO zWg3v@safXzt4BdK~+!Nx=M!hJao!m{! zzGJbKuA-D>sXYWOdex#mL3%g>A@f~xxX!oQwE5Wi?j;5EnM&^lS!AT`YN<=H?a*i; zj1a48{j+*+o16wI>pZ=MGTR%{2sU(bchuz93)t9{Wm?nf5xcf;cZ(*OR>Zj^j?(VA z=Qfire7#=S6GW}WDrHe*+1!v)J<(>E@#OHcP$)Nj$PN2TmRjjin5^|UrG9+J^aX=e zXTD@lSZM8FpwN9`Ml5i9A~47(c3Sn1D_69gPR9Ieko|rgDHPh z?0aof{e=5He4Ae5*9TiWG$~Jo1E^ZES2>yjjAdIooS$8yhSgHq4dNRc4;y);xITg< zLOc7cS$dyv8s$SRr5$bIK#aG)pP?dDbx%WFqxOdH{-yPzPdAkziDZh)9Z1N`!AkKD7N|R zXS}QN8t(lB9V>AU3>msRV!d+$ests@*Giq32+{^^uJyRr3U)YqG-$)pl>7CVUOCh+ zydN2iTZ}$CaO@oE-k&X67V|7z_egk#OnTW44-t(Wkg~+>ogZr~AA1pt9A>FRSc##A zaK{bd`xuRqEM&MrnVUD{oA`Nc7Z8+jbFbxe;ZD^PT)Jl$6C2^p%dMH?_wYFmsi(+Z z-(?AB*ktc|hIp%DorqOA?*{D26GxAzEWidtxdTbk15k$EEkrmrNFk=4&5=~fy2hb~ za$gqnHF2Tx<>uy7pD;NsOntF5`3)OAsrk9Q_sN_fhaVie)CdUVg^fm~-RF2V8GO?1K5 zVQ=xyXq|t_aMuXYXrEBq#rB!R)4SQZ9vzJx4>%}cQqEpuFU&uIQ}*6dgTK66OuyZ+ zIv?Ny20!kuQ!7s@+rDfr@d1!NqZJ=v5O6(Xva|fSd5@IF87@%TAMu2| z)+@kxIB*-xwOQg`0^vA2c>z165KyY*m>`3AIGUAiu3HV0uw$1LwY%fLCD2Q_ z!@AM*#Pe>AS>!o1+S0%k&rE>uE6q#Xpcc?~JQEs`H{=p5u_k1S%$!}_| zdk=&}4tDEFTkOY~U%amIU}qj04AG(94nJ+)eFL!ti^>m%bj+VMc1?ugtZ0#CI;n<~ z30jSf8-{z^E7i+ZuTtMU2Qp-Pf1m zJ%i{p#68E%`Xp|ZUY~mlR_IlPzpmYVMUmhK;wVPUUCZ!6Fc3a0!45%BzIe-=yZrI8 zRq8U+j13DhgF?rKgO5VCt^@&qx4=fOu8y9SMwf*cZND;XI!!2*cgc&R>lr;L`N~ma76UekVK*FUmN!KRYpguk|e4UP{)z;Q2O%I zQ#Zv4R5)Qg4`xn$Xa;GL=Sl>|DZ%(7e|QNje=4JIUIXX<5YL08EFotG(YRIVv;eQB zYVDCkM^r7%9kOm66GldDwMny5SHc`Ru30f-ENmw%gt`Rgm|2%W210T$kvEQ4*%4`- zPZ~-w_}pu-gy=XV81?Ge>dcYf3$}}z;;Yj&RfW45a#wD0d5s^MrD-0cE}enHE(bx* z0eDF>0UE~zPa|fA4QtFPZwx_))$ZzEo#JpvWPd|89K}`4dyj6svrE@jms=K=I&fz$ zB&{vmpV$w66kxkrTrGF}Z1?8ZD&pY<`tt3ejUGq=H_(^$wFX=7ZA<0-S+=K65Gz6~6r7a@o74S;1U{=Ul>zXFsmy9C?H@Vtd2 zoCCzf=jDrnKgGyQ*)3SkKfc@qPoV?ddLBE;6yP#!-LfgO{iep;a=s`rC3;qbkA2q` zF7@1vx@sid)L8-JcX%h|aXkh^4cC=N7}>s}G}sC%#a(3Yzq&qot3W(AT-uXYBc-3? z05Mhm@t!fjQm*Va@a>NDgM9Xr*K%oh=jG@1uCACmg!YPy&|Mi$zJeZ2MDafw=M)EJ zeYo((La`F}HQW&IB@HO^*;Z9E+cw7|XgkwUY|q7ez%|FQfIGH#6%wX&^@8`@7zscb zRbz|t;W{oZF}Z8)!+Sxg0*}J5+&mb`eMHtjt1KG1lVC3tu`$9B zwpE!9#PgC|xWZZ4;DT_JN^3a`MetE+4mLZuqk;HQ3+q5uzOjiT{lZKBiS?jB}YiOopScT zWZZBGNy43gCHMQQEaw25tI_X`!0pLlxNUN+2uc_%Q8A0IMx&8`e)zzIg2@>{@Z31t zRX%TRpy#H|nq|m{?AHi$H=t?FO#I8Pq=3S3-m^n8-XL>(Wp8tqp?&oUHu`1>*`sz3cJ9f~?oLMO5JT*1fM`ag&-S`@$#G zIbc5)31`$a@$s4Bh+k=MdPT#FkHd5hFuNEUb7sZ<(N?x)PS)~i)fAD~HqDb*2oLmW zFFV8gm2C!enNyxu=`=@;?qLu6Lo0$Xo9*<0*ZQyZe8t59a`{ssVc-da{K`mkMSXlw zuA}Llk+esuty&)^?dI7ZSrB(T4j4{>!8h5|e7Dq(P&TsRTNMztuBR$u!WA*sZ+7P zRqZVFmXc-(Z@fLV%}xDqPWX!XLg2z>tr$`ml%hg`*7~iiITd^7c3VxLx%gI_G-q4H zct>N=I|;FMRt1QR?foGy_cuJDS)w{^(iXNggN(T;uKo&B1U-gIK2`acPhXrb*J-dX zx{hFh7sS}suJPkIT@#9Ui_B(HonKJUYXs%#b1R1X2cc+u~mbrcujcp2(MJ3IE*|JLV=_pS}FlR(wGS! z0w>iQO*-N@E{O$H>*R1_YwLeCutVVHY7yrBfK|h8#GK0^gN=k$HD3Y9EJEo_;8zd6 zZ5v!i2c@d--aG+r7Obt3%f-eOFOPvUDJn^$86z1-#C#0-N7VJ-KZ|Wh+vXx^#--0- z`fSD`5mUKutTrEN?{qyNL+*iH)wU4B9sKUqRKMfqC#S$oHbm}jNmU?8Y+9ye=W#c| zF@6W;l;+$~o`t`z&inmtr-t=aOQzhsSu)qi&sAC>2H5sTA(LiF8cN+{yq=v9>UI$R^soMZX^$kSBS1r|He(!FcPp zUnlK`ox?vX8mDA1=ys+TZ9NDtXz)pSVQ_*s-ZL+?u9|rZ8}R8WyV;nAMt!zh^@}DP zO*VlUem-rul-zWPc{DE2i%0*LxT;D}*03 zb=0O@sOufPbZHkt^`c*xi$JNiL~7k;@Ls98%YnPi9$dx>YxF^c%BHd04JF^}9$`AK z9v!09Z->J;KPuYs(eNp5w}Xc+D#RZnu~$F^_v`s2Q#VqEn&SX}g8ctI~B_~j2eJk_?BG62yOdYc3uAr+$WLA31 zNq0B*X2z~i>1OXZj%IFVgs{^kpK8554%@3quWevguI0j|GKg0sQ}v}pUU#KzTM`b^ zF|}$wt{V=WC5%xU&UBf<13vb6S_SsU0(|@A$7%$dvWc58J zx4}V;mw3KNwzXo&xTs0oKALk9aBO}Q*FH8XZSAC%r*fcc0%}F6NxZsZZFoCz+61gvQf8O%_{H~aHZX$Q0b|Hh}Vz38#PU!J?A|nm;qW-1eHfg*0%i(G8 z-X+HtGe5YPlz1W_XroOGh2CZ`I|m^B#yTbK_9!TT=r(W^jZa>5_#FwM&*P`{|#mSHQoihHHS z!eTW1_+|qBfb|(qAV#B=&tC=RSsY&}cHm-ES4%H+I`~*>kYAh`khdTw%xmoI*Ap=9 zCq!`e`R+xV7yL$FQ*QUtu!Pi(Ed;aX>$^Ol-SbmeklCNZu^^8?nm-lgItMH`dClRR z(2E=)h2_hgpY0u(f#y^zNhkMhWii_K(GbuU2YY{fmI)qH?U>1^*(X!Vh>l+9$t zi|}1@u3&5>k2T5wY2b?!`04cpVT-(TfbDozE)s$T*dTymPPuP};0(CUdy670-440uE$pY(>3rF{dQ zo2qSy#@wP?ghT96_XCC7?eFUDG=rDfMA`M5YyEv(W@XnBVBq3lOlo$Mf8rK+872vg z4+o|-8_DjyW%6Jz@Ktm#>rOL%eX&S{=j!Y6j9aLz9Q(3fl>{WYp z-#K~PxocLZ!Oskr8P_vwlqo;iw0N{--ej0i8+FS*M45LpBFNmi-1?LXra(;!Ml}cA zeP@I%jvw=)El2OAC2Y1NAf7R+3@R1Zbq-nyit`eNEN0`h6OTQ1dpB@>onGt~K}tGi zH7!S)6Z74~&79UgQ)kVlZIWZ^3yIsJP1-3kuvF7#!Jt?$vOqA>)VP6C5}PB|zQ=26 zR=qgAslgtvA(@ju@oHF;WRHbI^e2GuW%tXuES8f7{?&~^SFXOfRY?sczt#e`F0#i8 ze}mo|*3*Rrc+NWb!dU}^G<}$wQm-)M8Tm!i!p2m3sIMZ5W`c`~mBT81&HKk>UiUrIzVrMZvNrzl!37k#zblyH{KWPIUkO2)_Var{}gNFu+1 zoA+-i#b6Szz+~&8z>%VcObD1g%2j~t*;-)il#(i1SY0{Cvx8$F5(=ENHM}?CG$r#W zVFIW4;G;Rxa(Zod@bHz@{+N<2U5lQt{pihhUUCf3V|NV%oOovKpKUdyPjZ|fZI$N2 zhczbM@{Z-PZ0HlvT~!EgEyLYyk0dqomjnU zX=I80JjEGv5S@%8>nYmvL@(O#7tR4Y$y=F07L4jWp9vCeEl~y;=`6*U&H;rN z-rPCu9?$Yi36?t)9&MGor$la;zV(i!UZ&jnW;Ml@P)$Kz?>l;ZM}J;pxvZO-lh1FE zbq17}&#LJ86Oc9PN@b*UBKv$HY;6lyctVht60W5*IIkjnMS3sxd*&Alt~2iDSf)~x zBa-P%rS&8O3Z`!=**)JsG&s@5ME}zKzivLj#FWOBziOTXj`BPXmFCM8)~l9nfyrZ5 zv+6zBBIO-7vuzpYEog*8G#FsnE+-~CW*U^3SacWW#~N@{2ZnjPKCq!?nYrHRd#7|& z7J^gUrp4saF{x;tTFXdDA?*@*BA-m`}>DAtaO{lj?*vqZl42E!rKb7 z_FirG z-ta?8-(9FUgG`QC$rn|!FtQfYpB>W|RHtI!bbD-I099cYJZzItLz{d$BmMSL&x zR6b8Dzi+O*hL9BH!N#OPA`mLyj!Aw`X8a!+4ORd)!{!Pa#8Wk~(J<414^7*`jasoX zsDbWY@{h%mzXF)Mm%Q{U!U>LSCl`zL^I_#wC|MuVKgm^ zynvI>PV&K}$Mq>M#(2d1+XH+r!3|Q|aW_SX?akBZ9+8zk5aP5jml_yV9!br7Zuc5< z7;5WNHRR^T2$R}#JF_}O0K#}atV&lXA*hy3ZI0PRh{EKAo`e-HqcgjdcO8|OmziQv zr^Phxwimh>|38F5sH zr5x+rpGB^hEm=)kjKJ+~6hqU+(XvBF(F+|`)L4bhpM(^sR>t~e3#p0t%-(Lv?Y+Ep z6CbWBIQ|gMNxkC@%&;`m7T z3NWj!Z}=WnN^@D~$o68e=$&>Vy%o#-nG=W7SM={C#wcjk@RZb!0%da`F;us2{$FIYD|!XlXA%j+7uV@3WkH#5gFT%%pB_| znKtOrnG`BLYsyv!#cCoUQ1=X}V!sIHsz)}HaOKqOO?|e31eOmOUIh`@!pk*4>g#ua zDNQ}uycX2xrWWjp&Y_kYGe}i!lW@al1S%TLm$I*4iGY+P1Lv-bJ&LRr^kH9wxqhVM zSbHs7i);MxASS22g^62E3R#c&Db>{6tAd5|5C>$xTN`A>(K)OIjfIE#kq;7u3C9T< zhqSNHTVfCdp?h^9|DBZ$U#mpWqpNOi7pgGHt6@O46X*Ak|5DLuJL!hur3J?l;E)iuHdNcxET81&T9{3zZGCGp@(Z1vYi_cN@W&jF0r zD^|0wtBurO6k|PHTqP zuUQ@Q7Q8HE--&-II$9@A&5?fL1agI;q08tUwiY? zba5C`YvhhvFEz3uE9_;)0d0AiF8hacP3`}VlqhkMB((o1sfdNbvp8Cz)XqfU^jsESlts3pFIH z#029Zpn&fO09h%?o1!A{aGfi$t#lv=t!{@hmj1;f<`GbeQH_DmDyl!DF;Q=&v&1j#4M(#BU@H222)p&#gFz2#{ zxXWG&R$IOxe(f+^QhSt5CAlhp%d2VR)@}FU7}Zg8ibdScOKOq=43R6QbBXb+A&q7a zt`lZjHM8WYB|UZ%#zlE#k=(N@ocM4M(faP)>Qe%0ZaM`tI|-6 zYWCvVwP~)Cx-~W=)*&^RKRYusBsP-H_qqDSMAthV;df(jo@(4_zh@|LP+kulRC-{b z&LUn#bT$)?IfGKCmK#ZwwDRO&_OgEkwJ`U}lzw9oZ9~R)7M=uaxYR?J*PEDSA zCfko5ZfHgdL=5WmsGj=Rc{JnWH;7(b^|)_|C1M(sxl)H>+2aH;HGsG3Yll?%$rKvc zt3trxO_88uv8k9&19id00$7GX96G8jMPrLSq+%&|A8vgC71(!8EP)%lrA|TMx|eKD zgjBC6z3aL=>DXqK;pgU<7LkYdi?p4)jtKpRzNl)O5pW$g!LP}zy`Fc)HpY5nut$uP zzb%UD$sbO>S0gIDJSX|^HrwbJeuU&sfK^wEgK!dV@%|Jp8zg7{afDrB{aFc-Vh!zG z;nY38L?R0TlktrG`~?MuzE{Z?&}A(F=BC4y6e)E9L>4wMZv3^+woZ=I@q?@Cz4~KS z4;nHTYz(yfa<9%KO#dHK=NZn1|Azb6d(WC7v1g3d7JJ2(prvMPYPVKx6(ja6wTW0o zsa4b-tv#x!-CAu?R24n>{m+YY-o%x>AXlzj?(cIy_xJCPisB$*In760^z07_2XHZhqR&&;nr0@w&E^OVP3?cCOXy1Cg`+l^yWRKF@+WJ_*Bc>Ug_y_U< z?^<3AEj>-y4lB+)F)HTJ)I9P({;|H~?fIBluaTMUDr<1TIaJ)+c&BhI79ucHM(@DO zU7i%nWbMkc!dMLb^HhUGf?0!FN_m|~u>qv(qtKw)z>!s*48uZ{;ritS!J0hfBptK( zE5gI_kY&H}t@$2pxs2C;ypFrhzRg=BC<~IW4w-ifx2yEGYg_29@abvG!Cn4fsSAk*D=N0n z`*v1u8x%oo``I-2P_GPcHKh)QTx+!6EW*D5EJ5a3&Y#|(Bsz{8!%KF$B8g5m53J92 z5zQ}G7Edi=jV>2Bi#s;MDrDyK%xITW~8I)6Op7_8=evxMg-Ch63 z!~6}3yz0yAZ>Bd4O*V zjy+HBUdhrw0Ef=qa$ej&z^$I~MXqvWbzG}B_jMac!CV&?B(&eLN6PZM35a5Jwu&bHZ!yD-sMm;=C_{YP?7N? zDf}E7fKw?#Tmyj8?=Z@KpMgXJkJO$tZkRxW<}d+Yorg)SoTwbH?F8BpLq`#{BE$8` z0%Ye*5e@BNRCkPWj5@?L`Giw`Iz>52Fw*|NW%d7agh*u*7rpElsfEji?mgp01T%{& z2qC0{7^NthMv<7DxuGbY^3R?getXM7*2{WD?r8xFwH|UmKS+rlF}LyZWC$Ktx1}l% z1PLcIXuA4fazJs8vfRl-F=Ih^Z=I2LcRM{V3QohWA7zle%<>t7O=n(-;4P9@U5Y zXJ*>T#APB8^OyY!KRK?0w${WREGtKhB0H@zR2e{Y&t={?ZXvu}kquth?(YKg;$;B` zogBY+rU;pRy1dkfQ}v_Ns-Zt9>YZT8Zc&ui<&8ej{4*q>Fo!WcyLp$UcgFn!aojOt zeQ6tURq?se8bR;!(L_bWzvbZSVC3@?Y-j<#`da-3+YPMm+`RHdv3WX|0laX;@qv+v z%FEb}ef6D3XoW9zTLLo%$&CmF{h~3y@qA8WU?sw-#Y{m!B7j^v!c#OnJLxNlc~jE7 z_!{L)q5*y#6eZI<>xz%*>v?vtUY6g9NR2FHoiaN0xiZ~nlE1IO4HIAeRcro?87XL= zI6kk#>KKn%3V2BT`NF0?FuPI7UqkY~PTG}t&|4Y3 zl%Y4z^wiom!^{anzv52OD%e=I6$HNqnO1$`DO-b4=GphO@!e@IL}*CV=35huhUwojf+UH7kucZVSs4ZX3c_lmt#TEER2dUB{jNJl33nu{Dawp-!-crqj22b^ZS z#K+gd1nrodqL{=?SyRl^qgps0Qlng)WY{zF9i`}#P-eZ+Qhc@9;JsuEz4acIq|TZQ znr)2He(8Cjc9h#bzYl(n1A>BSqWcWHeR+v9Z6g{74>@e!YQ0qwLLzu&=UY6knEvLD zS!z=5KA$13GtU`qJN*Y}lM+|?;dfac30(J-Y&*C5B-fFhbho zg5BB49lF-F-v2_8SKTDm+^fTHULxeq1$O@ejZAvA+}|n<9M~BP)dQ(j*S|^=I~5u4 zX1OqFXQP3e;f*5#osuH?G99e5?f14LROed1ho}Exk0>yRqq#?Nj;=jE`?59(GHH=a z*m)Mi`oh>n{`AbNPZX#2cXfQD_6m(XkcFVW{w$QN0cF5l;7H>fFk*TlU~QYDS`TVFYftaY<= zpDrWJS0C$ipWcA^w3}+_RgcZ*cEY3MNzFw>vP-q2CUNSf&2cA}c2>FZE3#AON$O*~ zf>ghj`<`R|>_XKLx~p0PD=XF`48p8SMQJnTlq0~kBa~C)S>xKWO5r#1(P_Al*0&FI zuCZS21}DdVCU~CQdnB*^y8o1`7~!F5de*V92v_-84#68cuBjI_a(S-e@}P}9j&IC! zw6*?ATS)#HnqQ9lx7r3qV! z>_;=N*)GpuG8_g_u(h>{d%_!5YmnLWVE6B&2=$9!h}NjybE})3-oTmRL@b< zd^Im}$SZlAOSop1()J{V12YN_|8Qv7^|LvK=xltuN0p*G)3_8aKY8}2HSu|OlWd9j zXAQ=#e0{!T@bKKNOcoUh#|2qJ-a(r4puzbZOy>D3o$?SFw7fBYn*F8uc-1lEnR}So z@hd~F4{we6GwT0)?fYblpN!K?2mDl#uw= zgfiHIt(2Cs++NT@*xo*Yng<_3oyd9$A<>v6%ok?Ck7mvOPu`-1|Eq!gf5TOvrdzw9 zaCB_x99zO+ux4Y}rjr=LW5j{Yil@K>6xzI=7F5e%d*P%FWT+7Srhn6+F8bg{YpC_) z)LUUQUovE>hkrl)j|y)!|5y`!OtTbLI24QaEFWI-G)1x1W6J@Hi-|Kb2}k~EPj|RJ zg!JbDh*oa`>NQjE)83Eh5{F|Bu=FjCfl(WUij2b!8EWyBa>Ng>gd9Yqt<%188OY6- zAG(TKO&Th6fnG*Oc1U&TXp8a*u@1%T)FL$7LO|zNG5NQI9y-VWX{b|@gJk>wG=Tdx=YMHv1 z?c1(qO6d%~Ji(6$!k!)rw^p~dx)u$Tk3#X1Uya0D{^uH6lIVI5R|Rn_G9Z4_0Y7aJ_*m!%=NVPK9rX4muJlL?L zU|nmp$xmF7By~EZWJIJ+raxt1Qi*rX?R1ofCVw;Q7aG*0}uAKLDHNp=3HCb-ZVO zPFo)v^04yljlh%g^*sS2MYk5BdQ{r0i4fV0*=TdZ3E*)nLb?dy30u-g;l}Ddz{XhR z`b<{ty|g8m7Y9L~K1zWb7-6eHxp%r99h$5$Q7;1kyfTCUolUGmGmu&+RVo&Lx(WGm zu=1cy_KSDuVK!<;Qh17f8FnY4x-l9*%Q(re&NyMW{dTW7tRu43Pb5DV{t9QoSGqCZ zw1$S^)G)uS`5^wWhTSkitih_gy_**t^UXHh!Oizkkj{s@&5_>%7BB5_v_H8DfPr8*LpMQt&TEsTaW*{n1n8z8f~kiCMj8Tk z$k<78R851+h~S6zrNvQz@yc8{hQ zp9&=&_1PtV>&E+5=0cW~#XYx`pQ(+|{Ay3F5mF@NF%j<7UzRR063Ks=$K*qNddyga2SuKN&T z-BC`@P=D6=5JlCKr}7eQ6+NXu*A$etqdqYIYV%C>qs%~o_)|8X)Ys#`6KcK-RZB_n zt=A5k)BBJLh0wk59j(Qx}Yj5eA=MD;fOW@BF;rkernv zn)E_y=mmA>=Or$Li^bLg$QI5#cc(uTGnYAkezPhTLa?H__!B^out?^WOg&TQZ5;KFZEzQ*BOoL?oRLhdw z*J0U&*OAG}v5|lETYl2NmeWHOr(F(-- z032F@c%Nhuu+N%-+Z1v0tl*6SIe-r7|8oa5DJ}3zSBLQlEXdM1)OmcN9m4jTsQ6(@ zaY15e4z8|+>pGJXa*DX&Xv>9k&FzK|VzYupTnKy}*Msfa ztM-dJT%9W|6(42bP>~ONOx!pv+yKH!50UY^=~Y%ZPHP4u88YbcbicD~OZ|7r?$e-Y z%>FcH*>%yiwQ!^kNk+hcoofHl&W)+d=W6x-vT1W-0V(_>12V&vEwU#Zb`8 zI`H!v{BFe|g;C!U8pea!kfS%=X;})B(nCL(_gvXG(#QtaW79*a2CU@4q@vn&ay6#- z4^ydA%F8tt2CJjBB)7U=C5I0+sY6(=T$-yc2|%074LT)#ncuYLRqm6uuZA?7ST>ZX z++!_>)ujg--)!8llw0zJztilu#+{Z`wtxBUYMU_-D{#GNwh3D0$_58O zTH*@dbc9(&1(MX&e`;=I92-xFuRH~ne{6vC@^`xec2bh`<4LC`K{njkiH=?Vh36^; z^KcW?vr#>+GjnYIuZ#Hz#=XANgO%HVfY>4^KfIHoPj*!0(e~JGxUBbY2ucNF*|&Aq zgQ78|=L;zY^>Jwka4buOc+mtuj1^7tNZAsaP^TIiZ{yYyl|i`S^GoqV_yMgE?;YQA zlv9#b$wkq7MSu1Ki^{UE zMQkL{lPr?H-Ly2uIpp8M9o#=~CeA*|J~&21sMxZ&?S7_oIt0Yd;>xC1J?t72?WZUn z35Y9v4|xM$T+>$eZ+SP)*7!6}Zyp^u0a_;0>5ggL3PO!8sKh)Hef$tT7H-#Te4tlC zceq#GOA(L|gx@WkN0yLnz%5(v^64qH7;kQ+K{D~nb8?UEqmiyjIZFZ|gR@b1Eyd$1 zyY}afP+3Rd_pz4c?4^t6Gk;W!ja#L@ane zRsMM5>F^=L1_}**NJd81t0$HUyeeL))Uxoe$NXO`Jsk8tN zi)$pLF9f)yrZm~AACI9+{{cE(3)d6e8ha)h;$GF^Nh-f5iDU|mE5900<=K+#?~54` z@34Pp-#n+$ltldxkePT36#ovX$+zYRe8HlbdgMFWvJl(7BR5SPkp9fX=tX@(nGeim znW%kgQuFIi2)0o7Qbo%7M)~0pnZDSC?VnDLpBL>0)7xP7@BWcY3V&dKp2=A9`0 z;tL)&=fdf#H_4vKLGsjTEMDj2RJS@Ou8hy%(jF*%!iyUdZ>^k>{pQ6qJ3?(Ug^Q}BOHQ5Q42w9(jm3F^Sfyrs|2sK;&dXI zwwbC-&`kJd+}A6qs$0>vR-vqFcl0&l5d%RF4{yLFLYplA379wz)|GEVC)vRhHCiE3 zO`8_uW)sc;bsR6lZTCB_L~3J`+~W%Ec|{8ytr+L=q9U?j#(=;4)ige!pumC4P25(_ ztPy-%=)hL7A~RH2wjwhi1Fg>2;i7KDJ%|@N8p)`;qvT%W^l*-FVWYGv@}(% zJW&&%EU(-)XyJ|24FhH+h4EJIaE&LH%)c5>u9dqZb!TJO!YLdBi|!2ju;fCadcJ#@ z3T_~5$?tlMqbVoky%onP8-6tb3TDOwqe!wR{ZG`g0Qtlwd<2Uo*~Hk|!zgI_eJCEY zc+fsADG?wV=n)Ml{lA7`bg3>IZpw3ug1*-tW-7~Dg&Xu441oo`UuBn zqaQ`NS_l<-QZkEK?YzagSW)#47g8uu3z*WDB>hq~Q-#ts2zfGj85Z?MNk1EHO_YmD z$0O0^9I2}S2J-}Mw=P78heu2}K$@wIlQvAJl-|8aw6S$+Vsn8{fb?`s8m_%7kC7b0F3 z6sb7q<)1g#qMutJuVoUCtuR$AoU%kqosh#%e39?RsF07Fuf=aV6{`QJvRfoH@6;Z( z1Tow`%R<)}<`s797!g)Y1f4knH*4KNR%3Sbr1)3F5`TIu4P7~^8LIn(+{Q#Nm=Oid zTsWRsTlBhX{^DcOR9RzThqP5dSYzLaK}IY2sJNqT&%~am)h-ux8{NT;Qp(X7=8%uY z>1+4Nx4AoNXQ%aKF{%L7Vb4lGIMl1{QOB3FRgQWp1{zC#L}wk z_31ReSf_lr;NOhJSiNcAR>zSL2>u^*=EbmXV~T!!?jU$_*2)3*ZX_RR+X27MI-^_J z4py}aol4m3zBEh{@X$XhPv(ke{Rg=A^iZB&3@jOWa`DYHRbg)uMHwch|M4lj7YA0F z>T+x!e)33~GdIKH)jb^8yfWb(hlhK+8FpX$ldcDtvDwwQ7}xhmsH49ga=Jy8^pI?~ z?kxq*-#*xReJoWWw>Qs<3OgaDBm7AZ&Yy2_(PR0WChU4tAY_yDUoEP$IdM9vMCr zHvRg@J0p8gD=wb~fbe)n8HRY@0sMa;;)#2G`q^Qht*AVvdIqBKe?fnw-?Qy@{6U+MS+%OD$fo@C zh5c*QMZdmf-NUP!+W8D(jtZB|G~7bT1L4;<=~Vbl5roMd@@la9^#%Isd#flskeyE= z86{w~QnTo)^FYY6Neh!Rdm6M6>?QZfGtQCn+gk9Wc-72agdK$UG}=w46wkmqV=!`6 zytibxhI^^*i05czR9Q~vkN7$w1kJrh@VAZY)dn0r71_iJ;aM3$cTUW|B@pMq^blC3 zZwZlXhlPkud`$dE-*`ZVm~KoVc*Ym!AQWB0aypM4G!$&_SfTe|@YUe{ikUEXRKqKQ zCd&Ifizoi%*xi_;{mMndy4#ma#GkqGuTUJZ3dCdQ_vCfrVUq>=L4?|2r^w0`)pJE& z30&ynA0XyDGUXqjaTRB%AJ=VkSeFbo9epc_h!n45YtmrWdGMLOH9-qE)uCz+@4bI z#dI{UdehbLh7@pBw3%=s*F9(yR$ZkhoC`QNDgw&gLmG`49J}*ij+qhvKT^0=#}3Zl5Ue2 z())#plpFE5lJZ-%UISxObhHSI{8xclIx%FIkIG;qII+soGp90cF{c8VIUa-|ac(47 z0ViJc`CW31g9a$v;w_&ThM!N^|35;^f3uQF6qE=zbKy)!f;h^mAzW*uw8|!ZSGAoDyuo zF3XxVbh!AqF?*F@cb43Rm0Wc=eQ!=iwM*=CX0D5loH@k_XU)X zLdS6~mtc-KzI^n)bB<(6Xm-S~vQqGVGr_YMh{^^FkoD^Z1tDQUY<0MNUs_M7O1#}c z{?PUcuLz1GA(J!b%+sr|zmajlk%zk*;a^pWelquQq?ypm7FlJ?s{dq+fTyvH()b|g zZ^h0b83R|^uvS?RIF_DU{isiNYB=1ms9C(~lO?DowqZ%s&pLTRtBRHeUH5VREpK5J zyg40YNL?peCK~b*sj!NYU>JXF)@3L)-n2|B&WZQ8C(rmu?q###3^xBrE;n5G2Ml}eYz+$Zg2RB%1lz>V3rRS0I%7e>=Uy^`NXIp$COW zs%I&nLL`x(6f_PAD&_lqLdq5A7V{!0#_8VQqLf#hyc^q?*SHisRUZ+fG?sW4Fb00D zP^uHCnHeh*h@erFOI&aVykb3^unk&`za)i-|fy@Y;pTQL$_+PE&OvOwL zDbPf}`KQqoyF;jnuPSu+umQBzGw&?axGundxf|B{_7q{ubsty#I0Er3=bf%75K zZbE^N2E;CioO0_#t?n}ETD*VmqQyFCZ9RprUZ3x3Tt(dTKWqbigt%SBtk%&ThbxtF z7<>Tp?K7lv((tmB8^2I|{t8P*E+jJU7w@&h%LSyKXytflU)1FAB&f->RuQap9 zHU7cI(8AW}-xPPXqv6~qr>e_|pJU7S9tox+*Sc>lVrQ}YIC@L<*k5$^%BSL>6I;Gd zBXU1SixCs_l%I)2Z8dF-2!>tW@X>$!2(6$HYmr&v3ijSq%;{vX9e_KjTP<{tMTSnb z_#`7L(E!^v6^d7HxYdpNv1y*0c&s5373u2V?*y)Yyx~4yO9Mnknc2l1UH_@orH$OP zsWWX90`bSv57DZz$7EKae`btgadzmn4z|U~E41@d15UB_+Uto+-I@^!M^vZ5Pru?% zKHK4&dezk8hB@>O;RZ-n4Ap6e`HdHVr{6ipaT z>i%+aMSizcxD!yF5Bl1-9Dut|1m$W-NjQ^8$P-)6`cR5w|3{3`?Tns<+)y?fKWY@*a_UY1Ut?Wo^r&UkOVX+ge+F%h4z zh2ig4sKgxrF0=v`cw>R2V?b>+0($myL%bqeS&}L^@A?8X$`u*{ge7^6*Pb|wjg(L{!mSQ6>e9l z`+@pL8%aepQdV=oJTWfTr#ryvP^v4Ei7effHxk1)g2b@gNUDb8vb4pi-lh{*s3$_) z(ltAeg;wECVj4V0uetdo zFKh!J;dp_zhH+N+=`9W2Q9ev&?JJMCEakIth;~E`?838Xbh~o*B}eg4pv{pv)~{|G z%J%7YMN0OtY4vLScK+qLXjG~lJ3VQ8ctUA2TODSfWlLUZx)V6!s8H9;u~9wv5AeUnf4OMaTEUNl`a(J+L|=L@NHdh#JBrTk^9{It%Y>-V!V zBQ8NN$(ricNsn#PRyc_@b0&w1E$~ssexmVc(kyY0NHVMjn$> zYXe#^9qlPeZ)nnygvNpze&y7nX={vT(93a9^Q^1(r#@-+M7p}<-k2 zTVv!P=DWz}7ZebA{2QaeVS^iii*H{YUS4JJ5OB&Kb~;t$-@ra=th1GYY9yGS!Y!PD z7Z)nf$e0Y#$J!h%wFf`?rGL*y$}WYsNc!nkd~PdLyaapU44$_nQj@81Lo6$}Njmd> z|4@6fmozA4DkZXT(CA)xu=xkl*t(cIPqS*p=hED~9mtWO*OxoPeN6k`nqH_>%nXk) zoBE~1y&~4?K3#Nw$*n3XTARUR3T%=++FMdbQ(HNGr=25mowqvpBP@}ti6q}uLsy1K zEgVRQ`EGegn=nddLc{Zv!xn@K{bZr9Ts z{Km6UUDo|t!Le&2Op*$_T)E{5`YLT}Y0ID>So(Cy#c>PZ z60xZY>(JEM^h3=~|3zHiNvl@=Y<}!{`;^*($3I=mdc1(DA_SNgV1~)!Mb(1KN*@X4 zk-FvV{=jF;@~^EFMgPQ#*R4C=^d%)!n+MdRP6Z3Y-vF633-+U=sNOCT7PL>4BOlnC zSfnb2c2WKzcDcsLuq^NluF%{X*%Aw&9%|}prjnQ4PmD7-rsdL_u@P;d-(wE6W!~_v zSr{Cray?w3RchaOPmpQ}Qvx~@A4lsmYobkgE{X6ZR+0#JJxo-P=V}dfzeSmTrN}>b z_sX&FZMFD7l-}GYLlIA&_&1XmLTwDi3Wpzw$+4C&F;}dUj9aLf?we|$_v1({AXoxT zia_FZTB0r?D4w#Zaa_Vac$~H!>Q=~{QpjAKvp`Saf*a4M%VY**bzCfAAlwj`AFCNk zxS%&;smWnR?pENWXG+4Q@sY3){8tb-7n%T*NqtO~P`S8SEuK;L9%ml*Fi?T4%~=eh zaSOAdYBn2vM>iy-94X0G4TRy_(~{B?XyPIvI7O2BZ_rYRLPDcV$V($`XdggvWM`Zp z5(JWfIo0tYzTG;)HU+YpjrLQm9y>H)3%B&}(VF@hqif7gERQA5Cx0*u|a4yi}@x|yqK#N|T6tc(q|n9()So263_tV_}R3ujM?1C14j344l&XLs#0P(i`yFBE#Xzmz*+ zCVw17J-XkyQ~+e60z|g}v=(WikE=-rV2%73IG^u4V;)RaJtp5{M7l1aQ7-e?#GOOv zoD8$zpi8)D;X7(pQ^72`(|N-%n@TJeIrl2XYBV{bc7J#z5nW=-FqWnA5xbq+ zh!0w^)5cxV_bNp>lt16g7%uDEFIwnuiVTwc^xOR5AYn7$XIChU5VA3@EY8i%xiHTN z+P1Zo9KtVjjQfw%qYNM1=2SLkVWo~e#l^K8tW>k{tG?Gx44W$B35VHHD`EClOtDyi zKu9KQor1ySM{J$@xwUm%w_cb^Z&k=&bbdsyNO$tHOaLc5rO`~Pe&~WIhcmx*FV!yU z3FaZ!2O3e6N6137yAKBQdWFfJh{%u7EkV9TD1(j4Bz$91=QH>d>r<AYZe^XknzC4O5wQ>mI)lAk+0aZwB}6{Gu3(2lr~rplb+ zp%%>Uj1F@?YT*xID{SATyaLi=leS2K>M zGHr>n{>2W%rJUa}tj?+TI@C;Ty_?}oS{U(sZt+2LMJ|A5Op##4!%0;rC+|anb`aN> z>RH#?27TY0O?jpgYBk4`g+m3;VyU{n9VhoyPV-%?`rv`ZqlQoINl&}U`Bi`6Bf^8& zeos`Kl`zG-XN+bvp_mp~96;@5fjt*a>>MH1(vwYVb?k9L&&H^fP>&|__nu59Sp5>X zNj0`-4qsd_ruMR9zY-|)pawO|&589@DPfT)8)t4V<4y8~ug#ANMaD>ST))(-@^1D2 z12}%+FYnQZRQ=SaiHOyx1<-YMc#_Sdgct<5Yz@W~zAejECP|hDgCg{-f5BC&1_3f@ z+xc`uL*j&!B}~qB%^NYoH8i4RZiD8V-3BLnuH&1Yr=2E#hgtWiLItjJ`hC^@0UB;t z*w&afS*Pez(Lmb*hqA0#WZu+RI$;-+OouPL6 z&rYr9bZqUI&ax6A^}5C7J9(R}hq7Or$A&(X-G1^r33AnQfh5w;q$|NS>4#oK@|grc zOT1SIvUSwMWz=5YkGH^kkx9{LwGDSMWlsC7zS;&moT(o!2TK?34Wf2tFKA{dzNs`CPe0njFlzY*LqYpaGO)QgxA z*P1cu>SvSU`At(!=w09{aGU5R4en`!%cR7`(nc$ph&LuAfcJ?p9-o6~HxdQA3Raxk zz$Gl23ojH8wxhGS;<9Cm%Bgj_NG5D&bz~@Yy9m~x{(%Ht`K+1tx;0orrF2pf-2e3F z7=pe`+${lA^Xh>!B4u>A9EKyAA&hIy90sdRR_Mw{IgJJd4i#Bd=Vzth=Bd)yG%%g8 z^LPvuI1o29RpN%G>_Kzk>_LN79!OvcE>PiUF=&un%?6vWhgB1gl>tnM3IIu306Lm- zAt3cW5g-b0(t8d2LN0MEF^_XbHxQrr5YHt20q!E$2U^}D*W!g!(mBa8F3$Q%w1Bz_ zkCujLO8vF(FDDm<{-6?4CL6P=CB%Q>E{0nys?sURNVeopIKqXHrsNPGe7Em}cRPgYn`5X;Go zbDhi%jazWO22LUISOo9KC$Rfq`4L7sW|(3HpdTQc?Ts}w46fhlF~8sX5UuL{4=@a- zG=sla&urvPP;h7fC54ILgv0gPf-MEKNR%RYp;kJSFzP(d3=v`1nupo=ZQoDZZmkwI z=j!LrZ+c=okI>j+T~+v|u3an{l1QQpCi%5(k;mNt%S8oxzUu$$ZL&KD2I*nlMW=-P2+%#Z~p0PxVvnHJ8vemu73ZN47GCbowVjP^9(~!Qu9#3TGZ} z!}vXhmb~xQgQgrIkvBcY+1af$v7SEz^LnnFx1!1kKEk6I^8Zmwu)UYScFDdD80SzuwHg~FflAo z+-CS@RYns$^(4N9{&$%*Td1RY&)CPq_7oKrtCI@eaU;o_**wlj{I0(lD6!y2r>cws zmIp1j9V=FQ_r@l19E!Z}-}kqram-An>u-71-bFo;g=b%mdcMj_;W!JO_vVXKw>Kh* zYR^9UT9F9+j(>$a$R!*AYrw))pG`ZGRhfO*d78xi|3PBopDE8_`?lusY zVYz!E#G4$WOT%yhbw7vFlg^hDXp&vb()JTEra%oP(=G3X;fy7TK)R;w=uYUpVCWx4 zij1cwCIwHmRNSZ^rZQ2L?-O&*@RBTd;T7W(3C^%AOxaH!8@^U-2!#djxFC>6i=Kra(-0{| z=It-Keoo0sWG9`8{Jz;fkFXSdVzYtC696hC z?N@IJ>PrKIA0p$v;yGZ6>JxoqF5x&#O;Xt_bYe#;t>Dm^XslrrSyGetO&0Oujya?{ zUcZ4DO!AjOYm`kfu{!zE>6XV3qF%9EonMBxP+OP4!#GcqcwE@ROyM_)r80$Plc75%^d8;jM0L!Ae`i6zgc_KNNN20LnMVA8cv(fq`c1Y z)(YrolaechcO3+yfmY3t+v)Xx&NEirbKuWj+(I7gBm4rZ{J!cYrbR_CP|5H91GuMX zq*q)R1_xvgw?9F)@jB6xv{N68aQEFT(5XjvB^Vv7$UEE>f6swI z$kram8tF+-%yz~Z=v(6`>dvLp!6{#HGSrFnJZDFrVxAfYswm70@lDTZzxTm!W@cEN zXy~z`|LUnN(s8tl_w?z8W40y9oZ3c>Cd!=66a7AVO{CJ$s^g8dVqL7Yva58bmM7VO z{i*n8CW2WLy7CyYuEKJp*MCGzb?oPcsFqq(|FJrG2A*1K-iY{TtbC1gRqcwTvxeuQ zg@eMjZk{uj(PMB$&d(vpequlf$wt?>2zlc~jZ~8Rg0n6ZnoF$tdf~X|AHa3t+;4Th zBRuE+RJWhlo)xhp00s#5XOS3Ro!37D+4^-CJ2TXSDbge@ReEdm7JQyNB5yI4q#1v- zabJ|tZ11$gIlC-RyV`&$MZse%!Jis$tqY=$W?) z++@M-G^9T^G^RBvA9-TkhS?C{qAe=*2RWpv zobiPLvPo4yufK4hnny=mq1yf%{^ zlcGFMI{G8SXS`YggrJlk6h;I9{4PJGVGBFHW+Z}jthhgXXk)DuEmBMT8;-~*$bZVS zz!v7W$-nbBkyo9PdbFG%w<5Pbn*Lk*Ot6}7f*P?2Dx3HWZ$L=jpK_~Pfy!+(_5EI; z5P|uJ;_!SS_xP-|@6mGBWFvOD;7oe6&h@`U)tVwHm2+7tW4sf5_m~%+l};|m5@pcj zqIa1zqa9Szbve_;&4kNg$t}D`j1!uVKwO{sYxS94;M=6B7YZPb)ypf!E|$BZQKKf# zYMk1`T6)=XX^3|@P%+@XiC*5K$;bE-O(xqIXEJ62>_?Cun?1=}SE;A;>_Tjg&LKW` zB3`uZz#|qY1+VdE0JKVuq12fKZ!{|nj0d1jj31tiBUEDp>^B&bjwroVCN;I5>i9uQ zo{|y-!ku#J^XS9%0Wrr>fIMiwAPMeDcA$@m%5ilqJ;p_sH5Y>i{99UqVT&is&oiNO z`w?sP*K9@BPrGz03kIuGPIrWIk(Ua_UsxzxdXn9?vYwT7ogieg6jJ>5co*tLripC>;qI6J(xm5xdodADd2v@>g6 zpNUr=clPSleFWe0;|}-6$(+5;`63;38a4?;WrIzMSTQNF0Fbg#Im#^Bs-pl3F?G?| zMaT6b?g$xVb&zR6lj*EWn@D3(qBZ9`TT4Z@RGWA53NTTIRHyIc2v>GOU?)>+7Dg<<4<|5a@@ z2;IOLo}-a1=VJ_-CETYd!IJNYT^-ClYdWd?-&4516luM zbj>rFj-mb!09Zk%zSwxHsBtltP!ZgX0u3io5+H=Z=jGEbF3X=$xm=aiSU#@1u5CI5 zs{2Gk4y+d9JN`QyUwmW4a2k@!tYW^df&^m%8H0kA7I)D_B|v`!3M3B?qab{O8qUiY z7Am9XDvn{5wdK{um`X-B9m|r+nDl-&b_`u*89TU~vBc z^0HsDEatKO3@XcntrD*ed;1diIR60nl%4Zd%Ncyn#(W>QJ2A2@vf@C9oH&E{Eqam7 z6vUW97Q{=5^v7mz6`S^~<&$L&EP)2;!nnvda^!{1*GUFeEMZ@} z45;4?j)V|?yQDgDL`b=g!>h8}o~ARAA%T9Hx?wA(dAWYy5+lTDbPkx-xlD|UY*l5` zk47Bp_b#?|fLQU1tk$C|jdk59G{{SDGc9qs-9f@y9 z^D8&3ZgZ~se{Ot_y%1m|#Byl{BdZn4_TP+jU+^CxeWX!|8mo?j+>nfjQ}t%X68J3m zlNrJwk+7KPw>#6z&&b8LsTh*-ACwneC1%GjBN+)h9^DnJI)yaeK^Mj|Z&;g%{TX9h zkmmt9cvnE@AHMiV$TyNowm9sKf<#Bw2Iek*9?NpM*nnUnI2V^~f~X{ThAdBDir5SW z1l?hg8pOl^qO*tTJYS~{q@uH)&Ob}g!luD?q- zS;Z$if|$BszWSbs5w23uI4WpI8zr|Rvc8OCC}qI0*Ueo_I8PuKlt3N{L$+5;0AZ&@ z8G9E>LL5YVN~w=W7yTxg2)0(LNZDLsV=6?Y+>)4U zHUyGS6VN6NV}+V(_oGzJU)2!nI%6MDCC1&>kwR860FNZ0#9k{VE+Bs3{{Y~k=}PM+ zBh2#Span405FL)4KnaPeu9G>&F_01^wbCK_lBHQ2+40$MvQYNS>$&j#40UBesj3`y2evBCn2f>|Z+w8a#Nd^I7UR2o6Dsb$wz^G^QU${wq_h zX7h;#*b~5*zJ-dYkz9$}RZ%9n1EAFqdlpJ2Tyz_h8JICBzmM3}dV1Vn*mR02`gn}g8<1~1t$bO|%IrA##?-$SWY6W!GT z-2eoc(G|jcd31j0088u$?23G%WuRc7W^x~9o+>J3DU$Les)R(DH1Q6_RV{Wxx9uUTdFGk#5UO7a$9l0YzPY$=*aDt}*K zGJRsMrX{*2m>EEo3CaP=VWHCvK3&F$0U(Nelm{dallY(s2p6R8sAfGz$P+qfTmc0% z!uG@JnwXPNO)&<5dMheo4lq|tNybeX%83J_1Zj}yf(=Kqm?zpPf_=2ZNWg_Lbc{Dj;Q3EddS>#TK3K5=j2@rNs#o& z?#gON=g#LB2gQw{EBvyy59OG7RC$XZ{sn=!@tXfLe@J{F*LR zsg7%GckHvPB5AT*wAo7S23lsMoS- zhrj{YpET1IT|9{d@$DiyrkFi-o%KE_1Cf!^*@4(eFw{JytfYL-sfMY50f~O-h>)2) ziE>o{65FB*21i2dIwqLXA=}ZX;lRCPC+l-=hVtOm6E61FKwEzL!e;5dzU0J?*e z#LR#Rksb?1FW43Otaj{F)@*p0w)44w^n$${Inj@O)XZ5-%q6pp%I(cz)hyh*VeMIT zRx@74HHKG+n285lh@ae%g?Mr`z(!Hj zvgg|J`3QT&@-kq09ak9Zk4py@8B-OR`$V^>u97idRq*(gP-kD?Fh{L)jJ-Q0?ayCV zWDsv8?8$;X^Rp|0O|sWS2e~8&%$}$dl7pY*aOIbZXpO$p?<8F;97$s0M;yzUkLFb? zQtqM~MU{$@P(egYnFdpcZBZUi%mOiNF+4|6-D9Sj-)CNKroB8q!{Yu+8ygC$ z&JA<04QDS?_^%&)?Rt5*yZ%O-s{*`w>Y4kP06vP&OVQxfgKsa?WqSl4w}~q@)tIlB z6j6gCgO+kG<^E8K5E1&R_3HJHlsTUwc@8p>C;CZV&Ux1had@%$X;>uli~;pKfZjzq z;}UhRavH_uF`(1Lt`)esW*Js1lthTyWWV6EV)|xda~W|w2UgKBG`+_gH;T}4d7dC@ zcGbTXQ0GyNoF>oLR|-{h%E;AFtiq|1G@j%vtC-7>(V#}n)m%+hFsRJ?wwi-zL|y*? z1)8w0jRHg3u-FddjwvNug&e$rpq#bngE75Ufhl zpVE+h<2cLmao6!mM1UnCUBK>(ji&ZSGxi9s8^|60iKa4?tBi!%z&gODrZeLi$dJ$l z%XC*$5@XOYL^B>NHYr+*GX^a#PvD}Vq&~e0GU%jaaCpMWN2H=9$LO-&57k)^#w^{@ z8&j7PxFq;GVz;j7%k3_Ec3D>5?Ee6$rY?~@j=GdYfE_Irz#WrRaCFlX?8NU8zf}1` zmNjRm;F=sUAk5^&^@-UnTuxREGMP2{Lk~y_&XV%S{XRo!tLZ$mmJOfO6VZqI8%P2y zWwARaqZ){3QBkHGp#K1xGSm1htz%v(m7HecUHhwgCofAI_O3=mIgE%`6R)TcS1a~9 zcxxZpSIQ)uh(vlIE_NLiIKOcJ1UXef%BO-wVJDtk5e)^JM?0?^~J7}rk8%_`B_B7h=@x==mGmF zKBE1PI{9QvjkXpt)x&A{F48e;T0UbgmJs148_FR605zM!&ha@PDSklyyBKUJgz6aX6b zL2|AV5AOQA5K&l=+CSi{Bpe+=3$Gg@(oJ!81d`x?H8pXQOK!@bF_9V-L*RJwcmDu| z0w-OO3B#ZaloekINvAF#{$Pt8rxOU!ZLcyWeQ7Zu{v~JqZ$2Dc$zii@w83*OM=wug z6DWbP`YMS)$Uq<&_do!5Ks>cT`OQoMN=rG+%Y#wVg`Voh*86HG+0;z44rn3+*6g1VT@#DTZfkuViZPw_w!eA+}90 zy|6~g>S9e%O)&=?bWJf5p;SSju~12*?8q}U5Oz#7j5Tz?y}rqcUfELw@h`HNqmGG# z=%ZX`zN^sU^K!8yEGLT&i#9B-DL{j+%bktuGbT|)W?eLN!%(#uYZw8#q;yBy>AKBn zx3)C?Ybv2uiK~l^FVQy)Z(bbb7ZKS{MUFg{iQ{ZZ8t4|}V%L{20X#twb*w~|BgH_K zP)CM}RW0-i4JyTyo>KclVmF3owJtU2HYF;-a3!U`E~tsFAZS+PO>O{ZDx)dLp1zd^ zTuqW;w#cfouW5)XT1Q?KM9+%Nt;qE&s#`XTovp}nga*adR0>H1w~_`R8Hm*Z0T6vp z$H4or7bFWC1%u&Msz_#(HetVoxTm4~yk z#cC?^8Gn-jSnaw(vXyquJY-7^mYK$1q?dga)WR62s$PsAr;F<0l+y}Pt~vs!nQ=ZU zh08_&e~KVx0J|u$xW079g?2_!nDsDo{83Q@IY)pa)TWK8jnsl=kIpBo;#p@}p8{D< z2#rvPJz_uFtSxPYT#QMDQ=ReF1V{h}a_crMt!ML}G40BOZ>9BZ{{RrNI9t<%%hun2N|NJCC@tV_}Ak4{O6r!1o=u!LgW zLSo9=A0w9<_zO74xQKtnl*QK;eo%!IvQm`D9Z!#v)a9P5$M-q3x)tA;<676c>lxPY z(^a->YV}%-)}TcBszSz(EZ-=r3iduSpmJSquzx)pEvDgE=0Gkx0jlR>$H`+Fp)MZb z6PAaNc(LdfXD-_M3>1AS0y8!U)1oTOlS1EMaGt|kD9f=}fLEW)8%n;OCY08EeZS+!(ok47z} zt-skF*}|H>Mn(nn#Mv0ibQ00H1`<|M#vH&p#4T$$fsLq3TQR)I?wU0C^e-QqlYtk&bEQl`kn!HJgVZIsr$vJ_b|z-o61>6^;N zC8Um9_EXV0XfW(QXyo0xCbi{N;=)oQN7di`sp!UM5#(bRC#H!yOBq{7w=Oc@s=lG* zs>O|x;tv82juf%6I`quS)73_KB?j-rZCBclLGfK{{V+V-PXLbtu6fq*w#*Q zBT+Egg<$8tGK`#t`YM%?nJna%T4Vtd2{La5O-L`J0NqqZkTwEkTNdi${83_UzUw~i zTfh(GgA!aSiD2Lzl811tpF{EK%XAXK5pbD_&_6=xsx*=T+9#<|PWV{{22qgj6=GII zs)^)+x@u4-17t$bpln$JF(pu?5)euRN~oO>3|#^x0CgTHXm&u{paFCXssnO?jnExX z4uB;9`Z5DV6T}n&2nOrb1qjKUC>Va|sue;`d2#bVg?%>x1n@4~AVvlI1$8icMD41Y zxKf0=#WcjR8tjPDH(4EuV(Uod{{T>RF?FnRD?M3EHKb<~)zcS2Kxly#0%C|a-BrZO zxE_dNeTeQ8Qp6eqxGL&mO*3b0mD3T%U64tRs-bESBIpfK65c2dq#%5XDf@*3Hh40N z3`icVQB}%a3!n^-WI@V3nMF5>pkRrFM~WB@>829|(-L74JXO>|taU*qq1jzTngeXE zi1rI?f=v=ZKH2Pp-l{xLn(Z8_?Tus|9TDc_VZu(qmMm&lm61uVTCROZNm#73?Zbp+ z_ehytON{8dSV}nad`(La#wFS;d*&D;nw89IP9}x>(9Fya4*M2oLyji zmTPbb8EmrCTC0Q)I|~4ai}K9eL(?9u)h|N8D?#4zwuwHaDW=E1~5=WB91em=om_0^QEJ*wm^E(>-GooZH* ztEtu0RmQ*m3TS@VC71-zdodjoMGE2u!2{tG58HwUD~Ci;z#uqDgQ*Ws#C30gXbiJY1BJU}9w32kNRI!ZDEsT8`SSAqhl+3LuDq>Vf(q zclxP=e1DL;AN-lO&>!X$v8h_m*w(S&PMr$$ z^IUq4>cQ)}+;gqs`#05WZ(7u5wuZ{1Y)o=;q(}7btRBb4P-A?YGc8tG9;2FPY2E$jX_WlO=JzI`hi$FfF`}Ac%F5*_S@Lbez7I4<4^;*^Irm z)B~VCWpeAcS<0u2bwSKbp)ITcx01)W*NV&nAJYBwb$!I~P7rt>NhiEQzM^5#e5tTX zF^q`V5a9kQT4i;@?E7WT6-sf5MEE!$jC{bvlWe8aLaN)WwvXt2jeG|3Cb5!T%cQpvu;ZkwIXb;c((rl(v-j9 zB2ft`P%V!V1&zya!D|`TRRCrp8_RFzrY@>>WI%8>ONaCcI80q@UPUm+FrFBlhijzn z5geq%mS7z0tVY%3*HwVZm{}3|OOUf-&YqPYKZjSUzm1|3{;0p>sVkl0*GbbKk@;G( zq%1g<*CGcg4ao~!@rlvI&~_c**cmg1e5v1m}}ss z2Mmkr{{Sv>i15)c5hi+*>iiWRjxHC-WJio`t`I$CIEBvi={bWZ;WBEd*)9=`clC*K z@rxsSjHol+Sk0Gk( z*DdqY+Qs?dU!x*E#9|nGUL#<{*n_Z9`wkfRO;atvg5`Yyb2S+(=#$r*aRL##^l$meQooMk7B1VYqi zuOA|+=gQinXy_#REZEeqLnGxrB2jAoIs$Axe5CH%fU%X+W0Jct&9R)|L_?WJzlVak zS=gIz$2`5d_(yohbNH);vD1&4@&5qzsWKn{(9_Sl=hro^dXG~VJK^oRy2P!lRvsc! zhy&_E^YtsV>O1ZI#qre0#>fjG&B`Vv{{RG>)U}!U--eS*jN{94&Byqud8DsH3h#x; zBiXicmr)<_3m0NutJ13zg9e%5~J=FNG6C(?RgzBT-t+$N9UAgMH^&_5ed|5sm zxq{|SOAjT|Io@1wtn-f#ROPe){{U*+o+8Ov3rLXRU^^(Pw5haLm;E0|~bSxEJ9^qy>j*2dqB1d#fN%YlJ5HRF9eZ5%)N>Su^xrawk zK|1NWpah^f7u^BKjgUTPuBaBfq7y0xK#zh1$P*wKq76_ksHfEd)d2gT9RPqpx*%_& z1)>HtK#*9O44|VY8w68~PVAz?*zAG0KW_dgADRaf5z)MqR;2P80HDm$3EOpLF(0Rk zFwm>4<2hrHbk#J*a;9UVx)-WDI4CYTHpKq`SDIn1BbH8*i+L$x>p^{I^L{E~>cpZ( znx-0BvIYD33F@-@mVWVv+d%Y-bn z^u8{UDe5#`BQ@%bNJ+F?#x*u!7WAo$sTJD@u>SyRVWu&J#^w7bmGr{wNslEbB@$HGqvPop>bJ`S5V^V{GBA^Zw>e8*t|m_==jo8xg^sydUcE*}I{gaeV{)`*mW%`qkOU3T z2m$7Zq2P*6fDEDs4yb=bQ~qcsMU)vzc@ok9H*>nwM;(yKcbo5`(oqvIG=ur5GzTQs z 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%0D3-I8Gd_ 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


    (Lmj2rej-v^yRXS$ISwd*+2P; zGgXcEAqszVywO4X5HI?N=#^rj_kZKXLMVNQ{!pWFq<`vps+E`IDzK}+$%?8~{{WZu z{{RBBRrLP=wtwyikX$--<=yh1{mOsx#bUPm0sjEn&-}mOxmG{dGYT%_NV?q{Fg4>IsQIp3_;pBhbPB0PK?g0P7Frxc2YM&CLG* zxwFiFC3!klC;65C0L~J#A6@YO0QMgl{{S`L%&$LR*KU7~`ajK|oWGKVa##NV?ygt= z0PQVv{bs&0f9F}|y$n}YPyYaGhy2AMT(y7OPt9qXi0vOWSZPmRGNB&7!hhaR{{W{y zHODNzMqg?zO$#!%kCdv=Dm~n^Ht+*XVFTIYd_4I=^3o2_9SJUn-!>xx&)+c zR`vOniqS*<>=gbU@;W zs=oABU&w7=l8WS3q-!7hPpXRO!~Xy>wVKpV$$#B_5-oDcX@-^TfIo5ypWF}??1H7T z1~&)^^z%V6*r+obps4-fQJvp%0HQEEswjPkD;w{E1(E(?^Ff-ZMF4hCB}Sk0{;Dhg E+4^j(h5!Hn literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/icons.png b/public/images/org_new_style/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..4bbaacd567d016cb24d1cf5179a02e945f47a76c GIT binary patch literal 39862 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 JVin8h{|A6J&b|Nu literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/img1.jpg b/public/images/org_new_style/img1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..acfee71e525b7b83698be957690e7659dd679ed2 GIT binary patch literal 27550 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 literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/img2.jpg b/public/images/org_new_style/img2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72741b9811d8dea4b3b757721837cabde3311fbd GIT binary patch literal 25093 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%0D(AAv4#F4pC$+g5*# zHLp%ilwkvP6n2%{v{8R358gVH#*k`F`J0jIVu!l?{rV{j%GTEcJ)NevA!VSOnLSR| zuqYg+wH2?erW}t4e~^`G3VHa<8NUuoQN)1DpFE^@JXNbxm71rs8BMzN0(0^-X*;zW zgIx25O@!&Fka1hbY49;#=oebOc%=&_^djCi+yzrBY*P-!3)&#E)^5~rHr<2T2SJQnAc8G8EdHV^rv=u>xTNYPT zBvv+;LnKi-6BHI`EcrQ|l)g9DY4fED+jOtaZftyJ+CGml-aksEW)}{fsc2%(^X04u zm%TBDhc}iAv#m1hm3Q{8Bz8`=a864;0R|r}PoDt%>&aWyAF)T${UK@>@+_CPEko@# z@{a_r8gZLx%s#S?erXn7G4WK>c{t(I61591h%^Iu>ylp(Qy5*Zk04f;eV&6 zqEj3)v%kN*9t-SsIbDLjPP0B+c*W{soZ%^HW;i5Yt^JuH(fkL~PquDX?J3=c*Q}zN zz)g*vS5#&kZ#^2)@U1r1U#{fMM__(@yA;1RqU1UQZ}veBSVxxQhZoHybo7%oxe$lhi5V6Lf|Q zPqR*$z7|qx-k8|6sQe{)T$D5~A-P*fX7R(F3o>=pO@dX|C4Q^;K!&_IF4TSMotNy&ydC3LJm19aBtHe|HkS_d!{kL zePlt;plg?wn=zPpvw5RdSw5^xh;O!N^X9WqR3<&*%rvj)^L(8ab(d*m?kT3{LoJ`6 z!V*2(Iw=TOe@%E^nBg@qgfy_O66jK}M9dai&01%gh3(NA*njER$Pa0Yay(14-H$%P zC8*_I(D4H1N==!5%B03Vp-vPQY-9nC@qEgnZtHAgU4*ex^~v80nAQ)bWyfZ3-@Qok z-T)PHQn@psYbP3*lt-?KB`vdJGF@KZSzqSf_0gZqWu)aMy-k_gkxdYu+xL&KSaS-( z{Rp|-q)Zq=icB{4B=^L8yUG9vDlfIX^Exa)zX=yx9ueMU*&%-XD;{{rlZ5EHu?(mF zx!x9Pi}uHLkV4Z>*Zzj*F}}R?4^NUPBU?#GWhsj(zd#)M$x&9+SU$9jjM$$5kwh=dpJa2J-&It!oKjdC3|o;^ z=%MJV&N({zF@Eahlm(O$Z zrUG?$N|Y`w3`2W0QU~Yy^%I%OjNA#>MZcQHP9*8sM4h%Es^FoFOd@6D?^}yj?JI7kcR&C;_~gEwED&3A9na} z=_n_gMOk7lmy)it4VzG2_-wc8T35$rvhK7w^Jku;83hif-bKZ+i!a`_Vh!XmOzvIGQ5-=IG3y0!1>-bu`2KSStd4qzBW}M%n!hIqk z)+L%h;Q_U9+!D^J--?XT!^_s!5)aUY5a*K8CYK?k%T>zEH`W;h^+rAK)a#x4@sofM zky?)Zq4uE_c%VwtgmoIu3qvxHjnmv+xU*ArXS?CUz<5*S!?y-X{nq*pSxTddck~WF z`7nf1$aD;;;qn$#YEjT&zwEGz#ZYvyJoI@gsUWPW@+5g};w8EiefV{7PF|ok<&`c7 zhYgS`)!Bc?@1}G|{kU-T1aQZ`S?OQ&egc5by#2GYU>c!!xBG&Qfd3;5Zo>qblOO~{ zSsy>>zNe;99U?zW-Bi8;OMTPHsb*Wb3#a^`wJE@E8EROeU2a&$ucLwwRURj!uhyAQ z{HoaQ=}X(grQZ3Ir_N@mOS}c-9V)}H7$sy6)zfwPi9ROf-qEj9;kl_$#456c{vjpq ztBdiShZR{^jlz{vVf%;^odEU4^72Rs+;aw`@tR~O<+`<*KZ3*0*MszzO+Mio_RCiJQTbDag9^{`Cth`Z+;X4vW zTf26>i6zt-IHRkyaRmu^;;(;~M?&-7mr2nqo02$5k)0jbe);~!obpzEt^P<2Oq98aPqAV9?k5tQ8KLS4~Tehm{TvfN4~y#*K2`B zBnxhB@Ai{yby2!s#mfBa`(@xv+n9%(DaUBnb+oyDq~(a|?aXO)qx#}$(jxSl7})&K zvbV8z{wEE#^*yU1o(y?+^95mr-67*+Lnt<_Z3Ouh+jov%`wFK(7X<(4pdZ7+0=kaF zPd0;Cd={A_s#U0#^s{?!g@!V;h5Umti_E}vF6W^992wgYM|@Adb? z3EfxZA`0KSV&?=KRxSL{v~}o(ZM^)NkVCq8bZcH$i!QC;CehNN>fBwaqr}!D#K@HA zz9J#je>@#Om+)G)q55)G`K$=DRfaC-MB$|AdY^Ho)Lbp;o)nczv(LTWUAOj&Kh4$k zVRI(6i`OM$riQq6q3T02n|4Wyrv>&8xWoLJz~zEmhjn(1wqlz$+5kwrZ90D0@}Q0| z;j8>TD2pCb_6g8Refb37l3Wuko7lN#LV>G&3|+9}^x^XqD2c z&oa&lkzycv(Pay3PpnJ$d~^;xF1j$a5%)6Bz<_dM{5sn4=~W6QC+3V4_9L)MnD`2b zqWqN74Q=$OvVIdN;@t6lu0;+k&BE-os1U>owQ0lb{EapuL%9YMCo^eFEg4+za0Ofl#t(Vq=paBthI! z^Fl4Z$ql=b=?e88C71d%pTR_A*ek~Ya{Q5vJ`y*sCgV)~_4 z2MyB9%XT003y{ku3JuaZ-55wHFE7Xnyjj%Dm2To`$J{mh9Pj34T-0w~*I8;5TQSGE z6V$jA7$0~q$Ug|o)(yAst>tbg!e93^jh0=Jr&?!JwT0G)`Jfy!IO6yxG`>3O@}q zm)1e3KX_%IE$FTA)5sBgF`J5DwJP(kw}{XSPx+yu#hUBqn{V#CZtm(@AOXTHH`|_h z0!XXqin(B5jQ-`4i! z8|ARXx*ssdvGeEF=NpdLV?s*2VMk~F=^y9T%V)A&I#5$piLo{XdGGyHSh>2+SfB-$ z&yuo?{DxTutKm1{am0}0Y8nL0j&-}HJa4~L7RQ~iDaWrvJ%&PbW^k^z?)t`PIx)jZ zM`8=1T`zy8k0pJJ+}WyE+iuyIf9>-Gc*is*^QkIEYAyS@z$czr8r%0WV)gWVnpISg z@}pzl#;MSo2E*^=SJ#LzDyJAEvDieQ0IrJc4qaBfe|&B%Jf?A$sJ6y5vkpg#D`Ssq zDKQ6<{DLYbxgOJ&ZSWlA7M-Yq+o8_W&3CDb^O%ca@MUznUI-%GCl#ZL#ShUaonxUa^)f46> z8Bqi_5BZ^F!JH5UWEm8KvYhgvONwGk%5WCVX60NTqQ>3i8+4C1Q_PmC`1R-|eEt5R zOg-#=HdBZ8H`6@Us#c)O_(l1yds)1m0*7(sc4!Q0*oG#Wfc%Lns5Ox>9<8m_v zW8pugz-%8j4r+!W1!7O;D?O@gws6KJ!$IcPidmNgb^xwFk`gUh%Oyt`LdB;;6dKg2 zjWPZi*!x6#ixIol!LpG;*;o^wz37+d^I)LRZ>^$rIq@G_Gr`sAk1~8h^@(Bu)q3?t z%*O4TD!QA`QPcC@Q2+MUd+5x`Ld(H47FRkID8A1cY?Mm5-aF_=Q5S7>SZ|1$_$%Q^ zOR4@{gh(T}rfj&bs<^Ztjv}dDLUbnx2aQbq15&h0{ z>3FX=OO&7cH-#_=r(A)30Qhypog}s5w5;%^z~#g5K1He$lA|E(epO#%-JHrBltaX4 z6)NFSvh&1mQEaN^h{(3Da`k;_Mm;xGu|YrIG$-PNy*&SR^w-NwPo zTkE1XydVP9h__9rAF$w82+?PsL>T#<;}S02G0|pI=-5Wh6>H!&$u@z@Tt|}4x=7PsIYCM8ouG>m3A_y#OqD){SBXJX*u!lYMKZ{->OWhu7=hrC0=g@_{DqrXTfVSd{P{&9 zR3p?19h^{)?WWlWX5HS?N@y)$wRh}n7y+vJhf#%i~^Q$5zHHEKZ)wrewRINQ!JyOeLTC%a5Tj@V_K? zbq70d2DXcCI!|=^%o=jd?z82S*}md7zRH)J3KyqxO+SVKLKXu_I@jA55SV!lFX!8#^ai)yAti953eKW&Cd_McY5^Q z4&ixk1Sz#$jzm4kKfL-U*+oCm7XzUyr~L#l*KJ%nt%#_8Ti6q%AtAh8^`+0xGCAk# zm34hkjYt9%;ott<-!EV}wyEatne}9ge@nt!{ap>Qpx)PvWSeXg?pw~~M*A^N#ecqf zvc8}XjMJO*e*L+2)U|X=S)QR%G5+}gV)C@utx0xBk+r86)9FCrU-~>k z%QKOJKV{#7ZL-9q{onr5ZdRjgUCh_YPpH_1%`eZjFDZ9)Z$_*88T&qW`+Qx)K5TO6~1+)Sf$)l;ldXY=~9Nk&gY4FLSi2UJ>=QJD`k2 zNWIUe$^}SWbD{b(X20OvzQ;m{q$axtu^$uFf;zh17v?^YBCK$K~lH*{d z78LMxiF9)G^3@k_aUa{E>3wRN|7J+Y#+0g8eO#7Z5ZIg1+Q8bds$O&|QGD}5vgHzj z6!Q2v)=-~n_VZp2=FHxEe5#YbXe{EZ#t>?%D9Gx)9+GN5>+akE~lMc$(*H}KOY|qXLYy? z+(MAW{1ei+F^e0A^p*R{B1rZ5cYvKuiRh>taL-x6<$b0Tx?Sjb$N?bF`t3?kfim&Bbz#wc|L}p5ktZvcUnbSu)F{ zV`9(AFY#VGwkWcU*L2AjRQdY?%RTJ?IOkZEpaR3Cdn#Bg0h}?Csyjktm9>lnN^Spr zL0|VEQ)p_ZDq!q&t4OmetVi{z9BNxYTDr~Br6)Y8q^Eq$ub2o-QE;e2mCygNd%1t! zGil$>e?Le!IF$K_d1{#K&%mw%E10ohP%3j`W4%JA1R^j`XhWX>_{HbnC);T7gs!+_ zL&5mA=REWM>)%qzQY^h{YHOO7>hg1PX^RFUwN*+n^ibk0|7ebG9O>jZkm`gh zuC)h=&1_ z!ijS<=d9L>;y>-x;=6z2nbYERt3y;7!ma(1%akNIVB1$#_|OP&P+@(_9ZGDUraV-vDXUKWdKj@7*{wb1U0>S;YNfS5ryX z9GKSn{X6TZ5YLO+k?4>s$+BUTXdg!DC7e7_xbzCrIC>uwl^x8GF|6?F(O_zV-n@(0 zhHSF_Gr-0*L4RQFbRH4?W|o`fM6($m?QLzV3Sy`X>mgB;&_bc2AC~#OpUBx8bt#Ce z#KkO^)yyz2m-K<z7r+WIl)5tpagG+1AJ~x!TMSbu#uX7C0?C`b znhjpEnp_y_6BV!|6M`whzk7L&^< z9wCy+yIi}W-68yichenn){RGu4Z52K(N+@6x2UVIV^jO;ElAUOt=fidk1zjtPfqeID!X_MYD^rd4GRM`_9~ zN$v@NOC=Lme(AlaZMTTgLV^&~I*s`V5I)kC$c-(lzJYdpU>w`n-r(o@(e?!JM_Z^+ zaT*8}z|VKDK|MSofAJBcb@O}P%Hbl?)X>@WQiZyx!R=qY&n&ZL;2gP>h;n49<)xC` zba^beePnD237h*33Se@k){)Q>@kZ2=0|+Igy?k6foPAFW7mt-6S#SL)nyX#b{@PRH zN(ou?W<A!Q3O7}*=3UKqDAwe6+G^nKf$~JD;D+MHu6Xz2*!GV! za^5u$Hz~A5c9DpQ1D5dZNQ>HCZfJ$h9}4_@9^uPC}|^+&SL8{}@_X;#-J z;u+|j>YwgcKd{kT!Xwcu(~_cztMw&9CK171G(MRX=$q8dw&}EsK=Y5E+ax-1+i_=y zyf%k87#2Vc5Jbpa2W(n&GUstaL;8hkvGsk3ax4kdl$htO)xQ%^(c3p&>~~?J@+hI* zTeT!afG#r!J*PS5CqQ!wu^08ab0?WIVi zk7}wXKo~@J^~`a!6RUKu-MlB9lA2@oaP<*?8~6n9z7>zT$i1$7(0NX%kTTe!a@*M> zXQV#ufZ8|G+P16ryq8dbM+(|LWOo~DhiNSP-IIi%ow?HerGoI+judab-$XgY^mS0v z`rh~xF!U|!)JnZwT|$h1GDh$?RhhRPiub=H(xQad1jGonO@rmdd=FVic3Sv?yym5Y z#J*WPu0p$8rvhycOsDQX+Rvj^|1Sv4F6Mng^BgrOpxjpxMT#l`z zc7?%-D6tDoZ4&Fi_@% literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/pic1.jpg b/public/images/org_new_style/pic1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8866da4cb6e34af72a9a0dc95b5f01a9699c636e GIT binary patch literal 57968 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 literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/pic2.jpg b/public/images/org_new_style/pic2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ad7665e78adbbdddb76165ea669416711a3157c GIT binary patch literal 54611 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 literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/pic3.jpg b/public/images/org_new_style/pic3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f276d3df3c18e497325e5c6917f8bde8ce38c1c GIT binary patch literal 34750 zcmbTcbx_>R(lENXJ0yz}+*#ZqI0Q?8-~@Me(FFp*BDfPYSOUS_7GIp;!DW%)y0`?t zJm)*-y!Vf{zPfd%YHMeD+Ge_^XMWT3IQO^;04n)9+5rG+YMcOU!2guT0|1F4)Y|zy z00n^l1eO8-9#_%a9lX5UB>4Csp1hVeu2#0Z)~;YaUrRSWeqInCKuXrv&C=T0){DW) z*4_~!&3M!TXJl}+k!Cay)&yy~DcCwVs``1@>iTKvS^GI#i`y{D$}mXzO8A1^z_wnN z48C9&h^K_FG~>UROFY&80rN33{0qg)S(;JqAE^w6ny(oYTs>?Vgn2!cn(^O*^6~NE z^%3NC^|0sT7Z(@*hlhXw&l3iZ=X;2kr7sV}lj%Pk6m31NJsjP<99*)&hu(o|dXZjEE z)7<^v1^t8gq>Y5OhvSn`EL{{`t)XCBh?kn8G~-hbuZ^RP1c+Y@#Lq7(1QHbhiHPy@ ziwOwG$v^!mh>OXAT*oK5|E87uztT!5c-UHcxq9fiy1M+w17170dbxT!xVkYY=!!6~ zYg$@6LjD18{9~a1GhRho4@YlX8)XkyFvGuQSiq%0&X zEH135ASb~1Z(5uGKeNX7qzvCb?(zR}m;ZpCeDI&@f1UrS@!#cR3wc^I9#4zo@en}x zFP8_{bUZCWlt%>MGXN7E9UTK569WSi2lMHNhmDDejfanmi-(JgPmKSsLX1yHL`+18 zPew*gPDVyUO-)Th|KEawg@r|cPXHt)22xRwP*DB1(MYjUs~b0S$!&fJ%ab zMuPI#1E_k^4;>BVe?kZV9Tg1&6M%w+jq>mEKYb{uXy_Q2!~j$jRCF|SOiU~^9CTbX zz!R7R9q@t_gP#mj?hPZBrF%$%0QvXoPI(=VajTC^f)vjZ6%<#0)O3AHViv-l(6xSk zeBzlmsrQ*hSZS@Bl>`L^fQpKWf`;}a`>Fn<5((-HG=5UKH)QCRjO6Yi-vy4V6UOB` zF&-BH_)prRlAw_QWC7GgWi|*{={KkyaV;f-uxz*Wo5R&uibhmxA>cJ8{rBLVjK7{!)XG1`ULB2?Nv%V$v`AsdxF0e>xA_3Hk{!O7V@oj#~6yJPC; z1Tsn&;uFMJA5r;@qTvMg3twcuP8z{llQ|0~7rtz|TKmE!_NRZ@?RgxJ1o)_u@WczJ zuFlDX%PrCJs!i?UkAd#*;f~8#EKGD2k~J-1247sO=njG=h`vAgD-4#1{U`iw+C9K0 zDR}k%?X+miWA2 zA&3%8gMttlcW;J}7%3&h|6Ms|`1=i8Qh$Y_Ehb;Yd*}x?IV1ZaZQ+EQJ=0otK^mHM zvTEN?g?jP|cBjL`<%tFLZ|Uf-74amia{(4&mBvtL-~IcaIB~9@b5g_LwI(;(&UiJDwt%AfN#I8Ob7+{Ss~Fc^71&$QEfVJdo8>ZPz=-DvF7%eK>3 zWtoS*f6~kNU}Jd^4YH~Nc6^t)Yi|X8DV7gpDJ-+P340k=6ZRa%lB>fqq}`~u<8@r? zYDiV-Qt$}CLNwpULLfUDb2oSz6OCQ6iZb8F%EB&TDNubk3HOM3Y z>GkQRE(^?aZ=@dq_b$%Y>U>jfm&Hj$n{ZW8JR`Ex5r$j0OVe~$t{byBY)cdB=(VIB9m9@4!u)|Cm zY}*V9d++j4wf_ik#_tY3+Dz5q>jG!`FB|>D_yEg9zA^p;8~b z=ZQAiS9C4oh1$g13r|G$L-u0grcD8ru;u1Ba3j@#hjTtiMGZbudbJRmc0lf^+p5^Mx)IfciPeEyAkskAs7I|8EZYB z@9Ot)L?bk_^2ia4GI@eTtt%yxn8IHY^er6aLdnNT`$*zYtFAym(<#J6JA`ai#!4-+;Bh2zL8>sp0iXeNrW{iSpZsoai!~q_;iO6wYKdKu z>*q32TX2;;@EUJ4EjrhD1Qb%5vLJ8riYGFBxFQL!DrZf#4AB1UYn7Wn0<2%4op92Z zyKVGP6Q!Byf5k-7pDDs^`OBs*=!w$JwBRH#%Vle(Jr^fdOqH#`n>r$}%Oe0m@7Sw> zA2mXKqGh*27H9+vuzrq-(Z3ZhOSc$g_cE|L6dxyU1P|?GZn(Wb_j2_Us`VL{jpbVC zs;mut(NmLbSSAy~$LY83T8j^q$%0PuJP2xUDbw2li3$z85XXy*mx=tKu*o73BN@CM zB4jkEFx8_v=;Idag~XpPQEA^+6NrjKZr!M--%pFVbY$WL$F8&O#ai@z$$Imu8-@hX@RoZh4td2_l<| z1?Y9N$`5S{tt>&Df}~Uq#F_+A)i*_sWyAa-4^=}q?gDP4=3LD`1Bp_TreDw-_6~G# zw6^VI4?F@wX0MqQE+&bwMAe{*!dqY;N_Woh?RlZk0Y4XDs*ivuYqy*Xwp&afh)~Z< zM%ealuzMevra?`r@;3|)_@0CRWJtA+7hmJFP=v(r56?HG*-*smy}U0PF%t4b8n$oe zL(t>o-8;-Kd6VZa8;qJ{g}s_0wy27N-umKW^esOegy_ocb|yqYxqg!!_QfwfoYf=U z&S2C<$fQ~m0+p#&E!5<;_uVcTKjzCdMmkK#^t27N!|#FVrkwQGG1G9#Gjkbe(Bkep zP06~Tltx>(b^q*pcd)bDvAk8FEyYjcP+V0Ou?=_rufM>B!zLb`qFkP|4&v2Y(sQZG z1w+%HFMS$z-5ohc@Z6x{esP7s@@T_0AQrmbxdpAFv0H^O8P;2Y;!A5)HyeT8WRS7X zx)Gs;h}dSZq0A!YF{NDaO!6TRf1+*9hFy>lU!^D$EyBk;2mO?<7;*lG&TQRBJM_}> z)*c^7oTWa6bG$MbU_)O^hVyB6Mp`vzZ79%I_tNqcR#L^y7vBLgzx5|i0tI~NS~ge< z#k?fBpaEGZ2HGqWtr;mUoqGe*Krf_*;%vy)1_N!}FRd(|Ki5BB%pqJSLW<;6qEkG(s#Cj@oTHv*e8@ym zgQDG$G5Mv@!vKFg=K|*Nd9`WKTxkfU+)MqY=xZ@BWQJ-+WdkfB7waX$vUYeGF*!dZ zl+B}@Ka(xwX-|i0JH_P;K@$CTVTpVLTyZe`bQIa-Za<2fZ*X z)39cPyV04+at%;Sm;A&ct#Q<-tv|)D4Ct%I8b_St^vEyg6L5%7*LPs4Rn%+> zo;x`rI$;{w^&?Hmfi^-Stjapa#`W#_A+8MjoIlY{zm!mC%L0BH=$s^yTol=yUQHKi zL2I@RaXku_?tg}r3ayr1VS`is3g9an!_m)5U;Qe^3m(HEzje<|ZTY=ZOqp!@yE*yC zO{bU*DXlE=)oOgX0{l6XuT3{-Ak;D;&Bl&>?q>jy(ZpqUWZf-X)6oHm_CX-wr=cIt zdW_%i&8t_gGu5dngPLejMFiU3zS%#BBdM$iNK7?~(S24E$^@c&^{WL0$yh1h4HJi= z!m%&^lw&d^3dlrPDI_dEZ6%Tsx~IR^_r!wJZaxLZ{aNJ2x>c4na|3bm*6yYKg$RHS z-C{1H$xzqN$VznAGB{*~6b_g$I*RT_R4uz`^JP5IE>zkKZSjB`DT~Y>xHNKoa zn0Yd)1ogg}Y?wRsgMselpN|P4s|tH#fLa9i=z0SVFlexl?pe*s1K6ov3n2lR;5+vK*b;=zGuBh~a*vJ$het_)qP=ZeV( z3Fp=E&0X-GaH*lT_Al+}=$p671D2fpM0l8(pUH)>7Wk7pLu;cm*XX8u2Q-Bx!3i@Rl_!j|Nn3hFMbvP=lGUKlma#mdc@jEo6-foR`>UPuOJVvY_t&z%wJ zg`wmOSfh2ji`_Th`vNT%Z0QLOx@Q$Gt+vu!z_TS%qNfHmC58BD7PU)QcsDnbca1d# z)X#3GJ({C$em`VNM?W7}3A?HSU4VLj&19X^%sji`r?*4(aoU$@K=35atjNKl9b*OF zek}Tfp@MI2=ki=MJqwy!^o3mskNs7gYVV+5$pi$p8YQyAqgMQr&^`{rWJ8ObeLA3; z&#~=wFkcW9jr_^dE)cl~;?pWMkSX&PUc^VEeez$>{+mqKTGgR*h_KEf7!JGx(OwTJ zblJ!h04+G!B6{D3T>hbWt!>BPG6_ei7$!;MBE+N`L(QqHX=+JIbtQZC2>3!?eZy~4 zkFn@=c!BynaS-|@9b!Uqj&J_TlGxF-wohKuH_jVZj%OtWO>sMo?f@S|DrUP&8DPk< zQ(5^#wz(-;maFR4P44%F_8Wye=|1;;kHA)Z!mwf9@~AskkdJEQiXA4yPV3a3-UFk_ zD`|GUdo1*h9jTR8`hLU@$Z4X$y~Q8Ds7Jsko+kZ+@O9Q=@8nSdR_TEMY9oqH082f8 ziGDiF*1dsb=0LwmkEY0t?)xL4Ak0^SZtFGjcIaCEqZ4Wg?<;BFl=@@jv#XE?rs%=6 z*H@Z*TxK(eINfCtTn3zxG@X~9V!i9JwSFQv*6c0|D0NGx{7L?%%R0%PTE_3JNZ39w zp~#j4?}1I??C;LMMN-ts)W5m3OiH;9pl7?%x4&gV6NYcL(X(OmXm2_NG*XraX?ta6 z@~q#dKkdvWEkAx*U>Kqu zIXtwF>#h->MFN>%#OtR@!~ac|UVy1nxoJqr`bT>!Iv|YtJmSFN+Q9S5brL~&FXl)0 zTX;6bB$Hn#;ys=t#e@Rxnwgs&qqeeZkXx7Y%|<}lK$^?B`5U58F~l^(J+L%Q-78F| z@~^}{3wkYGXi0GDl^|kMrkoAg0lK9-htn;|-ZtOA?Nm^!H?2J3W~OVTei#K9iL|_; z1BcVz{9rohz`fNU^+hNWZB9m7jL$b%c|;hTHqpQ7QI73}(SP}AKE!1qBqFBwmzVeX z<^IJVin||wK8V)(%V(N?XM-#n{Ari13to+%hb`;)|EjJAQD;U6!^)puqhGGA%)@X}S3=REqzJl{ zWX3~LFZg`L2&OEWobur4FUAUIgSBvnu?QPQiM+=DMoh`)f!zCR>iV5aJV@ z--lxs@)IAx(`8<0>kC3V&S&F6itVNyMGI+Wrk>c8dR0t!3s!I8gsD_w;xrnJ@EHVi z%;4fz{aht}`YqAG^635J;*dF6ckXiu!4>c+h~p&i(bD=5`uhX8MM?62nCw;Z-QxWh{2JmyLhLYGXtN zuj#yT{Fr(BBLFHh8HKyE%fOny?os6?k@QkddTxSC8ay=)_J;G|5CwpaIffY@L~i+G zN`B=Q8XR$Ay60#`+w=T6g|;8IT7P~RxEHhOoZi3heKK=^QWzpscWUoC%0q@ri0Su% z%&>r8wz&YuiIM2Rz>PAmwr=T`Qk#^%hd-?rCCKoM4D1>^V}3@22-Tpt_pA~-LHv^3 zC(VK3XT~pSPmtcZ@gYqfLPE7P+Sh;AoP5N+v1B^v6*K}{k6)dIgL&3d?EWN_&hB)h zF5P2IM1O3+F8J82j&@E1mi{!d34bNVEXNpVWE#-u=FcD+$LlR7R7bX`44n9q97Z%l z(Z{*@Y}p(k+8M-f@gt`sjgsLS%JEl};@m0xJ|-lIZ?kV(duh32xgL5iMj1*!)SgR^ zhiE)k?cO(i4iaj^nA$fs$^Uf0@^sh+&}30g4V{21RC4nIR4{(2`I-C58HqHtv3=E^ zBE-ctOaJ|F**kfrICN>18W&xkbqMJV7R)N%U zUj7Za_+znL8hcR)L&G+!9W*PsbS!@aWG*6BK8}!Ugby$pM3QBHU*MlS6km1O8RPVx zzlzX#1o&h@%6E=Un4Kb+t&d9Y-X7TYW~Kk>C!CzTrJJor4#AKo*yY`IpY;;WMvP+o zPblm8D78kVlY1D7Ek0fjsv8L!k$>7bU*n7u)i!7P3KD1HjI`hFa~n^YbA1F{J4(-4 z3>41ubv^=;Q*W`z@RBs^-VusSJOV7?%0LCah9yFg)1ZIqx;(b*>tu1pRkxrHaQQFF zkJ1)v76W;tSJBUzDdJlFj|G0m_!CWl1pLNavrqRVO`y}<1(7n7dtDl_)pahH2ynE1 zH9($-%)6F8B38mOO2zTrYA6Z8l$nBKt;zEVy3^N+B!p}eDOPHB&j` zA70m3(BEtYe{)e*M|}RG0?-b>NsYz+;hOFEOF^mbB{|KP;dR-0xyyA?yEZ+|ZtumT zt*vFV0imp9E5Ka|JEmYt6^+>v!?EeB!f_@d7)GaK8)WzR-6*_4dp0snDocBc|9Fw* za#z-{2jmNd>GVGcnr|t|z6RQK?%Z|ly%it8^IN~iLc_{CQv|(@>UHwxrQj(B zc)!rz0P;5i8b?h=?9W9N$1*)7lK%3d+#C-aXg?TvjrE?*Qu){SUrgc`)_e;fX>Dwb zSFBo^S4FQ;Sk-5NmW9i#lbjGzbUO?et6D9wI-At%(hdSfIOB!s`U-9R-G`)_E#Fry z+oe!!bHrM(ucebM^COl<_YxxiW?0>_Vs`rQ$e9XQw%kTdPYQ^{e_-Ps5BqwIcU`d7 z%5sCri(hs0Eq9gSvZxz{tq5j$HF+y$!EhmSAbU7=@CZl+Bu)G0I4K6%JY))#(^a%r zMlPe>vYoHlFkC=8|CW`HRjnqAEa_0MA$Sn;4;pCpMK0R?wTSEo`b&3=Fze8zyx2?W z21zv=EUjQ+2bl~)F$xiy%i_M8U$p!0YZj27Vcc?_iZMz?Z3+b8#qV6DpTCzhHJcye z9?{eqR4er9jTW)q`p^Oq(Wxvp4bTj=%$WWFgMfzNM{q3~%Cc)$9+RWd?D=Y6jTw0A zwaXnJtNFrH+;Fq2^OogZ3EgJASvju&MkNwydQpF%M)3GA$xL@+sy)Q-vi%iZMLNI- zBKB-H=*+>Q0@z4c0+)A5nTz9rSbKqvNTB|likN@t0PhR>B@B|O8$&v}GIPW1A!vC_ z>=NWfZ3shzKe_IL7EkeJjE|m#SFJa}OTC*D0ZZeh{&!2$+!-?yWZkJR9I?+^_@+Y* zNOYQZc&pQg6Z1V)J-O}hwdHVNEedl%9NU=h_Fn$-Qan^{N9?Z4@+z2&!7={!ub-V|fEn!3?T85v6NP7iNRE|#=e zy6NVDuo?H14MJmD8wja_jDJTD@SUx( zWOHrrQcn5fUvpDkTw|CT=Ud+#lFLA#z=-8)*;g<;XEQgr$Pye>hekcboK>=MoJe%_ ziCo0nWWDpdED{r?Va|uCLosN97bR)Zq~J%F*bq(WFfdKWq~NOJ7x_(=JBSMMZH4O* z!1dtwkV!tji#!hcWW8s5FNW$}k=>T~Alx4Ey}_J%kEvG+m)+kT11W@o;sE%ADKhYF zzZMKREz_1PI_?FQ@*e=xX|}ziims>|ni{LJ3z=WGQ@mS^Hl88bc3A2h?Q(w@UMq$n zU?krR7lWEz$AeuK%wk27;!L$~KmXwAP^hbae$EVV1TIC$V zRWI2EgZ&ChQyN<5X-<#D!ootin_05Ci?DLPqq2>7C0Bo*p2E-0q`#IoO*JN`T^91s zoKB-PM8Wr%}!^4w4YVWql)le6v&&r<`dSiJhe+5jI`e}8QLZNuS zWSd_yyL!w%TjWkDL8N}u|5yy0lZq4|62zX#{z4(P?d{}1Dl5X<{xDB@SCdokE&z97 z**11DNqq#w&)a6wah+)y+zR8JTipr^eOG!4hX?H5)ZzUenyEL2c6=4Xvzx7%-nV}r z0o=*A?t(;Skx%g`-T4u)Xmvi*XeS&qYH}cr=eq#rg|S*EKOx|h0*toxg8BJ4FyFs%Ly4IxPZ1zawiKrcuU{|pVc)B{i~(P) z57oL4-VHBZ(MCCb^QfL2mH!TnEQ|;qwvFBwG=_!oYm41PG7_7){3X&7n+ zHh(O~FWVaMOvJuB;!m)j{OU;@_C4v_h&J|jgV!OD8Sg_TT1m)j`40g2=4cs*0V;5_ zchX&TmplDe?hFf1&A;(YdB-PTW=S+Gk1B;($?AU;I1ABY>3n zSpwPNfO$CGfvqj?<;qX+3nH0cVS?}UYE(MaZPRJfngkV$jL)|=Ue@k@yGFSkAMFgP z8-D&AwcmcTp;rQ{v97W15zsA4H3rjEnT*==r)=7l<@JsbPo4avMXbqhdH-d2H3EOZ zgRp%ELBBY!INsBW4{|iGT9@fBXFMC`$=G~_I5c=Byf)-q-gZE}*FA5SjPhQlyU`vx zZBT=DWfM|&`<1|i`ohJ)w!8+T6w!4Wtc}F zq)Y$f6Y1`k+vb>to$QQ|p!KWgS^bNl;c(@=^EG>;&9b8pa&LkZz#AUk>rnPTqxfNW zr|vl|We_j#6;T}EP3^0%4K?aev@QX*#X4XR)46QKMH7L{S@Y5q&ty-XFbTV97|q{x zQJB+irB=orBSb_t%Y!vT&6H0dkzZIBk=`fGq8;*7Z8QQ#Fpila{!?6?{&=lSL zbcL}^&*936tmN6=Gptxi+uCB4XWsg2EU2;P*c~d9{0K1Uf`weEmEdSUFx}hJfxl(b z#Emv`jf=X7MKC=AG%U+DDy7RTXuRY=`1f;-M(;{a3Fpm+?%S1N`uRR6HWmb`tx4S6 zqNU6G&OSa3i$>ip#~S;FcHv)N%nA?d@($ZoZSP_kq8eoG?I-b#GBCsruTUn!(l{jp z8xES{gDw(sE>4QcKJ8X=)Vkm6eS- zBQtO_+t4UdrIvk`%bVbdCO}9zG7y+&*n;I)B%WypV<6gE3MABg|FA)S;Vy2f{0PW` z{#`#)nROw$X>2WEQV851zEBdU{k)(L-?HT4r;>aG7{`j7(wpTx0{Zc%yWNhYt=$NO$Xv}iHy#0Dp-ULDf|s}a`M+955Y}^fwyL;I!=27} zf@HhDIgUETO9EH7*j}qigGDCsnN~@AxvI|-0cfNZ#7P&li>K)jZxhF#QZ|V=QU0U2 z4oAP^;;gDK`x)0T5kZJsZ)&oKV~a*ko_$wGvgFCjat4Onm`&E)sn;kgQNJ?k5H|~l zmxou*bq{)o&?I;1$#iT6_Zah4`r0VZ(@}=iag(-IE3>guV^Q%orY{C_h6Y5sppYi7 zg1N!5_wH?r@(X!bD%`@@6>FY6ILVGK5;I4*k;T_ZHEufkcAEMxuo zE(LzK7n04la-)bik*R0!(LCL}meX)8)MXJOF67KIY`>kAt)CSKjGHb!pDnHvj~O_5 z6I|)o=k5%vo8nwxGNC-*D=13~uGf8KEvO~1bkN&5<1aj~x#)&J1uFhNJXuTCb1@{i zaOt<%l=r2`?=vXop3v zH~7AX=D=@r^IJhk4|P{if<6W)o!FCI|3_h?kM-Ba*|@yP-K>q;O}wYH;kB7KU!{KJ znRahM^ZD#*g}A@AK^_u$w0*~YPgW%|(BxWG*V^p`u5f(iI7RD~5oj7f&?>{$slx+i zc?2vBJS6mIH)|8V*?zh}ejxpOC1t)Ft+r7qiNWpBuSkafL7GNOL}Dye#uAD-R%-%o z@F+1c@uU?lvSn1mOJ+Lb7aP$mx}O~#El0qj0$+8En~wglfmopb>Y$b3BcdBNB7JAj z-nd(yfp@XQ+^}TiLr?Q@LM%)FHD<{^RcM9SW?i>m>8|BuhpjXGX%Do-=^4H^?wqcf zQ~3-2tJ}UzV>&j~e=f%3EvGQB+;NUjx^a6148-lciLy0sX(cji4YIcU+GSqg7ufH& zs8pxjnE!^rvvr)4H$IS7ZWO%NSHH(EgcD84c7|vU=OIp?Nx=c%LO0;|g7hUC8ug)02+W`nACmosq=O{<0^Duz zdgxi8wD;3}%L%`Sh5m{&>nbR+9}3Twca(D##wy#-?G1;4?=gf3Sr@O~Z$x}h7V?e` zoOEK%E`un8DLrSU`5SV+ezdy#E;pp&Rq5_V$g%(|X+N2sl}vKfTy^<#5DBzLf3W|l z#ZoG)OwhMspsgczQ9icQ>85jNaG#}lbRBY0!D;a}zfHw^!R4y239_;M6n!dD_=&Wk z>lA{JA$*lJZ;u|LH*cao|M`IBP!-R+Iz`|E`WxTOXfXAo{VdpfyOjI2F2qEjnE8unc(SCZTekAKIaL#~QgZl?#il78RvKJ1{Bc=GfL(b4nxq4q zr1cDd*M3f#2r?#l$G~eX^J2`Sqsl46eP}X5#&}_wZznp`;ucCJOT^Isvo?=Oe0qO~ zW;-kZzA`rU5UbBL`Jo+B#nU}4hyPN_VJR8eyFN*uCw0I0@O{#~I@O^~-8Tb!{Zopu zQTl*@4aMut!#?P;nREI6f~%nC*l#by@-k1m5$`&cl`A$KX$E_#d2cE8Z4z+k^DaWX zcJo=AQbU>kjEABzMKtp%Xf(qYAT72nY188kk7Cy$xU&z9JV#4Zo;-Df0>@Wr(eTes46S!Akq%ul4$P-f9( zb}rK6m+;@uX0hugeU~+H!(qw0OU;4*CNy*Z&0Yb{^NMeK*+1Ia5(l^6!<*`YLsP^d z(ZcJ6>J`>N1aK2kX;Qz&?RIqO@^X8n`24V@az6Im_{!hg0NIYp?Rb>c95?HorNvdG z41D9^=^c&sv4_m}I8OCugO=-WG}7C%cc~|^o1jmnQ|d)1BKz;?&!*|M=*DH^;FEVO zWui-mL+RZ9nJYY+@@$Q<2F!$a5HQ=&)0;2tW5J*^)=?zs=z__411yg^Z7@HvUXbne zADq=t#GrQn%Fd^U`i64ZG)VV-zPZ!7%s6}--E_9ja?V)NP8gS%H1ySb^p=z z;2y4KXqv?uQtjNreI^Px| z;M%uF{b>l9Sun+yR%Fu{)o#jVLLXkBIe~jitNj5ukXUp{htJND6%K#;JZe#JVM1%< zsNnZDuea~N4|~XMP%2&&#X#ep_#OEOuqSeWJKaBN(ta^U@yV^t&%Mms+$q{f=VGPs zK3!T37jlUR=-U-887eMp%3faVr{bLQO$cNa$2WZ_-VKZb><5O{y)HKUH4!73Z(;D8 z9j?!_Ab5ExDw;N3g3g`BhR(@yWG?nLNAc|)^B4J1xn9K+ex<=)WdocGM9 zt_mjlT*u+F_g%R40gi5@#oBK}eXn}XZx<=LVuBU`+RUlDQ)`rIR4Xwe<5)=c0 z08e&;u~ENRPW`!=OE|Y|>o(r!IO1d5Gr1iq_Q~pU?pFF;@$&5jXE10V!O_}PxphC1 zRcPpttiWIUC0M#QGa#*{A}RFJWIFL--r{!@chqpx*WDO{hzS|Co9eTRoTeMP;T!Xv zq?TouylfBz<6*bJl6iMc&&na!_7zDtt;n*N<79)B^*f@V*Yd?4;m=khS$NruTdIC! z#8RR}T;cq^5|j#(kG-zPMm{6ToOT*~JH&o8tu(ARlPsM!axfbwB`hI2GFHj63>8#w zEFUKJHADC4eNjQ1_1W%Ziv7FvD zTiq?TmRmNL&9%CZNqlfMy$O%Yhopq6{kGSAsUJIKSdMs(!DVPSum$=PhK6PJ0u=K zS|=1M>dn|bY~Rb;u&5Z=`D~}fH+h$>vt&(^Jk~AhbCE`6T^bQO=t~!v^M7EgK zpQdG4HF3=9a2fCR(~WE`(<>Z50_Y(v0jZ-|^M0OQj?0o9UY!F50{nD>W;Sn%6?TEn zW#v9s-q5>iB9_n<%wA84X1wr1kHlT?<5CCWDFR_B=am$GuQadOQ<0W|lelXwuebFL z`%MF`KDt!>Wfaix&~kwyi8jOjcj>Lof!g3n)1L9U1Fgx%Wt^UxQazZRuY=s>T~PKhjEv6FKb!~b4Xa!M7PakBG-{m5udC|u53tKhi)Qg zT?U-`+JtLk7AA;Nyg71% zjz6WP+;i&1{A80FymJ&%B}JA~zhyO#48~&5Zho%7U}m5N=X9n~NEhPGifaZjIak2; zmgnoiJ|M7%&TGil#wgwk%#aI*+@cXle}3T!E8hEC^|~85!SlXxmYH4DzRmKtfrff0 zx+GSH32P|TmG$D**Cy*G7X*CjV7Cvk1-4{Gj)-oJ?=zha&i$c=a3}7&@`@ns`??m) z6^i!L&7by9p8G|U6G%=Z&py4r5+Sk8cIpi?r*C{fO!$L)HzQk`%cqRTIh#Y7QejtePI4C5 zMdeb$-N+N_tVcleuoh#?l$kJjfNH~pDugK}G^3hHD@#tblB8pj(6;MlA6uO?|VQg-C%EztT9!EV>ffPpIni5daD;?tz2> z?Fi;nk1Ep$p`poG+H5l~wR0cVW%ZB0)LwW6^ZO-L_sQ;&ZouC0kSTfZuoJn)YB<~7 zJOZY%*vwsKj#a2V&%eHfegx5;2V?VYI!GIyE`M|04-(b1IeQr=;{EsVdrkHH1|D|= zwHo(eVPB`SqJAaao%TObU=$kAd92T=&rK?1 z^a>YeB)mejqL$ah$JPGpfwjh_e*|!Ue<)^Q>Py~)JP||~Sd7h*%S4gEl__~*#PSmu zL*)pfn)12z-yX3F1`}$de1fLy&d)*xQ{EY%0#VL(d~|I&~U0TWoXtlQ4p$%c$0g9f5JT! z;IG!;SpLbc0fs>4rH7O7^C&Uj*<`w{s5{S(uT<37S|ycvW3pY1DWqYFA}?q>Z{P02 zzs;D%rRgJlgk27W%6gs?;fb;M(u~>hHX~_nC2xFAowVREe@C9Cgz!zP!yyzR{iF0izVy%+O2@JU`zC2*j%f~}A6f`FQEFIrRdNA}Lxg!z*6HBAv`*MYrS%0@N0t$^lv zb<6J2=|GmR?dx}U>Jkh~BJ-D!WDRCS**E=~b8Ei>{uukW0a=iAZu zZ8b<)wo>4TYS5N+QJYCEBTm9IVLa;H9|I#;0@}SX)LRuJ_(}pp!1MV@^MSo=_HVKRI?G2}q`p1zB>cpirONUB_V#G=M63C7oFB{=(^Q;l_nCKc|+gVEOvQfcFH2#cqX2E~6lw zd|U4JZXf)EXN%Va^@vV6SAJEY)Lvq|crjjKeM@zapLunh=x3{o`!a2s%$u}q4$^A= zQS{%R;&5q>GY*!JdrvMqsPSN7WNNl(rp^AIca2zEHO&_VvqX|8jC8-=%)hxlQGGpO z{5r>)%7n9y!8oH+-CGCyh+*4!dnGDnzU9L7>^($V&^pmMy?5r5cLuBBI@EZVs|L{OTlx(S9@`QvsANs)K6Vzn!S zV3^hE239XiI|m4Kcu0gG7CWiC*-@d8Yfp>3-$sIMu$4LnltJa+%C`bxYeTH(5>BLHyw0 zTZAdrBfy_mv^Kzp8N)#;u~pOc5r1X5RNIMta6CY#@V6lZ01sKM}%&&6bO+6iya%1Ug&&Q; zt&`}3MHX|dbr6K58Rdy<^n$$Bg zO{&x3H-DD~GcxC$>d)6cj_0VqtW|G3)Ul1@9Wd9FwLj9tmzK(L)Uxzr2pe;t;B;Zfa z!KTfKuk8j}iKlVzmoLS9)UyW1?5eYjeKiLJUX7EgdPM56%OpilkCJ@Lky{3Xsm%`c ziJbXuW4AbJ7;r=LFxDhXV?96oHT#*w&^O)KkI{R%0;WKIX>rW@T^Cy?G)pVLN1IzA z>~dn%H)G3Y?QiQ@_jw~fUho-i*QXdLXeeZi`~6`9c(ZHEoIPL-Qw^hQxK{arihY8d z5I}eU-A71C>^8hC%chE@=vT2`d+DepMxeSCj27%p^;OCZm#;Xi5^z{Tvb!3r=RqPD zJixrV-{~kkn1?Q4bE0QKK7krAhjAwGZrv2~IvK5&8?BfP_vENUCUL{bjY!3f_>Xev z=Jy!sIjp?J^oXMZ?jP?4NbF!ujri3eWgI_oR^?Uj?ZJx;OUpNs<;-!m^{{6Lrf9i8 zwZ1YFXzui#w~8Z@kL=q_8nfRrd^G-|YAYoD+4@IM8EaLXDiBxubsL`@eVKcI^{iaL z3$~*}4ByZ#u<%E5mYuqEx`I8P@PM(`H_EJXUJgX zi=?hAWMLYfw&4)>$3eJt8>Y5Z=Ciq9)gJC^?rr!P++*~ETN}p+CQ1rhDA9?&Xgl=9 zuVv7@{vK{yjaUguxpkv}-;{qG4dUwY7)~&a+V`oADJ@afftH{khNj#n7RA;@q(&x1 zW{&4yF>^7hDG0OEVx!}J$`U;2&++%TxENr{TU_DUPPv^>?wpYH<0og$3uXh(c(k?C zI6eP?e+E1sTw~f|msI9`&AJY9)~8FjSk0DeFj?Mb9m7acwX6G_94U&@fj+BRY41&{ zQCoE@-BC-Qj@WK~KNnSO2X+rX7pO=(rUf>T~hvkgOGzj!v#zDq`Y$ z*_ZE?P4z16bd8Y997|4|Zjmb5jtz#+Ve@?~6ffz^7yYci7$2R385cP0B&>A~I2|NI zDRE8I(|Lc?#o#RtcPNnlPGJiM27XUpO~Ik!kTW8QY|ad~aFC<@Y(XWAZsXua^&<8a zo~Q+7CR&CqhF-Dp9ZSfYBQey=tW?h>*Y7om@7GZg5!fX!>FC1~9bbwiML<~9ewB`< zFC+OfCcpC9zU6*OuXjOT7lgfewOd$-Q+L{^+|Tq(?@jUCm$#;SS_%{|2BMU> zbWAre{lRSK^=eW-Tgs!iK`}GSdDIYUrtE7o$=US%IKzQIhgf($Vn3C(esl6h!K2Lk zcwsT!HUvMFWIFw=SxFB-ftDdNlnqwm{1ZkZT>Cz3>Ry!f!tJ+Q8!~0Qv~S==O;VH~ zAEz8!j0zRqfti0^{Z2I`=q7BZvDpB;oEy5fvz$d{*gLdsA`wS5Rvb(h>3-1f(l2XV z08Pz&V|*k6bH`?zuS{TdwqlNbVBer170AfbJ2o$*@ouU}GL_3B*zQ+r-*>kUAejCd zo3|;a<*%88VF;}f5?<}5ny}1j@>scv-5ZH3zUcVS576R}SB6`?+4;s*RKDtHYpaCIp)2=pZ+-9( zceX^7bs1TQ3(hQ||IB}eogzURNy?KMZZ}^tZc>T5>`quZHJ=fN}&3G0Maa(P9 z35S>|kFE{wiTXQ-Z^aPMu3L1fj`he5(bAxZ8hF)!4G=#LQ_c**9rXvl8&gviG`jR| zt2MZ!)wjA`8ioR%b^7?!*K+<`m->GIb3ly0aO(~#86#@F4`!e-Cet`?(~PV=3)dSz zS?zM)ZL1_rZzn3|+F%5cwJIw@MF`=F=CcUM7zFZ~mF&Q94?DW`I;W^(4kU)oz!>c< zi&Rvf6pRL1o9Gzjce`KFy>yX5RQ-4TqL2w$4-G@GVQS-ytZ8k& z?zYg(>HMbB@zyIit6Akq7$|x31SJmv#}Y8G^hZ)bvG0b`=7QPdNI6kdBwCopq-Vg8 z4SNB?Ys%fNm~#1+J1f~1?<83#0I1YhhHeJDD~#CA0bN{4aUf#lkp`IRYvK0dwSpGB zvz;@+uY<~JqXvm?+Hs}~*4KdbU=%pu(ZEhw*FHE44@U00cGUOTV-;FSf+#C7YM^NruTj`|V?8!slfPT97*;-0 zb-j(}lHJbCPs8XMKbFMQa+HwBL&bOZkZk68l4VQl0WmRUjxdkmu zjDK?(HD=Yut@UGjYiz?h?o1cOIE(jbnKqfhBVH%l(qMkn|Z&u-1h-3 zq*usFwxeEtqF$sNnw^->w%Y2xn(cT+^q$n+KXtoJxK6EZEl}HBBj^F$$)=)c)Cwz( znfKL?U$?Rwbn4rPcL=51I*aGLMWwZ9%yAP?O0ar|2ZeB&d{}MSbDXSO&BoEXbTzaw zPA%@DSGb)a3Q9bLv!<-RCplLfre@9Ywz)?(@6vZ$E8FgNq8;Aq-D8&F7|5~78U;ob z;Bu)PD~^|2o)cZBF;8?p_q24L)R$Y5fw<3{b1e;#i zuBwA`-KE@OWRbL*Hh>)m>vkVrFIJaXiqCHH-VrahmWn&8##ni}WsEV+fy@%1c8>gS zF`h?mt!H;|E^H$!69s#VaK+X+LHJOd^ffZ>#F@q^appQ!)#eXP!88%w^HSg_AsRD8 zVkkkV_Ewnl?bmSauJILR0o%Hzmv4$|csF)?h*wZ}h-&MeBn1Be3}hFMEX~(6wo8c4 zve+(m-krF({&#tIGFEA=?qfi_vU19rfgZeFcb3V6Z7iN#=02h78>EWX8^@e4@M6oe zg448Pwbx%bahvUC7k-Lu$jp%Z^F?L8*xat^YZ8&@ z&gH)lUVakmq;*Jjena|)C51TEADIA)9xLc0E`%n^-BVqw*Mli0cw zd>0m1)3iH`=U&}qb`Fyo=PxC^D=iz3ZZ{(rYlQDs+D5k)hvf{myxvqdX_kb7r4B}* zH+aS^}u_MpPXaYK&t7>R@8NU+TflAbbmqaQoQ#!n_RYrDH7ddyJDUqLpu=a zzY6fj9@~6Jr}6z~HGk`gwtkz~k?*Ave(8n0J`iptW2vgGod+HmPMk>`_wV-F*9hFY zruO%78;!(K2LntfD!LTrN|mA1dr8NmPPrx?ZML@MU>$3`Td6srgXizO*ir~)!#aYh*p)ZFK1q6BRY0shw2N5->(|l z>g~;)qf!~j@w1!YjhT`#??zb|xjLwF(_e<2nCm+JZkzAnyK{66SW7wxr1PpZRm}9eVYMS!{f4{!l#>W$+O+JFr=~pUUs+s&+w2HMo zSk}7bk8F5HY?k)zv2He(R`FfVso}So29ufiGC1Hb?(NQSrekJZ+5shL4K(m?5yxOA(l2L#HPL@ zmN?$bTw&UEXPm4(OVE-@v22!h%?y`HBxksdye2mqhNH%a29Pl)Z!LYRW*qlrvSHNL z)-#?^=a^-1HE9(pNgb>9W39Yp#~8SFo}h^?x_$P^Rv9gA;n8I+x~{RLQ-RH@!!wUB zwk~q^dgfux`a5dgt$N>VfF_+T59GUu(u z%cQpQI+JF$fW;>!co2QV-)3M>$Gy&W(xvg@x7i(#{!7E?9=FU>3j(}aX$@qq1j5`i56y|a} zY2R#i>-g^ChCwuSQ!YZP%cPAzPBFHbm~UO=xmf=IpICn{{$um7Yp*Zl^!TZ(RcT7= z?XEcetKr}8#S3;?-&}fGhq&dAnz&MSi-i-ZVgPRmCn{mQU24?@q?dLV@Ix<%#mqnr zSVCxK6>o<7V8GTPfj zRbUOzXKge}s*-pOM>C!z+m`(}dIrk=-=@5-yRn&U@3+l`-rr}M6+xx1P&9Hz?ZAbR zgRniA>vobn_gl4?ahpxksgee@n{{yj%^;8Wil>3ivK91W&$iONdiBw}7g26IODH!} z-Py9}yRmYjDUfheksyvCxQt7)UvKK@erDTlU0>5ZDS5NTtrW>D@nItPB-Zkev`l73WVQdgF_5*2kYs9xN=F>dk+Wb(79 z4ZFc>e{XAVDGhTHNh@oo!W)LA9mf;yMWtGKO}oP&k}c-mDMdgl8`nID_^|hjE*HIz zd%oDN;M;d8)s+whV4_f7Kl{B;q%zPk-|Zju<*AV8xdSH=}|(yNY>ZXEqTvx@ar!@lgd z!rOCL%9Re67Sb&6GM)rTnGPHpha1jVvj*Xw;Vo9(Y7nE7gTOAYzeYL4YYH!PkQyNl8y?5kA*4sM;_d2 zM9F)PL8aEuX}Rr}CFHpyoe$hx=+q{M!`d;!Zp>|p?>e)tVmoBnt~P$5OUu~ZHi%fp zFJw{`*@mA0;(SN58rNyFp8De9*RSD*?%dm5+zX2x3h}IMrlLQ(NXUxg%Wv+>*ERjP zQaXax7_XVFq2$Lo3mi%bCWA1lGxg(o?8e%wr)%Bqu4Q2aivtZwC*34xRXL1y*J)gK z*1@y&-TYQokn#&l69swH4r^&Np+68Ia;`c#y3^jF+Tl?YFl$;#6l+4D{n{M+bH|Ie z*SoGo7p->7Kk19OEFe(|vQ4Nc1z9+dc%4XbUQWuu0HH}AaFXe_G8-cy58N> z8{~dow*73z>gVN(N4IucTa#HQi9fuOoGb9=Mm&?hTiNSgk6Sg#I}Y)E{Ih8rtf^~e z@DmKg(6nn^I;)v1t5ZyL?d#^#t9y7%#pUdmg71IWt%~l`#tcb0(H@dRFbc!NB#0%*qKxk+1e-NnA_H|w3{ zt(Ij-?xK-Y8DmWOYQ(OZp6qnee%x5+*|+Y@qW61yZNl1kqj{1U)Y3g_$xZ;CH9p*N zyJEZgx#h<~!FSY~M!~eZwZ-XXxw&9SjuaJnA0P&t{)~D$`!g-CH*Z|m7s$ZCTbh^o>%;Gd@4SgT!$+)@L`$O{|!UuI;w%S6g$*VQ!7M!EY*U*N(IS*?cCP zN`@64obZg(4YTxZN3l0CC|VGHSj*0IJoC>c=Wr&jrnecIxx zoWZB)t~)rScV#1Rl!1|EufH5Mb*Qak8CzCJ$3H>F@QWu;-%6keWEz30j{1sYj{3K* z$;ek{m8W@Q`D@};h5TreFgfZXH}G-vSJRC9?Ha@pWns{9LoNRMeRa5Bj}k#4uQ2ui zs%lStSOJUgweiDR#7x`9*%6d&8&o!nCkbaiF(?P{YVfDBzPxMNwdnz+#Iw7!vNVJ) zMU74~T{YpQ@S4;RMq?38Nv570fH@2quF25$47)9*y=s?HrTj-ci>Qu79e@I$`*7cE zxNR|N+IF%d6(=)Fcz)XB5i(u2*$ThI;^SHmuwZ2I+J>S)90fo1*96FwvWdV(BD@NN zN{?3z28P~XYN{@O4QhUYiWb&UwHPHEwEDec0bbnp#2d8YM`z|DGAmGo95k%}@b>46 zY9lSKZ}!XGE~4VnDVd>!j}qng82b1eYc0*z9+m1#%R6hZw=&He$RrAY7hOc^Iy?LE zt#@?aU3S7Nqx{9b>fO?Pwg)zFhLNt?X@7Rnt7&hJIcrdU9ELl3+2_NS*G;D%?fn(L zuJWEcy~_U2XtRb3m*|!X4FAZsD@BD{TS<)EG9O-s*cO2{#`C4dz*{D1TLW4#}d+}qK;Ynmn?GM zNwv$Sot7iIzo@SFEB;A$TRT79+gh=pjQ#VZed5)`(_BV&xvMV0)y;dhL2n|llH4SB z4J9-heji}%$367tFHXIZ%q%vyc6M+Jh-l8N42@lGTZmmoy`7lnwrixsL-i+CMR5q( z?9a0Z>V*#i8uMrD-3gp^Jppt{SzASq4hmuUXUryf0n|-ZV zg-F#EN5Y{-kUorj9@+b==*huXyFS%(eFF;!*3WB+ukIYEsCLRI!R%fxS06)8&90pJ zdG5Zx4^6+`M`T_pS~y^jog$?HX%2b&anD_IWJ|-H-u2%5&iV2!=D4;D&2w~EtE-Vj zNYt%ZaIJClePnR)Ap69p;rvCtlytr_RSm{J0;N1GojPLE zVZ7=+?|Z!5enQV}Y3^;BGe@3s%+W-Z_(M}Oj^Cn5&R0pgvchR25Gc5)6d|>sG_FL~ z9zC?LX1m36s5)Nbb=|CIib&y%5VFUcXiZwUoXt);b#I8{-!o$OH&Si3(VJ-QV@V=4 zA`{>}orL3^*4KHo3fC5Qu}^gzCR>^okm*v4s-}oo{3Ev^jN=?E!;4Y1e8(^RPMs9+ z>#n^N^<&?Uhl4!l^+@h{-pl!q*NzgpYzO6phK)-1;`=j$e<5=ef#Hy#uMlyp%3&vS zBge>CW^FRYtsy3-QOM&mMMGNdfLu~w?(B5&2A!E>cTN{g@lroFMoSs=RO6kFvvQLD zSoLX)REiwVC#+w&TWia*rGg+H)5i=#?^j7 z<%z!@6WY5&?G{@-uHLq3%d@Z|5E!!&488^gp5j%#nC8Y)kaCD+I!=?MjMQQyG$5{; zWy8fx1JSZD(@;qGln`h=I3rAy6$38aAXfz~U0e{#%13w}`rw8xXO7(rgox05QawNf z;^0!Z{pWLi?JnZ5xqYZWVVgu?%F+W>kt1RpFJ^x1boH3>h1y)ha|=lEGDhq{SyZE` zpcG{}jAF%xt~ThUGsJZm-aRhJNNp{V2TchW*TF6kJqyy-Jv-EQm(fT}*B0g-yk%$i{U;a#ju<3>Asd( zesJisY+Wy9v7OKQehb*NBa3Tj;f%-}f$>OHJ9|zyByslJILfQno>+N%xJ3@*eX%{A zy25#@w_J$%ZNwptAxG8tfH+<3@i<~@pEsAB;OHye?|q$iy^ix|+5>CnZbm^I5R93g zX%Tgr=S9Z$+D3KO?Qs!X{{T((7S*^5OWP?#Hrd+Bi>^5%uYu9iQuw&>sO`j?N|#$a zqm72|KB*ScXDn*Y$W>}jYcK#}F_vx0X2Yp&+CWH9 zPXWPBTo0^Zixs$Ku=%8~%QG|N4~8`rW%Lqq1GgU|x2qkVuYR4G*CJ$=Ni7x!QnPLn zhq#Y3;xsM|J0n0B-;TEYIM1rT<__;`ZDh7$;UKr2fLNg+q-EmHNXbWF$8L>ta>n`rl*4ao&P8fb#*nn^uMB$}PHi^NDZ7%jduX*ToPcLKN3dWeS7@`d+miO;oS{x! zU8hm_y)4{)SkBJ}fU3X;uWfr2cT*B;7qjv=yl4La4vFRe z0GK;I<85;V!+fpks))pn1yJz_$1XU|@y1ZyZ`9XT+XdXvJX1*t2$IkhJi|a3aMhl8 z&a;;C;{74Eb2s~FUJ*Q!N~ItVrZ%Q$SfQxLUA#HVg|~HhVCp2b+AUK<2998W03~0) zmRe&SgN`{(b2)U|vz`_Wx;?(mK`rF^^i)Xos4m}dQ}3SM>_4NOw(~*nk@Vab*6nX@ z(Mdf=;*4k-iKQ!E^N#(WkG8tzx7XP+)Z3!9pUPQ~u}Pfr45~i}_2Z}FejabO&35;3 zh|ibW{#KtRyzXZ^o!iaPqgSs^Rmao&I{SNkyq?z>bKSs`a>ur&w8z1ZRb&bbTKJyY z;usbHDl*96(2cXF?)SN4g3d^xmJn;sB~*aG}#SOzFcU4@B zcbA7bv#y2X171-NIpwf_KzybPv`GZ=IL?IeZU^I_F_>^%q;BZruYDmj+!1O84KV~g}29{K-tYj$QOXfXb z<%xjJ<>7mF3>~9xEm1*>DTQNq-6f7P&$vqjK+-i7GBXYewd3u^wV6v?=XUcJ>uTz5 zWyY>Vsy<@fyj;Zsit584KL1GSInsFV+8B|)!c-u^IB*oz>9mO+NIp^rY{T(&m>a_H>=JV~a*nISj zC8#g*>N{AdZXl{>#Tx6Db#cQRw4^B6pS8XNL zVe0#v4fka*OR5R&*=LPpU?VI6S`qNDAn@Gg8T9^&vl!AOrbSz4Nap*XXKP8EXQF%r?Ai@&7t zr=uDH++Bbuxs$+RS}grPac>_^YGu`R&yqsph*E%M?E3M`{{XM-@9jR;K7GIZGiftR z9M>|b8k{OQ?oq&3(~USDk8!qIN%JWc4G3eA?%~4$*F3G;Ha@87{l#|+*x_xy?Oxp` zm69S^11qprTIqiLvCFfr-eY?0gs)Os+}YbpW%Al5i4MKS)-iDq)U`nwP)XJY6OS+2 zviQrpQtIewB zM3(B^xo`1uvjLUWxbQvLYqn-nZEX~&$E&l3I$3x-EEQsPMg3EmvkQIu~Z#Z~kK9+4)h>LR@z6W0!V0?^jia zuQv9x=<{tD<}5SCCBlQ7DKx7d%+52Xmal~)rng^`y}lwC(%~T=Ei%-YosOK3sOOHG zMiv`g$}4@MYx@ORHI;(cTnaRjahl{2JgLJtd>%%qh7M}6?FJf8!Av9?0Y+IaLkD-DWtwIkqLq&@k>$; zrtG2oJ-F|!%QlJrXLU_lWBEOLX+y7rjb{G!^!YPF9lZ-%5-YHun*r0i{t+z{3nKV$D}S*Vb=i*E`j_E{03iZ8_u|ha7)4J9XdN9B+|Cfg$dwIOg_3 zq|itMjdR3{OJhj=Gy=ZdX0?Yw@-EsL`o{D)6-y>)+kppI28Y#&w}(C5%4%k38 z9AQW9c-UdT z3moH|kv6E?;VNmz!%EW@ZD)kBO5OSaZl#bE4H}J7TstTcuW2m6g~v@csbCG5+w|O) z`+nPYZg$fn8_A_oBRblo##Cx0I}J0(OUphNNbW7Cw32ICmS`9RV76+LnSB` z{{RtD=FYA%eX(%ociu+%FKVoBI+t)o0;HKE0)z6!i+d#Un)GkC zi01xa^v^(a{82wgZWkMfohf(oD#hZaVUfzFOgM}*?AEUR8|&s8>5nLPE$eHy+^%;x z_V_N)OKzN(napP`Oi7JLs8<=^zH9KB^;(SFe5<{Ka+21^ceTHbNd{6HC)PNiPY^z^ z*t+eRmp!H~5#kG-xhAx@jgZC}T#!K3PzN7E*BU`qj1tNrC}xUJf{IFwMx>VE#{f3y zmgx%spgWBRg%7XQfMp6pVH}*g%C15jssjx3z;quY`u1Iqtzb>#a~9hT%x`aX9n7q# zy2hyFRUog0)C0pKi;?JS?VF@`TWihRZ!pVqaD!d_o2!`>J{4l5YEkLNHwf&vPM5C?%bngmEiMPpBX#11|H? z9Szjh+YOzZ78g;xvGXU8!eb&w@n&2v4jAFLHL0|T?yB;({rU@WR#}$iqb)2VF)XaW zgO@Fs_IF`ClWAOj$E7Wyh8S((G4lv}nWQC)>F|UVr8t&2-fx<1kAs`rptV~YbpkTn zxRre*52qQ7fOfmlEt8@py|QV6)D_}rYu-*i$4?sJiUDn!>v)A`YAKG4z;FxL0K*yB z_)l*8ugh5*SdulkkOVg+Xvhvg3VJcqYl*`!idz2wF6DCujT$-i9n`O@8{^d;g7XCu zPKW9wk@O>2Tmr{{@Em?>d3!eS@hS?Up3(+AjwR^>hG(-Z1-r`Y-;(nWV4AcIbg(vb zsGJz7{(dppGp%p0$o~L6EPhYSz1dh5=PVNn(3-SB6PKlNj*I(OWJ>|17-y+Peb~+N z^n4U38#9$S`th2uy+f8qXf*n8`D)%B3&>@sT3sba{Dg!O2^l(*!xMiFdw6$bHqGM_ zNc1@X8!vek#~e9|(*%kWO9eTc>BGL5(h}COqO(J&IT;F)D~15&E-C{@T8ye_J-OEb zv^OhNDxjaj+)toj0=*0h>w#DfEvSkd6el&6=^7%j?Kz)*Sde2|s;POxI}@8CA?;U8iby*>2Nu9lca>Qf z8vW?c{+vBH%Az;OL{e?UvlaP*0If&`2%tFDzbMH$VHCY3gf&C`%GZN|@SI}m?Wc9s zYw5eKzUO$7TZsjAw88(XF!nu7ej*`FUw;ZE`Ln+n(kWmPok_%|a_ms?&})!^?X2&JmMt{zXf0 zZsxYNy1Ff`=QeUX7aw?y6vWQ6=+~!b>Wu2{s_6~YqL#w-qm>hvMzx(+Ncc#ic4Ix0 zUA|iD(`|knOQ?4E_T91Wt+!>ry4Dww6}0F;W8!XOfVpF*zQ0#1)4$POPNryMF%%#% zt8)fK_MH21WsY}S0ygR{Dos{1lOmdB*hM%~6#`wfj;OV)N_ZJvJm<)5vv|5k7 zmvO*7wr$p%n%r~lQr=Xe!>xj;%BPMxX{581BHHVyI(l}WZ@QY-OHf@}$a!piYvDeo z7|z<*xkz;%UG6QSyZ^ctyUAnVLzw9ghyrLR|Xzn%RV5x3g+yUT62a1qj7!D9Jq zIVC~j8RruoAzLovjBVFqL7S)jMR`NFu~y$j+=K4f#Vp{T%&VvA#(iqx7Z0EN73ITR z?dr{APvBgqB49^tL2QqtW1iN^?Kt3~OA_7TIx8^a>M(;p0k99 zYRlHPH`+9f$7_OZH3oz;0xCZ+#}1zj@8wH^L-O%=6kmNYFPCj^2ZIri0-Q~88ZEzu z52ppb9RtW_2d^DueGBpv=g03ZSkC?#w}+rZyosy8ReU4Gl|QgC$~TH0VWo86(%qaLAZ*0a0!at(e>oVh?-D*WHPQfuy^WPNlANJ&M0gD}Y>=5J^pENh2;GA5g>* zSGMp>tg+mL13Hnz+e~V5D|h?MacZ*Iqf7gzs>`^~mAX@n0I7O<20KZt^2aq)w%EGY zW85W|Zi)-ly=7@wkb%H8E1`(fTH^cbe595vdw%t6xGbM8^q$#@U0bV%mfk>URM7aA zxXq197k-{%yL&w=^Ga2hffV8}kfYucsJtzu+b3Qq-i8<`KOAgT5PrR@pQba3iXfVQJ}GQCf*0}G9lmz&l{S^ z#q8Rdwo8U!p|Zx9PFh0Iqcae|j~e%k0S9TgzLM6$&6TCPnO5IXpz(w897}OBvSc04 zPVP3>Hx`PkaBZe&T1bsmq)KWCO*K-u-nW9xH~jIoy}C`j+ANJTR(@#sX~1aj80qhc zhH!X)@qu1hB1Z8T0Wj45hOdId7>H$kOo75 zBaf>Ow-0*Apz1ki5y59B;`}4z)s1`fh?=t0UewJDW{6kd%m=rd}Y9 z(x-^^V$JQGn1;5^uW%O=TupLqS~1`yMwyFtP}9SV>!rw7^Ci{G`2_j;=>1yv{$AW` z+w|pLf%BFizE*V+4a-%wAR+X)6sM;jn$!KG)xU?0+)(4*;#*tG5RAx$M2pNy_Ms#O z9?)?Cfi2*GuDgZc=#*`lX7CUeKP+15rx?VvZl}kx&Ng|)a<&ZwSdAe^k({CmrIdA7m21U3gx|iCIh^h;(;BSQ{kDLPaazV@2(<~GEOMWD87nt z_TUoN@u&$Il6e;*BU0oZ%~Z=30N%}YPHeW^r9ewa`gK##s!8?YSQwG*+=!Z3%VbC^ zs1SH@#KM{9G;-%WZ5TRMI#26cQneV-4z1>C<(p!~m)tJx|-YBCTb<##|%EglJTNLAUu$9vB zO$Z{j4VwoC;vM+u#q!TFeT%AXx81tZK?$|Lf_3@JU}}{jfspq$In8le%GkFAM5Rk; z^>~-iafQh@HtRa6Vpp^}pAfHc!BNxOA`#3Kke>y|VKw06-HOfu?wfhNw~#q_Z=yo+ zURygxXug#qzN3q+!D45nrn|W5`#J8Xd8c@Rc^Hb5PTaAtmMfp_J4aIA&%a$=!FN5= zT1yR?nO>}AlTU+H21+|I(%{OOzVz<*vnmb70|LpEVTjadE5I7#NG=VaG)TuPs37|= z1}9H3U0SJMgw}+5@EL7uG!mGu5YUecj0CRBy-Bqz+(Q_a=_8UjH7H=L;(|e544sDz zXM$CIrn^~ri!%nzn?5A*Bpi-ASOmVjX`!9ojPkOEBv9qTo!G_j1roGt>jOVmW-u27 zGvD3E3@SrNLa_#dou|=&=u#N%qDYdOQ9vHSL5}Pow~MhOsgo;Ifutw;;|TyV6JbKN(7h}f)TeY>jd zH#^CflRS1XJ+S40PXa42E_jyJ#~gR-wco3Guaq6nTyH%@A86Xm+`D%tkR4)aWo62* zBF3nS-mGh{S+6$9Q+~|xCR3}i?sofRcX8~zksNB$wakj5HBmy^YR4>n9X~6s;!Deg z>f7jo-FLePlq^!E#OXrrqLd%1G3eW}M?5O~#_`U!NjzFUDjon6!{3iTXKcfAB0rzs zYOQ~FO*}kWe>WU(`}M3nQ|CSE%jIuT#vmYaKqoOntY^a?AFlrB@4ttSWa2B3?P_D* z;<5GQTW!Bn&ug|YdkaV{ZQzg^htY1DnxnOxl5veZHMf+9l^rzu_gUH_5-s-qH`9?! z`BI>bDt{b|qt#qHHpE>gF1`N%RR|^N{gUS*&|b)gI+{rt`&S$~Z|-Yn2e6X6d?UM1 z_c6y!{I}P57Z~siWzoC^%gM>sFEA|Gq!FoxbuY(?jIzdd@ShdvIdAQmNf6vRuf);D z!|8CN9B}3)H@ubsEw!vs8hAO(OLt}zWs49zl5YTnmhu~aL}^q0dHXRy(lx_VM&Ugd z<0%@TKGjqoP72!ETQ~1?J;P8E@=K`uiyRR0TrxO~Ewsi#u9g4~UY!1nK+XA*NF4;N zWE=bVsO|vb2DK_H!-gy{g@)E0x*kconnacV0CO$InI13)05pt`(TwfNp5*C(EOSUn z%*X<2Ap0qX2AT_Mty@M^<3LZOU>cIr-${?c$ij>OE(@JEEG77NF zcKb#EUzBu>);B8)sSGQc*7DkS=DHH)X>LP!wAPC&JE`nY<|I{dKWcbnf($kU6h z*6HJw+K}^G;Z{0xu3n*zm`tMNnVzMIW7^D1A9=1Qo!Yn9Qqntnf+LnM40154k=b7A zU?qQ;sZ79S{7P!4-GCN-$T$%w4cy0w7y)^-u6ko16L(_kc@D`Et*tpq)H=RtNjY~M z^y9t*Fk3CeHx7zqR9Z@?D&_ zfWF!##jTVZ7R`SnTk|>lhTyJag`0$p7|M~T6k6uT9(}HB)z__)gr4cYo!EaYvbtMH zWE`Xu5{3H!<`br^`q;X4bDEu<{{Rq(yol=yxKihBlWx2f@j@>-bEzCwNaa)@`*Gjj zo?cULFkU~%u6?5rZx8=lpp?Fb&o&g{{W_Uj%7G}q_p?x zrZ3!x^jDhJGSB7z08vB@N6EXS;N=?e>V~b-GDn zo!FEi0n{_#TC^DD)nwVzZo6ZG+ANV<@}vb_9lR$ZD@=NKbJH+dxFJB{+gxGWB|8lU zota=&r^;KoE&BfeZ+L0UD=MjG3ce)mClh>OjecH*Yu(f-X&XS|%@aaE9aM99#o|6CBT*pwFbplEDy3$X zRd}pmkxJq#8s6O0w}2nL5|v^*i&uff$S35jz*fn7s92w@<4l9Sj^8qXJCB4uW8P~_ zXAL8zyqrK?5;BTFEnL2gP&|@29M&kZu&75+R=wbXTmshkEC^;GvjeH4_-pOqhzEO% zc~P~s0Lbe-p332q3g+#;KHSe|wc32W>nUk>IaIj{O(_WA4G*s#iH&0yl{xm?3Hj1o zD_va4QzgaAvbjC#1#vy;>Vlu8t>06bm}gK{nR`tRH}@0OGq>*Cs8$Q><0gO=E*yZs z4jQx1*NIg+qGHNVW_)U{DO|Cd9p;Dq-awJ!UeVc%hVHH!-==1!RE@`VPCDn7YlSq0 z*p{ix>OH=^c4f63Gs}fW0IN;1^7oo8p=o|yIkOSLPo5o(XN${uwjU zeWNTTl)_TiVd}ynA_f9*3Kk2PY{AbH-WWad9YMBkQAhH{q?`CnDFGN%1~eIDadQ_5 zjr(K?5)CSO`t@>CmNg<5r2~2~jeByqMOfNw(E}Ve?FQt;s)g|aKJSOL5sRISKzm-z zb#Z=U+%4V|2+p|()af8s)s1B^o!xfG;#Xb1Rg&IfuO+hNs8moCU$3_lD`K@aM6=9HINHp%Q0NXwDsBEZhH*4E!aOB*~pXji}!sRXh z0GM83{J$&un{?#ndie6 zZ6kkgYsnDXZ3>`F&KL~AVM_YI#JRo}Nj!>$c2a2+A23182CvtNjh1bqS8LoaY%YZR zX41UX1OmuU9`A;}%xBj8)%%+KFa0BX*1L$gP1e-f+RCZO1q5IKd}JU_VB`i z9_}}vP=HOqERGmu>;n)G*T{-Bm|`u$x{nWT0EjMFsSJiOUjq!o1KWm78M~GcDqBeJ zBDvv{29 z+A*oIfXlaA2>$?mt=yVs4L*!qh}-KM6fOINCY%i@eR$N`p<90YEuNcup<56rnkrd6 zUXMmKb;zDKG07T88(c(&j%D-^bIZ3Fz~4~Gr>7_E3>v=NZ(l6e4^NNZj?A41rWq^5 zEk!%<7S58slWMiRv0GT>`QaFv>D+$lS!mQsRj90T@5epnTGedo9;E3LwcS{}%Ou>A zi3cf()uxGELnGTmaT%Uw?3AV)h)L>xsl9KtWBk~S4jKl7z%J8<8x1xwHvx$ z?Z&5ximk4!m@=`=v{OAJj#$zjz7pIml#Owue9T}_05rH{)G6Pq9B0dP z7VpzLc!l(?i-KyGQPWj@BeY`8s#v65+}~Q=n5K4ij1}=$;WYgi?>UZahWzIsLsiX~ z6N`Y=<-}JE94l(=B;uJ_ttGbGIw8YFAiuwmJTic#R4W37jcPImnPZo)w%^gI;Zu<{ z%I(ao)y3x5buq#zd8ZOAHb_jWNlUYfJ{_5(|AYDk9}TnQEs3eK-Nj=}m2! zJ(vcYn!{F_3dxkrG+UMyF4uRNFL&+S$2WVrSA9kmtNLh3i%_M8dwwFOUnPeal=oQ5K zx9Yx;ApH}w{IP{&<)cvOjOk)W-ZjQ=Wol|J&&$2Kv9ze}q>7h%)p*y#OlRHG-leU& zb78h}kl5R{byDhB{UG9Irc*X{7E7g4+BIrtr2>p*qCzGSnna4MJ54gd53?+hlQy@Z z6jY$6r!4Vh3yt>Z+%CFH!-+U#NFui#Ou%;xu~4Z)$rGl5n9EfNucTlFXs$wk78PJA zTABmwz-lXKDV!Rnp3Jd%4##fEC1ky-Qi2?nN2|90^zkCb)U31>qj13yQZ$tP z+-VSRiA`&WrX-Ty-X?PyU_KzE*Ayb&;blDKaU6A{MB}^Hh#itHS(3mfFh(G80yMPW{636h*U5j_)iQ=NVo0#b-}#3F%X(LV~Ha)uWmT)T`-!y zlG5L1yN%X1nc;9=fHg>`5;4wsTpF<2_T9DxShtD(UqEJoXC0!XQlC~gcG~+5xnJJ5@7I14+eH<`?|9z}n3%!86Q%cBF{MVLprl7c&=p&HH#QX7bjFR4EMrH7kUyC8?t|lN2wEVn*w6(=(s-%>sZE;jYcA8_2)GDz9 zRZ9-fMj1xh<*i<_$EZm~M_vJsX(pU8Ab1(s%j%Vf3UbIEx*Skg7p#jyp?fuwr`n)k z6fNfiQ#@o-HA?60Ibbp?P_8TmsbXj&;&pdZ9VNpxA=TE` zdw)e+!#pnwBx;3R5PPw8^38I^T7o{Dbwr-e1k&6_u}R9CG0XzA6yr=w;7u*9<-g2x zo@;`|SW6fzSW=XrE5jJftsFerZ0G*~gpmp@D>CUlndA@GiSlJ++w3o7PDzd!IfM9Y ztZFIgWydRHNoyXMn#~kM>27}%QADTTMmU#jm_2RL`{l*Vb6@Xb>ct)ABcBi7Hz4Wf>wBA3;Tgi24Ko;Z;K>GBL54Rn( z?3J4^b8Xt}Zcr`F#E{*P7{s6e0qmm;$j0u-G9H%N?dCTRc`GpBSr@`R6eB!Lh%Mc0 z7Uj|+(n5#8rht2C#{dt^^Lz|KXcRyOM0zj`NWzso2MhyoxiYCe_yVL{gN*y|4O~SS zj7XVhLOZYnU_C%DWmj;k64ad_y$`m7A3n#RN?a1CBr4NAd@WF|QuNFNrFLOn+o!Ml4%raIB2Xt-*2CZu{Y!4fw1aioVz=~{8&Qg8*u5-kdV zdkL;CLlVIecIHk2CZqveK*&pIf+x zn@?b?0s1ikQLt7eoRCKYz+$1~MkF>&ht=eFyi<_z_Bd}nBT;97fTgl1H|JE4z)#pW#Aaaqf>$o%+BL1s_4SGzPh0dd zS>CNDj4HzOyPptP*;M+A6~olZ3Vx+Gg5zwm+b%;-TX|*>)-()sv13-qdNI;z^OkPQ zN6OqTm4{ly6d}|I$O>0KRykVJB(;jw5?Gd59GuFwgNAY`K4@H9i0q7(dT-vX9l&9z z#<>vG^y9xz%Nr=IyJ+8rj-J@ z(wXDu*Jy~7Icc|1VHELkW9!wPD)Kmsa1=;tdr9xa4>>wNbQe}s)k;&-o&rMKS1mPZ z8F;k(HTGbE?$mt9I=}&P3=V&0AX2@>ND z)YT?cr3b5tz-8Ln%NmAnmr?h#dgbWF1Xx36q4Zoc<~3DF&V#&Q3o94n%Du+~IS`JE zLP)Myp~fl)g+V^f9^6O-yIG&$c8O`@02UwS;1rRkFF8#<^;Fiqw5}>pmeJUy!Wboa zB&pJ*5I&)n6;dUxE0R;xMiDqR`p7)msqCluF;ETLX+9+^gmD=V*v)ASK?Ky?l>4=) z%iE0xN^M}bHc3eBCz<*&Dv!3R#~HNN@Ml$Qvh)_u1UVy?Z{9=`EULiaP6JH$6daUV z_STg4P>doYcPlrOYLet`5<$2}U-$)yni(igol*cou^cFA-;VnDX8BW(^D(T?njQnR zA5Jq?Ah#(uaV0Hc3=e41DeKhL`Z2wIQlVhw{FUcAoY5d_!fVW7*uH_Q9o*^~*Tf?6Wakp=ya|oE@ z*+sgDB@G<~2n2X(=@{k9Tq16)`bo-|udbsYo^rsm(Ek9sjj_3QON6e^2S%;17S{#V zr#aSMZF_6Y3fRux+2vw>1nK=A84#1efkqyx3gepaM2XYf%Cpu^(I9`cVakfPTV{-W zvjkuKDwX}J3=s0PsEtH2kG)bt`!&<(#NeSPl2R%mQRrsv^ivms%{n%2;Qp4LKhAW6{&$jokB4CnXAdbFMqEUDL#2h(MZU0PAHrlk7MLca*kW%0;)3 zHM*o?Hvss*cDc~djQjDOd;l7qyfLAXd_tZ01Jho08E0Gq8%~#@sHT3b0be&`%csd% Te-4_p4O}?(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRks)=5M`RCwC#{adW9+m;@LeXaHWk1^+5Ywg>)RJkrL8;o5J2xAk4n}k9VqC7;3 z@({@nR+1+oj1-Yr5ELa5mzN+VARAkUfJ_-XcDbr@u61tv zvTk$E@&CQGJhZR1-se8%a`q}$owfHICDmDbtvSaS|E>4dzV={nE5~b z`u6T0`o=fDwSD-}CvY2h`SK;c|NZad>tFvmKKkfm+~4299e@C`{JsNlbBG8;1u6nn zMV`xH1{DDya5so30D%agO#yd|;b={lcZ~lZpCeF>KgCRJlw z^8r9rF~(8fahS#Ls^&*SRN(Fq2%LW@0L&aB;AeY$OON*i9Ao710S^Az>nzoGGY13? zRfU<=-yeseHR18a=c&Z8%;S+d->QP+81ddBbzK~B%MudRTRCMFb*>yd3cz*2;c+|=z%AYbtwo@0suI4v`M`5%)G6HpX%t;?8z{c06bE zJDORY<9LQOe#7&WD?i7Udt2&Mi3p#Ec`e5n@n;c;$8%PT%K9Ggc&6pyImmNkmghcB zQr=hd{*ni4iK@bu=XqZH4pm?bdvH%c6m@6vo(F(q45%p2i!aa7Jnwmrt+$tl_nHON| z&)aqkKd#@`%@3RNvQ^0%sBdK^DJz8(vQ$K!oGrpIG=8^3SvncKGE zmwxG&4+h6{T?|ko%{fEE!i~rQW{4f8@zyH~@XSyon9$$as z7n`^7Jip0zenb&}6VCnl8glgnuKmaM{&~~l;&J`?8+R=p&+Tu`xi&LgE*HG}?z{Mf zU-$+5nLqOj`1;qr@s*da?*8y&(exI+UOfNs@4wvd|J--K_k(}*7yj&@{hhC0zsBiw zdSHC``1%{a>A#KV`SIR(v&Hm{->aQ4`Wde6bNf8~xZPuKQ?c=RLc`wn0xwl{y?6Yn zKlT5@w}0a|aCdk6_CL5^#G>irkDvc@&tJUwAAb8=-~7^_{j+~o-g)O8+~40n?rx8- z$JdYX!mp~>Up>d&^N%t1%a5G}$d7uw|9L$P~i>1eB=Ev(h-`?Kh{rBI; zFaF{$;+x<2CVudPk3QFH-siSxdVPEUxBtqo{I#e5@qhdu$@AyW(R+V{Z69BcuixZO z|8K;m{`9=zy{nGvt^HUX>*q;9_O>0*=K)drQO@}f$K?Fh71BTIcXoFiN5pjf`9J?l z_)CB3FMY1pzt3%q%Dx}lum0+<;+KER-k0{k^~Mv1oc5U$0-k!q>j`HT<=|_N%zLxxwAt z-Q!dI_6&!6MtPd@%!uN9wLr0J7S zp5ylRuKXk(UyrZG3;%k-q!i$nTrHrei-Ii>9~nb$@@UV(G_$ zBk}n9@h_IXs0Gtwq4ao6kFUqV^f&7>_G5o6n%>GAoB#LtdVKwty}pRW(j!;t@pvAO z;jvhHJWr2B)4Xs7WX<&0i9NnPJ$n11j^aM=&%$5tIzL{&$K!Y`mVOIA^RZ}pYah#5 zHGPKHKkz^MKj3t_4kUt@l{f&ExF_5J5dg7ByYpxA&s?|F4FUz?N9$+I9dLt+0&Xx- zX#PC}>VRRypLskMUxr5|fJl5N2UGw9_#W|Pdjs4BfI?tU5h%Y3MBorK5gwmI1aR>8 zJyZgs2Drw*yF-P)(}c$p-#32O0T+y6Xd?Vyy{p9XN&q zFgOI-G|qqB^0RPI0nSbF?vsw|ZNtZR7kv2g0&#(_zvP1LENCt`hG94h5RZFEG!9S9 z;k=g1$JOTxPpV11EnmFQ9>)d%=73AwUl2ZDaVNlJzz3kNXkz$Vf9@H6=7Td{-3>f{ zz2k#tXFNGK^xmK~I9fQn+<1YPpU zbsUG|-Ujx4z&xH&8xE-QX8^ajIS$@c4Ki;-5h&LzfuS|S)*GJo4d;^r&7l@w+y-Fo z5Cs|(!h3VrKx+ypu*qCwRTSa|hw^R(%tt({0=Nwf0~`uoptv{8Ya$@LQR3%${|cWs zw_G^tp;E3>=J6DO*G5&*RiHhdW#LomW^i%b?~dF1QNKF|aM{PaVYx;)9HIgrOps_2 z$2P3iaHs&IK0VfcAbyWGcs(aR;<^i9Feo(ESFWQP3nPQyfxm6j=|?x>qeQM+9V$!uSHbcF+`w<8`JneN%Cm`3(I{%bf(sT8q5vYXXf0@QAi>FYOeq8eD9@L zgCMs`m-sv3@eTmJHb@6ri{Ej9D3>i&KrFr^7sEmZ_)+2th(nt|#R1n?=<}0Va7hOm z1k&dDbuNzD33N!L1YStx*uc;(Th88Ye67rDkAJjVj($1OpCqufkJgDe9|4 zk=VjiaB2+=4fjWE+ULGSF`@C@hDB+1(#FMAqwsBlt{R`?jsp&FQ9Z>q71%I9V`I!FBJrxdOiO9sssez5rtJ&o!SNGZNo|8gVhxmGaNGD z(5Np}&@2i|fxu1BATT~hokht2n;gWVY#96==mX88>5!KDqXhp}LG2b#w|FjUYyo?C~57b>o)0*3f^6@mK^jkOt?HgFT*`4X6F zoEuhysvRy-P&uD@haR~mw&aFcUxNEn0nzQV;~QHv!2CeA`kYvE2bD(?MUE;KfANOXG+ zG*OrcG=7N-tpaK*u#%Mu`(mq&O^E`q&8Y^@JT^wlqQ@;3JqHev`dOXuQ5=s-pe@-w zCNkv{rOOs-Xmmx|;+#6WUx?!v@jEIGYl=;jU7g`DhYc1<0QSRct#ymVz=#+Oc65md ziVAQLE#h_ZxXgv1jKiu&Gl@+vHsU}c6A@4dhQMG#A`-#q}12$*cQ;!&rnz=@s8Y72O>-P4ND^C-koP&PR9H z39{`Y&V6EDS)2s`kf^EGcXQT{i6{+r7dir!(=K@LbixNuPq8_Vfmav9^Vb7_;pzlD zIc@m4FJ0rkCmXgVXad|1LsMYujVD$L*+>-E-J-~Kt>V6b2*hy!z)yZ~#(Os>0Ko0t zfuH=~j1PX}CHBK{nBg~`?|5~8ptX3G;%4ydPGXbOMCp_(juK&5S~f?*Q~_eh(p_Hwpp9_0g*6Ab3TME?yc71_r_q8$Ht=mJFk-n zv;hMx&>$B3c|YcT69}}yU}&Nk7XRBk{uXF~ntCJdb?_Q#tViTfxJQu|$c{%b?T#UH z(lgiDxUY@(U!vcl@jOVMkiH?-@G+vJyWb6C#NX{BQ0b9qzQr>=Fd#-W&Uu=A z7ib{{WW=?PwaK_1&UICYip9kqJil=~W^Z83`B*f4A*XX_!_j))JPK2X4}-YI=D%+E z?nqOEKzX9Gt&tqZDuXD3c);DUu;yRgfVnw4mx z7RXKAqJV4h9c@{SEMO5dVTB@Gkz5OT(S);wi-i{`9b*NF9?$_;!d5oo8RgrKIscf& z5P(5AT6CZd#bJ(P2zpbP3YrN91a2%cMWUmEVe>fZrUK`isyVc!)kJi{gB6T}oj)9I z>|}FvFa$%L%RLupA*#UYC+-G?7#BEQM_kCZaT!AzuM5ysYJpR3yfJ==Uudjm4;G`s zf+&k6XE)vQ)*7+lG$M9ek9%W3;#zFo@$Pj)Q^CaytpOL~_4eqdyC}|0@ujC7Kk?2P zH`fiP-teU-8$Nlx9JDCq`((${$ z@&sRc+Mq4QDQ3XezxNu??{>U<)9}+@dV-r%<2cJ7APxI4$Ps8l--x!>BhOJ{7Edhd z166Psk&(O0j_(~DH<{zB@7>_1K6ru)<N|gN1PCbyGOZG?38|XoeCYO1w5kNgAjypUG|w7dPx<#5!aXjf6+@WXfV@@cwk? z#yS7az)nE}m5Xt1qB{p%wzv;#6+#pmL|csORuc`hGz--I09t&MX;zBdoE3l!s5*wV zK;|K}S;r`!4Vzhv90zKw1(yfoCKZP|*f<#*FG1TBtp&0tiW+z$$B{(4?vDY3<9;9U zd^jL3P&An4S0519C>{W~^!S`693`U8TP&P|C}hCxf)>;ZjfHXu&p8w@EkqR@C#wxW z6xA=e!L(t>07l%?fdrwd55_@ z@_@f^MU%8y*nj5t7<>pN`Ahm>=vUoO7Wm4_2<%R4WZ|*ssTWpM{M zM&laD4JP5^-5f`($c4rvG@$Glbx?g>}d!TWMJo?JCFb(~LvyUW1gg4eGHK69ED{qh;Z&)BwxtKPwNy#~X%8=EI;G-7P66S)kekK8=O zedumD%y8I%h~nw_gv%H>hM}pVsp2>c(&I4BTgTt@JKn*~N%3$0^7ruZ>*&G_fSSR? zYI9a1Z~3fBa&XsluNU^LheRO!bD#mqR`D#$&M97$v-QMiE?U?~Q9eYqCTp2BBwlZ`#kMe!p% z$MtdE&3xWB7*RaQ1g{2`@#R9oE^5JudqEpu!)gZO`GDo3V8(*cqhbGyFMZ@Ry`3+` zoB8etyJwa%oCc6Dv}_V^hnNOGVk{#mIIIb5#Hh}P76<_eE`&p%Tp*0_tFbtHVAW1! zK-p2xu}ySo-8~jFGK@$4tU^c3qy{_|#cTt43{J!%-ZB=*);PLa$b{L-8|QZ}j&`8n zVDaEd1)AW|k*NeUl|*K8F|wnvD!=0Yj-^Y40YhTJ_omPxXgwDNPc}OpZKI2GTlhQz zbaHcsMbBM`$W{QN{c<%E}Bq4T*<<5>o78S;yVbL6Z}3l*7?)I;F4GfueOFRipw$3HHILKys3d$@P$P9D=4fv?nZte;ChP! za?=*q*d3b+&RfH_HN0v&F1z8q56<`<@1O9^PcHbui+kK%g16IJkV(N&-|&HVpEmr? z_iq3JZubK(?_)u}yEph4cyiTvP904Y`#5m!9gRG)s>O&%cs3ZG$BrWS9_CO*A$PtY z8SXLKG9ngFPaCeb&S#}V#BhDypd$GA%eiFnsXr27ll0{Sv=fRd8jrJZ{Aw)VgDV0~Q>uIn#wJh@3@X(4}__D(P*9G8V@47#zJ+|R)QG}=U6tL z&EoxeAect7y1HP*T%PNIO(6rHDQgcY=LNF?a6ZqX%7t(&V@o4K$FZC=KD$;U_?$JG z53cY!3pNy&onzCbJZ=J&7T+B{$%{n)+{T=GuwW0aDg{8A{K^I)@6!3bK0Qt&iC__M zd=_fUBhvI%zQ*uSmwe{=T+YeoJR97o93%|dr^ad7J`nO(0y;6LpNgXnL}x2XegX;N zlZp~!ENw-SEMhhbs2r*%8N5M@2&xYXFOSZw5fMwGfRWfJ#+e~tVpP8+yd9fjd=vp; zl3XE#s4G+*TUR{0-rz92+70$< z#~lo(9-H9ZVYo5i)PU2rp*7UTeRWb?E(cD%W7`^@J=yT_iwz&WI`C`XzvKN9_qf4u zb?SKk=7duhT%Q}hx}9);7;f(lT!x{wD?B-OKn(kFz|n*H(;B&gIkfUBlA^e@Nn*vK z#zbt6@pYxxK%u7dDx$gu&h_H%9&V1)DKt#xhTHpr%V9WgidVNg0RY1XPp|Owy5sh8 zKs?4;hdEwd2A;pZ;9DPEV29&(|HKWx{A_~(*muLPfA1Dw`{*@nDETBKW-ayI^SZJj z$w}t07}G%G*-S)Ql}(Q?_o&S=ljLAbInpBA%a%Dfi!9?uc8=)@UdFw5BzG$Az2g|@ zy`!=4KVTdm3q;$TMoVnMs9G3P6#m+;*P_Tw#LG5#A5H# zYCPxUC7IeB!F%!`1BRESrMKDPkte!9-HC)JGUu2I%}-T1BmX|fm@2bK^}(^D01fal z9w?U_D+enJc=9>lVCyuu$D--&gqk>FdV_LVY$`j31~0>#0L8S3s$N*#`!HzJLObFF z3peFS+l~c3xKUGKw~Rbg0B?zJ!w0zp!Q7iDloRP;@ujv(pMfC)vru*9*xDE7LU!XS z^C8L&T0G?0*%2o{1eTi_7yd?N;0PIQG?PmC`~l(YMae@l1YsL#0RZR1Lq(8!o%7US zA4e>7Z3LNhqCCM-=?9=KY#Uk?80@|!+1wnbsBokfe2`e&gaqA1*1L?) zZs^IlF-n$GZY*xW;Yt-B5@OGp6D7Wyn|~7Wy#}D`m?G7fYf-9AAdQk~5i}Ka1>U*d zpaAZ7;Qk0a@5#BNw^-P(nq%(`9fH%Tp#^k^%f93KbcNHY;l%sc5ckiyw-}MC;Jqg& zTzBBfRmX>S2R?kUv&dJR+J+Bq8m_wI$yLYAd4v0acERu&G0(lZQsxddctR zreQ=o6!xHC2!-Ax-z&Lm5Gf=>;Mi$7Ac$w^`RzTL3Z7h@Fvfx2w%7v!ymxbgb_p{0 z5!d_nvZIOM>3QS*8YtNN;_&yb@q2y(cyW7&Ccu~9xdH&(?}nRG!`L0){^S-1Ifw7u zobYnLU_X-6m@7q~rSZ&KpbBu{;4oY)>0&iX2W9#>MpKRFFT@$4P80PKQK&EE^hD-p z2Y}XKS*sw>arLk#sirVFSDj6WI}RIcDjJ$LT=oOKh1%@miUSAi@Tt0;9UeyhNPr={e9gt9Qnxz^x4e0eI$3+OXTn-BetgcSTwzjFFS~^yaA8gTJW0kVHc5w zvP}{uXTxf-)yKm&?`y~Web}7oD+@APi?pWDVdWW;oKCQVoAW1jA(ZcrA|x)IiW?v; z7Q!F`u^Xd;smi)k9~l>AWswvFLN_B}G9IX5M@U{1BNrXk^VVR4%a zaFU#-@llQQu=>nf_%4ZBvAsm2u<_&*xXc2OBTp$BT8uPP;g@LS>H(JK0q!Z=pGBn& zLq93nNpXJ!$@RQxjMY?dd%4G9jt0le`yKbYU^_LgjgIrCXfSANxY~fLQ$ug5NAnt+ ziW;_*om-4vp$+%@j_XsyX*(dM*v)XYHGJjihI3Pn6JjivzFN%#rJV>W5kfeQ5rpV$ z3k-{ufcUhk$gyc5G1QWovy6(-s<~BD5?)PF+&12?=7RgkSUzN)@L~@dy4U#m~IB#t&ZZIIH7lf8r^AL1WjLoR0@M7|zJb~(5W;uaSMI37^lTbJ=W1=qN zTyu!PX%gAp3YAmjIw!G}s-THuj2^3OHbfSrbRQJTWFwwx#Ilnia=jomR)%naHhS_= zHMmOBT5yrnC)y8$-_pt5EER}It>ka;C35RC#@Sy(1Xe3oNzozSNJLL5Vo;Ir6H z6w56*CruSy1n*pLILvU_*xH)g= zJ$lxCH%gu7{Wu24T^8O>hXZGIeD%o*&u$bSzaDsUQhe|%JgqJ)Tzcz)#Jbn`*qyAl z?7A(~jziLO$Lrq8!dI(^^aSgogd}Qd$-Nl^gZz`4^$~FF)Q{g^_IP%-4cenvzKkH1 zt00uKiQ>pADw*C`Lc_$~wMKsyU;YY3m?!{4UOGBpx=r44QG)_*RH?Xm8QjGg-SZ8zYbLe0b zng8n*IG!Iolv54|~?vqMXp>-;95F%Pq|1e5=}}DE49!^ci&VBUN$;_=ftW%xW06Q zUdZZBFB%}s8IQ#W7YK7XA(twzuCj~GQqYvdagO+gq}%o6EeXlz;k~4MKdlW`g7g+8 zQJQV(w8wKK7wprk&HS0w1wt@=r4scyH$j78J1I^bupziV243G^!m_~(&z^RC_1z5u z$KA#7;%?yC^@j5X++HTU@bAz!I>Xk~)~ zg&%X2ba*r!qJhjDhr`sT?SN`oRY~s{$3XUE!;OUq*9s$bL8Pn?+&Q`)&SRz;4Z(v7 z3XW4Wqc{$rDX$9z`w{1;QW!g~01X-c98Svukp^Sl(UxbkbuGcs*rfuX# z5pl=x^2NiaXdkXL59N=_s;1OQ87S5Cf5DXIzZ_Y5j8S?0+gcXFIC4C;oaz4$($!RHwC_scPg%hEBk zn`=%kfrT|fdf6bxi{~V$!^5c?Q-Uv9O>wd4jf=?<9JCYY_RCG$7Sy2S#*`ycOdlp8 zM@b>*B*ljv!z=)h9xusX;(s*(tfd4zST{Z!!?;HT@D`|~N`-bnyv-kc;45#Cp+r?Y z#gjN-xDvtDCOAFm7`Ea5{)po|JKlZT@${;r19)}KD$lFh@H~i##XFPjyhG-OPc6hyqBu7uYMwXreGGAoR+>k<9 zHOfYy5Vo3{hWVjVX?RE=8s;nxd`8`Pq>VtK=+dxpd?p@5S|5Vmm8gwm9T8*SHk+v6 zv#`7*G&)#pIlYl$^AF@QJk8>ox#bf?9-b<;CNL^7-6%890xzvXg0Mtyv^BOyXR{+k zcnUQYfL8XYPM;q>)-A@^_1{#tCZV{I2V{rUSm)jbE*@jD+`Q@R7{zIt(NaY#3LWv2J>Fv73-}M(CrnxEb&mPNSq+8((-;f((RjZa)Pvasak#e! z{zyv0K2I*Twg(2WnqFPx(~7o=VgXV_wCb!4L0XJ`AbhTryvV`Sf>Dn3xvFbA8PmPo zhW*gS`Iz1MMM0WG{wqO@|3$U3q*qSP9ECPtCv}(8K$V^)+I6oC(HCCc$Qx5q>1*6ddAauD=fY|zw%wv$1fJ>#0 z6G3Y1CM`*XI$eZiOmCi4#>ukSr~v>{SMqL4QaG_0!z zp9tZFq-oY^p!D0zz*X};m-znX1{s1wK~9w*>4)QR$QG8{PX8!Inc?~rj`llzHfJo6 zCF@JW1D<5c*6TR}3Vn|A+sXpL8B(}L|B-7zB`KYxJ*__isqmHp3q!lG&{v0y0aH>E zG|`k%LWcda>O>{fyu6l2av0raUS*E%*kL4P!MJfd4SGjn{o>ed$@qj%?{Yf z9n0%}FfHIP3{RuV_>PB!4NIXm9La?zr9?whyfR*&VKW(mO=a^&9_R>*kK8PphuZd- zLwK{**4t_wOf%x7R?xMW=BX8H5MxGWv)JT!vuKXuNFFdR2aScTgciQgE6R0`Biw3a z|8qupj~u7Zv$-YSsAhTyGFoO2O+qi4l$&!BS`$hyUQ=6KQ-p5BELe`=fhd_n+cZE! zWtPc|=OEncl)7q;5}VfFi%7W|0aA5`3?fq&F3xqJqEVt~_?vjk95rFCRHh<@30@~566Vk>d#ZMH=77c5 z>x9+^ia#Fkb-9&4oc9CdUJ?H2EMh&oF=7y18wM>Na=~j*jC2ZSm~PWhA7(*ZEFErU zmc`*h_%;@iE_Dat*;(-9)bYX74PSn;1@B}`VcqM?fv!xfQk}&iH`mqz^?3g3f=v}q z&J9~vTy5t?9n`9D6GV*2{T>`6GvNN-aEyVyH=NIkeJ~8x4T6UK7`VLzp}H%|#-eor zcE|8p^xM)%Bxgt#q@;>mow;KU3xe^dkX5YV!RpMLqbHTb*sO_0sBc~7a0Wke94A^l z#bLo;G$KgGtPT+^?(L})MP|VjNJ$`=y|KCCzd3-hPxDPPDfBsv$LD#Gwz#}!CZW&g z??H@6S$p`yP~>G)AHvrt)mu}>^EhdcN(b*?-AHkFW+@bQ&LCJjcAQ z=}89`t*EFOK3^;ZdsBD^jy=YwI+!&Hk77mU$SA1=$6(>G1=ni0p|fpKM>R~yCd8u1 z-^o>KTZ3K5UE+B>4vJ9dcjm(|D9&gqg(CqVBAA$TW(blyN)ugejRK!AG8Q_u*Aml0 ztyqRIE8mE|RSRvZrVAns4=8m`wVnt1RC`P+hfvY4ag`Z)T~5JHBQVTy450UJlmoL`l?ZRM~h?!9NHZ?cXAGg1*fV57;Pd;h8g!F=_o#8)YU`_Jt|VYg_7wQh7FM~m4wn(%U{|e)C(3>z!b)tj9Xb$Haw=THS29Z!_U5-Hyo-ks(?2Z?=p%m*|kZ12i zFl@)UE7fhm-?1UEW8mI^yL~|1v28H|Jf9nRB90SXyA2VS(o}J3G3Kj5EXOO2oWNAJ zDL|L$xa>`Zys{wG>SPb$aI2rqqDMrqwAL65l1}IOhD5KV{x|t->2uYZlzoAwUro7? zGu)Jgld$Cv)nj;h1+Q_A)}59dngQL5;i2W2jiQnRJIsM+Hx2KcH~irBWo}{_K}3b3 zwlHL@=0)cCGso`ep_Z!<H8WegP4X;(8dpUu7 zC_+WvDDM8TXnHG=rqxg9vldP1J2a+xOBX~ai=*&%mkdC<7Rg;I4MF|PF+-;{4Cp!~ajPhnNCzR7lO7GGnuK|mjN13N( zAt^Lx6e_MN|4wW!J~>Gr$-8JUo231&1{=a-kM}f=)tnn}F1p7UFbOk9xCd{5Dn2z# zC+@MtZfubn4$o}D@U!WnYMHaI1UZw417JL*! zBq`hJVl9hmFA4579!Ql~7Ng{;%qSs}*3IaiJ$=*0gn%Nso})S_u}KLPm};BO?mnL^ zOH_=(s*X>MPq>L&I7DK&po`N>XH``u;yD9#-NOUvOYdy>irDa>HD=G>u4oRRI8ss6x033ovbeaMq%oMy z+_}c*EbTth#9AAn}EL~-QrV&mK@84O<_2=C8=S^S%?z|s$dSuNT5An3B7HGF(;7{C8}OkO zrmRgX0NkKFe+-TWX4rUgh%%IX>UwHqr_3eIqB7S9V^i-*KWQy2U377ge;m(!fr#M# zW(Ds=P{Ksgu_zyq69;Zmd|=%?imI82y82vB!$Mo;{E*=C0HrG~SLrFx;zGPA^qil& z$a<4!;%t(1$h4_3s>&eI(X*RW6*LBJCK=l4vy#P96?5WKz0(%rYNm?UG7=K%273D- zb=`|Ix&%6A?5Leac_~K|7%GoI)IU!O@KZ&m~dx()tY`~47 zy)762Hc9KljP+pf9h4!NGx6ME7F-M$C&8CjD*0+f7M)%wS$ua-^b8n>!OLYl7M0i={^vM>y^axtNWG#yHo8q|G=?fz5Ry zjp@3@!avrw7>@=*KRKc4*(NH%8}d-}3F6sFc=i~M%WmW`F~2fL|L&ji+S0nO+@>LF zz%GfDk-NHzdXlULPguT-Rn zdpRE)y;>l^&N*Yt(Wp*B?UAN#79+QZ{zq9H&hrGxC|*(^*;d;L?L%aeFy%w-3B`4BVU=&Q0<3 zCdQm1I*;3}($v?z$ysO%J!OQORTR2WY)1Nt&5;wW1H$}phN_kapkib3^05Y^D%zWvmI0g6TMdUo~{`t{bs_Y4dXBukzTZ#R`(gl?6zfq0vGPX}SAD zX)h9HnaK4k{n#qWK^{2#iv(Y?AqerMzP7Zfv6=|D)6yd8=L>q2->bv{WxhKRGhw2G z5l)h&5;FP>`k2jd?m^Lb`5W!Mk44j4_-bui+^c_d(%Q_#U1ZLb!irAc4lL>21uN;? zSkv1moxN>gu%Ng@(=qyiLXS?_q28HN?i5}O2IY!MAQkBxzKVaV}7` zUktD&IHA`9pT>P@JU$TIA9Ym05Tg`8)Nm37dT>0Nq*7)&vMXu&=z+SWJ2{f$#NA+9 ziZh3yOZfbrMA1%C?&Qaj7+ff8I%Uy5!e{1`lg=&BE=^w=@;K;=86~nTl474|K%HG~ zq=#qL9%{TeJ&_VUi_LFq0=L+h2L!J!F_s!|yto%!%<;jM;k_p(Tn0U9T8qtO%+WEk z-KW5z%`}=)!`V8loycAyrU&Csj2CoNXKmz0$%7GmM$(8(bmU-(u!+xzpJtH*$DTq* zgeGTIW^N%O$mkYicy@Y4P0uV}qmt6%2M$qV3`UI2q(b9p7s5?@SP+qKHo;H6cZCmM z9e8m!pd1@35w?lre9EW^kuB+b9uid0l8~dG+Z09kx}o!KH-?T6ibFh`5StB&udw|Z zd^xO0`-z^2IQ;Om(nOa?XJ{H|$w3vQ)Yyv+Aeb8`X#t<59`3QD5!v$`2dV6pgi(O;$P8$8vH zZ;;#ic?YRJw?)&iJ?6Nd_4TO{TgitOiRNl+P>XkxP={A>L;7ANT1WHa8RosrrYBM) z$=g^uvNUIua``2HNn%z{rFVRXmK>@X&*IERvNZP~gquZAEs8|hR?3rLL3I$^$j0MR zcKIsdL*)5)m02}MmeXy3`BUPMf$H`|CU+_eJ(cOL0>%%hbZk93&tut4T5r=KoEc$I z!9i}0Hp#?*>db0^YUy~LY2AA0#Un#b{j?BJigt(uT?jtC7tF8J7+}Mii%0gwejd z-vO~QETsS(O&q-mu3E$Hj+d9PLxRvaQu6vOEJGIcD)j%Ma>|N7 zvmmmLIo3=bm*)u6rrOM;gcepg1)m#s3lrW!TIN^pGMba1(;TRTvS68Qw@#=!4^QupKit^IQ3N9@xst}!H{Q6#r zW*;_HR4Mi_Mu5mV+Y3Lnm7`cTLWwYyLpcMHF|!g|MMO<8M~W!5heC2#nw&1p<)S9G z9PN@Tnpt%b8XV8_u^-Im3mb@G({kLAq6$BgrRqkFX*_EpNmHs30=@e_4ELzU9Jtge{3Bv~_rnW>t2+(tO?>^Tl zNwTNXpC#36Y1$UXb?Fy0BNr%{HKELVEFB3UYx9XT2$3>OH5!~`%yzL@9>OLHoWcj`a6@-sHZW3xG?xTZ*br^7e zI9}f$IG;LHfaiAu-+j3Ni9mM03jN$H1Jh|LCybbJgiQ`tjMK0#>`uOda5 zU-^-;5Ib#TV>YVoH1i^QcZSR!RlI4%hB#IZDU0YTeEo+u`Lt5;%nZ%Zw=bNJVRQ}` zh_xyeq8T)jCY1N%!KJnFltp|`#^B`rA4GDZV-kdUTW2>xbeljQ2TaE5$w=N6q9y(;}i((HuhmnjdO zP%ATs=q(elESGsVW+P29A%qJ#-)A5eG%f$16uxBy$|QKYanTiy;~D~ONs}`cflWhs z6N);-2oB0Dyfgs}m+oPU)k2TXw3KSqO)-`lfWwGrbZs#6bok0}KP0>CsR=Q%P<_vXVL zFYg9Ex(%PJPhRb~SjzudaI5p#wXy|B&e6<;kthn(%MQiefdh+jmj#tbbtRS~{v6rn z6qP~*g;FRh>Eb{;F~N|yr<3(yi3CGq{V-#Kf<*KOv-{k_HC;vF%CoAi?9nX)vo*Lr z%JFm}JBO$EC5i3PlpV|ZyI&~WU~!r5kU0QOB&Ei3EgK@Pw>sl&O2tRTY8gk8+gJrf z1_JuSiDn>|ql|5R5c$zW*_VhPrXCn#9e%)RU6K{tb#k;+Xu}}UOd<-hR67R!VzEw0 zBs_9+=CO_O&;@WE3+iXbi-y@_(eyUHE|&|AbmIGr5Tog22k9Db!REMSKjA-|*ORq? zrlLd^l}Vv01~p;VK*!!9^2m(VD9~xO;Ga<>mI8l%v2`SpAE!a|nI0vS^w&zn1xRL^ zB=h6u_%M(mud!c3*(wunH%mw77&BOtzpnX%N-VUgqlx$ldEnPnhpOo^9^OTr#P}p~ zw=Tdj^Yx0fzBsBk^M|O{G6ghtd%grPSLf(cN!3m?yyHJNN#sH?hT$Ru%@#$C#Ac*I zC-jAwyEXC|4l9Ks4A{09A&Lt#-lBjQ`v`MDs*R2j1(3GIG}7nYyAo|HmV}#TQ!u|z z>)Kpt$JJB8-+H~_`_B*j`VU@1Ah_EH?#IC00QMcYJ}a&f;lP_Vpta%!88RqWaae5D zGrB8|DM`&{LG&IhM9ju4j65aMN`8}+O+b?8%e#Jk?u-Gj9>n}1%riV<6y6{K?^d)2 ziPsi9lak-B%yW)&oCQOY(^E+`7Vc0MWC{Q~$3PM@CLi&9cNKi_?1b-ra={N?++*kc zGW#U2QR4%cP$n`xjH*_h-bP+=FH)n$h($`X!)5GWnRE*hvv4~HM`VrTbx*V`kz$5j zJ0n$AKH;hqbsES9K|JGOmI0>*56v@9imuzza?#2x8#X&RCL_UojI`HSyrB|l5{mq@ zFiMlvyj5t+P-xQtBV^VQlg~=X=+h)Cv3stw$z8QU)Xm#NOBbK#!g4KgCrLZ_Om5NS zDeWpM6TvNf<;W|@QZ6i=i0bx?9*Rsq$ZVh+3GQH^xTQ@F$*19^rIVX$hBtwlj(vYD zn%>T$>Hf`%riD~m&?q13=!mrZBh%w0&?e4_MTi7&UM*6Kl*r6EGq%i{l6~%0wzBLGMnOOjm2i7#m?a&GZmdcmOxDN#4krk##;ei8m-espYFs&k* z%%-bF;V}@Ll2Yc{v=k^pJJAC)uSGN5xubw9XJKw=7c-hVMnTgxe?Qb|DL?NV(V?xx zIH`L>!ayC@4cNsoq+#ogC`g=x9W1(+qBO@X)kB&u>c&aR4U%-I1P?pP4&ljp!?Ukm z;e#g~!wlbhdEh_$=1V{X2ORqmO114`3`2MHBhZAKtB$MQ;=C)lR6Ms}fR$?3MkDB_L~7 zg=Jp*qC2IGUnjpQ$8}o&Eu|<^8mER6`TAy>S`!%pJ$W1wf6VxDSmWC09R=T`Y618Vf;7PL>-(rGV5VdS%@fAdEAGsoWGMJL>KH;Wmt|#bAz-IBe@6q zAf2N}uWxTer$!+T?xXH2XR&p?ZP+%$y&ZgX7GxM1yW@pc=l98?$aFyj7A}*pVF_Zj zP65A09-Di{q*xWM4qzN42QNf$A6~h5;?2?pReY(aw8uy?MPf(mCr^YF6s#m;33 zPK};bS!6|WfSEzGJvc?R8NH!rz++(VTlzA8GwEZ>gBv%s0TOT1S3`i2{_`~|n=u%$ zkjN&PHC$s+hH%COrsSn#A%1q=>_wnejN*olsq7oVaTwrg=q&VnAq2VxWSlAPnYD(o z7`Ux7Y!Rr0LwRI(89Uw8b19Ck;wo7540_qr`UH;AJP;rh`4OcQf<^%~iJuiJfwUz` zh0dl8jc&Oe!CkOp@t2Zt+#ci)#8^*DEtGyX41^D~FtfPmmaJ4&WpSJ?P94DoQjjZU zz`aKiG;&e1$hJE8p7-OxO;@zm;IImb-LkUem{Wy5P%~kI$}5t7MX+J=fIv=F@-r+& z32SbchYUK&uu60=$6@doYqk~}*=66c^$xgUKMo9coVwxtn;ZQ7zyB-v=7;zAbHDNf zTt?ix#}Pra`%W7O08h4or&q}VF*Mf-B28E9gQ39g!TUO#a{idYO#ib;xUJ`_{Kx1; zk*dIT)SBl`GlW-}HyDYo0c0-7ReEN4R;f;fSB-Lre5wH6LwMj3`Wi)Ej!4Mc^BChv zp~%zINr(Ux7YL3QcL(n8M;KQ+Ed*F}49OS_eK7jZFk;WfY_SVzm}rx&ZbY0?wM5E^ zfDeg#7B;z8V+2t=&#myh77;oNeREn?1e$!f)#%8oZy4xo=Bmc@bQcfT{~9&%TE%!z zXLFU$IZ5l5RvDpsDAIPU6&7L(QOL^ws<IO?XsThEuHZ%4kf9u>6W!FA8jud&b;Uy+0%7QRa%u+}<5~_PpH@^0 zJy<-Y`+IK?V^Fy213#zFHl=wag1?oo)ehjZ{(f--fLfd~KE*t2`X1aNTntb-R>`Z0 zS;0^Z*X|L8g0#*gZ?CbP>V)b`1(e(!(V9b7h;D8w>4C!zE%{JM{2cTjX+6l?t9O~? z{0_0X&ncTtSuAvtDAk#(2 zb#jEVs5RzLktiNqDo4-4w7heqU~WhhquLgEHW5LPRNpidKV5XXv$I%A?XYnsawJ~@ zF(P1v2#4dOjjr1VQpw&qrrSusuOgkiAorDvme4*4xI%T32S+6RfV@b|(P{gb`FFxN z9&L(q3(w+6bC1GDF~V;Nz}@|Y@e`BBrV4Cb@l)@e@VETL4Swajw@?9&5xlIgJnJ|H zJLJRh^n8V_32yft>0oZ)NRg;gDwoPzN2XU*3*OV+ zo6@Lo%wl5X7?H?PqYHjS5}|@%3qO>Jr?qUvMEI=FbDHNs$dL?mi^jkMSPflboJX$Y zO6kljz2cItWakArs=xCGRs(si2giSsiry?*4G+R`gT@gE;|fye+}B*fzix!RfEvXM z^&NDIi)i|q4Qs}4rLiS=9n2-vimv3E9S|QR`nM@nHmeZxND&aMKJxi>6fcvJy5Ye?lZ7ck+;IA{W7Rm}(Yd%t!bvwdn_y3tC(KRibP5 znz!2znQewdnchz9wk^%uax`cY5%NS;*krp+|DlvYr=QIr44x>`M46}zYeDeUF-f7e zSpNso!{`mOGM~$?T9%Br{C@jzV2}KyQ_Ey?Uo2Jx%@V4YGNY{E6;Z}F z2;}4%B*lP7aVh=mRdL^(8po8ISbysY1n!=Z{J-GzzrweI7a0rzM68TG#oQG zE%{&N(97#I7SE;RZU(1}#S|UiBPOR6n%Lkte8yo6`d~Fx@~Fbq_%a4AW_WeC!-nH@ zQv5AH^$aS4U;XZDTyGse{iPFr_DfH&?*n(oz`IXQxIT3l9R0rG_U^!bgq+#kaq1lq z$KCxAF3vy{mdtPqg`yznI=h#2h0qbIN znd8XvZdyibp80MvrJs&)aECkHH+<&u38F|s+Lnx3Gb^|mQ?!y!>`BHmlKwTtBW{3% zX>6^HN!81o&tWt9+ydHlC5{z^$=Oy4Jt)z*=iV8Y|}DQT#Z2#ShQpxK-YN$450x;UU)E}E#ZfI4A! zo$F|F)GW~mx5^6?3;A*ou%{8>O7_n} zv8h7UifeGJ4$4l`Liv>GDaa+MoDav<33z%|T%7|Eis0OaV=zYJ5_S!}a~#Oc(<v zaekhW4W6N!gz9s5sN61g%_T-)huV6hO3b0HVH8c=SU3d|sv=>!DS~4dh5@fH7pMx( z+Hu_*e)3D#xE}+5^H-nY{dcc%>hwx-$LZ7oIQApVN1F;R7m2atr?B7K`&3U8jj|C+ zG=FHA&UEnAdCOFcu-h55zL263}K5bwKczObWS%DC8kF;udp;NSCx^2gt zV?cRcLuERNx@cZToii`c3pHybCJ#8CYz<$1_l(1V+uiZvb}urz(F3bNpvQvplE2i1 zNLi`?IcBc$eMZ!fUvoM|q|USR3D2$?T2t)1;iFggcyYUpCeVO|vS{eCupQ4j?eN6JsHMH5zv!)44b2x*&ygMKOD8Z#)#DGK8B zWR^j*ft~K`zEBYs+RqG8C!fkHUTYBorDxW1J+b6ruC@^j&|8{Lo1j?k3m%0a&?axr z(+$sJtPF#D3;UO(Rjkz@3Fhz!pDqq5LX=b_@R}FINKeg?z-EO4iL!_tpDC}m)>YNV zqUj6yO7#v^8nOf>=8b7NuH&diM!IunM`@GX?GEVyD`zg93|94=C8z~7DmA-~0%$Be z7Re10$(xo%EcnF<5hu8!oLS-@2)aeJ61BBLeDsPgwj!CXe@}~=cgC00WLq45q zn9Q-7P%@442yZJFzU-!r%DI+Km09%UD2GK`Z-lc47haWE0QO0qZ!xhitA~SLaN?9H zOAt%-(}lHraFTM&>XRH-F3*eqk$Hr6HdcniBNX{`YB=>)LM3;@sRMm$Xad~d4|dZj z3Z?=ov&5=kqFOMO0zLzM%OPFof?rV@-00Jc)2T{2DT8-q)JVkv>|=y8e2=m6)wYG| zPk_V1(fn#_P*r^S*%{BSItkMTl?~e_=nTEx55u6dc2|X-JKPLA&%KTC+B)@6%{h5? zRprAZ>Y~voN$QwW z7F|XzT?Jo#{|Z0(?ir^p*xGc6h67)IXTyij?{OKx%ZuP@>v;ca!|Q$E?lSPmuPVGVcsL8oW#m}-e2t~}qLj=0(A8RC_~5uq=~K!PFm%=ziP(rN*E~^ZEnAH^ zpg`P1Zxg)0d_Ra()J~YB&KMQ2VLXOE5S(geWxBx_j0{mI;@Q@O{%FN8#L&VmVlS;DZ=s-K2)SsT`W^~7H z3+_=H_Y!p=$i)PUUsB4#b*?|@zZ8LJbWB$g%lWfH!g^L|i-*z}4sEgdCYQ?0f}}bp zSmnK>i?qGvD9&f+=xMN{VdiHe{Z71!R2LBC3!X|krJq!Ba~9lOHJCY`-yRr4aJdXz zx4dAR9v)6|COYU9Gw(zbuG{e^>sfjPk&cLs8Sc0o$BacO z)gMhiF(v2432Nb|bjTcMry--$2sRe?WXv1y6-)=@DuRhBa+D>!Nn;e{XqbplsEbE9P8rNq?5`!1Qi_DlLBloV+4Zn*3r-o+`-0qI&cl*o= zBO-$_z2j0!j>Q4J{Ll&=jZOd51;6_%Pw>@uPdIHf&&&uI)&|lMXx9Kl&$v1@Y$_Nw za16oo*C({Dc<;#u72q;}PhQ;PyDu(ybr*Q?J`Rk75jkx^um{adB_ohXA<(ossHEyp z_a!H(CRoOMTb2qk(Zm*whs@}a8b?-M;ACtSf^IVkB}v<>KOC}{%1D`!2A+auB<>^a zEb>~|r=}FT3L9&bSiP-J2kyfdWbGEx|BP!&D!e*cCNy}9aVZ9C&Njo=F^XF!71^Z= zv8n?);6{4_+S=H%Zb}+$slP$7B#%YY7xASn$;AQ<1Ci?TCiyy7!@&`amU=F6k|1Z3 zBT;RKl(Ab|A>)iUSu*2t#3j`+fr;QwGP*y6n|)Ek+2kK&h>>;BHo&;<3MJb%J%d*M zh)>ig#Xu?~3T9xX%OcHQADwuQ!S^eFU7so-O* zj=}3Dh8jc(fT70jH)Bl}i-B|}w%OS`UB@TUGmIyj7_K(K)2oJOXT{Yf7#5x5-C^iW zaKDG_zHOPH5v`oMPI#ZHB%^H3aFi=M7K6oc~ymY(^1D@_ZO5ZVGEw1!x-QI=!ft2)r82 zRfAAGeqWHCP}M2N`erf>WEn-GG>P>T_AChh!dIxZZ#bYnFhog}R(kJ^l}BC;TX-cY zhK)(%SXF%)`%}$f5#;K4o$Gy~{gGslO+ioz3?tUTmNqV}tTtrvm$}EtY+TsVm9yNOGO@kIT;42Dfh?G& z@}8ZXG6IC;_ncw5$AS|pMDVR-G20Y%dNM71EG~)fTs6FN9p;+pEz{KT>{{_m8XUmu z+Y39|iIRysiN_q}_)Pn8xAJ*PlR+V?cbM1rt_(k9II~agjR=Hn*H9TMPN$A1=Z;fv zxEvu(zB%_8ztt!t%~?@|RQSLc2ez$aaZDtL5y#08Ao}ZId=+(X~or~kknVch_9pOi6r+XWq&K?II2 zNO30H|u6$vwiK!uv6b;RTYkcu(pD7OmQXl_kE`v}e+eVX1@ zN|L{kUqp5tBj?uS7@1Du@pQgS7iz~rj!is-bPX1LkpBenSu>^I5imIsqQ%9?hfXo) z@58}BD;L`$=_b*!*xS=1#%KyCLnhJIlPDgeiX^$l z20Hng+p^e*FL~SLamC`3u>zhZnl6)@fiSttz+oM;n2Ypu79T1Z(MytL!0^MpWV)L0 z-C$-G=l7{lF*hjVCt%FUqY0>S;cMEkHKD;N$(ubqd*FavZ`I`qk2O1KEF(E*OvGT8 zSyPpBCWzpp$!}@P1T~X!?$6f zvbmF1>|-9s|6VnV=#Q ziC{689%a;WqKn{;o8Gwzu1<>EgWs2S4yu^|K>iLq$~v9*m@@EKIJS3n+z-QVyu9G* zs^Q(M9CO8puW1V#g(TP~aovcHx5no=?nUMJ&mlZ-Y-%(R)Gh;8=M4?OO$Tmo58Up9 z_u4exZ3UX!RQM_2hgLyaj@C+)GX3$4NE*sju4%;ZVquAd`EK%T%a<22pXbNd7mL&6{+r>{l<^)>y_W*5un)$o zsFjBk(g+T**r3worKIC7)5UhutYsxX{17o6mEi5wF{TF}xRFhv3A;m|gy|fgnXg3A z^-#UYs#0A_ElIIa=VG{cn&-hZ;;oomH;i(ECY zuw^cS@#WF^eKOvo7FtZCE61(wiE3m}C;eL>Xg&$sk+MFomo|Z_qHE;X4UGC8iAG+x zj=l-DuGqSk@uJ(LQJY!0c592{+E~10?q4m!!xH8|-!^nE>{$>U9xmNEQasGiGc47( z@yg(}Ry1YNbxae;@vzE>jYFq;Ez3r_)Zjbc{SaUM@>l9PDK4DN=OxMJhKJ}ugx(qs z5p2~7ymSi!XQ5-;w zv+tCOpUB zndi6imhwbN;&W2z02Rz$9%n00X|}NI2uf3JQU1U+@Z;E=UP-i~F^SAcZ9SSecDX_~ z`*cLFkQSLj9d#}0M#Z^sKN&|D4|wYjEO09O(Ex8+jYlc{BpMXyGL3cLgqQS)G`-cO z(;NM!!{~7ni?cwN2gj>m5lR0I22P4n8k>aBAd@#b3koy8*p5=M04Phd0xWe*{171 ziVo;#rVrMFCs&FuJ>78C(*56vlxhVggJIbr28rf^Hi&^5kBL->d)c8(-d*sz%mFjQ zZjRUch-+CsO){THj<P0h41m{| z_^lN71pz(~PW#{_LkqVL#L4KS9|CQiXd0Dx#!SGlXWHRvY(}*R^fNX7@%058&&iwF zxhv5d`oB1B1QOMNNaP-6?htchRlO85q0op$rulsEKrV!4gb9b}Y4tBvJtgmmXayFB zUjAbGY&d88%yrDiG!tB0kA22?#q-l0n2~765pl zBuscoEk*;|*6{AN;@zu;G(Vq(@=R4<-L55rk;~62LvttZWzf(OEtb4#)EArc7;^-b z1+P1!Bg|mjKwI%+6zGE8Vr#`@k`bBkVc8O}{3A;B?h-_l>`b zkACT2#FsB0<6Hm1ui*Ws8-DI@`+H+@zC_G4nmKxrpcR|aE6EL8Zn^%D)vMqMm*#oiVeVk zeK*`6$3$_wpl22}S&RlpGes)k^Q}V8VpC>sN(B-Z)=1>g*L7f~E!Urg&D*+8V0qr< z0s2M5%hl}CChJaUOzAl_T|VzfkPS*SPHIg!@?&{j(ssExoFlGD;Cf!l+L8MhikiuF zD;mjI6J&!?i`|HABvpVIR7F0Mz81AK`~$>K#+t0NDEg*GYY1;y>{ju)HY+y&?J7V>o#p4AM=97)SkbhxAZmawyyKNZcx(viI4oTJGBvlTHd5Nu4;TbmU5JXOiE8aQKG6!^IOCQw@*i>9}0FgNT$ zrqGZ61_Bw1(de%1t65{@vqdGJ+$JL=tV^s)j#EZ)d$7bPfH&_Nfub(8$Xd$M%i_SR z$TIU8+G?qO6Uy2%WH=t8!8yAwBZMljGG;==I{Yj9jZ6Td&<=tuVh1S4eFaISe(rzxUh7ko> zx-TqhzSZMJxQT5|@y^W#cf+%DM7NZ;kj~K6RNvUtJ}=JPOGa_nI0uL?fQdnjPAalU z(=!&uwTuuqZMES@iw?iDQ0h%^vz>4{hga17C9Dnvz>}K|H|GtfQ;!IW^12$>F9#Q5 zgSTaTm8_EVvGTPJ;J8BABMvXjhEHhs@yWM;1vl3xm&0`L9w--P}C zo)#S%%F)toc;&RU*2*P5$Il~&Q@q!_3>jybv>TRdh6t?nAlUnw-zSW~scI{PA~A6e z^_3QyKwh2*o}4=lnl|z=!S&Yha_n)xjd0xF1h|L<(b*)B?E#L_72+D}!3d>e{L%?yKE(I_Pnra;j97?z|%cbB; zt$qyTfU;kWwY-5=8O)(eq|PKp?%Lk~aCj`5zL4X&?4ESYC$`A9O2rIvGz2i`5SBx0&NSsjzhB}=F#3qGJm3GZAfZcfZJDm4eN z;RC}Q7mP5Iq>91Zpy?9dBYNfP)GHwOIM}H}Fir+-8@~1D|0KTq7yn)KZn%tr{pHJ0 zP4x}0zV~(fxqtotivQOC2D3V3^OjT8UOp!p@r8zX_Ml(K+sGB=rEk=&2 zq_lXWV+K^`2t9x%dqDICj70So{!oc%NpKd0{5NG+HzY%jgKs#f;xk7CVghK=<~m7h z9Y4lH6!k~uf!kxz^hG0qXO}2*PhL{!sVHJhN&I*0vL)8@@k4oPt01n%ZyDq%US!6? z1BzQPy^JzRw~Tg(Y3(_(8bYvr@>>&aoH=9H+862(dB}2`c)>B53Z=44W}Wz za7-8kn&f6Gx{?g8Fl-ys(#y@<(4^sNYq+^S;c9E>%!qk)cL{f7b@VPccE^iX_jqa% z@1je>s?&i!3mj#BSgONju^FSn!;i3EFiN9yBt`XHCA>QzhgbMBVZv}yhX;C?6`Im8 z6pE&;xNnLu#cT?kPmGdrfp3Br-~R@F?a%y6FuMoPp?ZQ?7+)U4p?$+Q|MGu;U;cOh zCH!6g{r@R0p03|oeqvSe<>s5Cj)jwkrNKeEn3w+!pVLl_>d5CPkwx*C_urAopaXynAz8fyj zHhlMa1VE?3m2<`};*gPObgofxZmmpUjR>X8P+5;}Ws0TPTdKS&Zl>Hgtp_qQ@_`C1 zku05!sc|$Js4zaIEt`Bb0Yi|T{{9wj^EvLfG>?P@;6zFT*q9C$p2|>eTdV-`SuAxZ zUGc3r3JB9pX$+ZP<8~53T$^Zp==w4*Y}kqDXWu_X9<%4(Qm9GaXto+j-CQ(^1WpJd ziwIpt7f3sQD>vKNjDFZyt>#|<%p1pUHVNUyZQ??_5Wl@~d{;D_bqts@Z;lOQKxuwA z;15-K^F!)b+?}22{A^pCz=uv^V!lroL07@42l;n6aM=d~RAUt9HVqj^N{9z=cu2W( z)5$RaO_NHE8x5klY zmJ%sejs-QwPmW2@tn-Q~Q#YSPW-}w1Tyeh#LHerC#U?V(`~k$ihDoRj#0^b1Y@0&0 zMNlqM1|Hm54c3#fE z{2%;D{N6wK-^Tkt`?EOiE;asJS+2A1IAuwC&b25&ecZGw{|5`JiA!1eVBH`j{yuUZtAM4z|T(8Y0g7@l4? z9J>+C$>J8&@y_OC3@>y>SRnKs-}U}r8ACrWgTPXuT1K$s9}&50gwWdJm8H$`?8$}~ zw*#+^qkN4l3F|J?4WG{DX>jTUl5!oJtK(V&FMQG}EEpbZsluUCx-EHuD;XSE5T`k2 zFKthg2juXoq7$L<99;{AG`STu8mw9_YxH9?`o1;#VhN2~R|WM#E?4qRJ;F5AEQsG& z!-5AJcq2*Qm%?A`$ePADv+QF0s40YtLO*5L`J*9CkCp>(D--+;f8PjCFT}*fq)@WR zP@+w1^hY%y4>=+0*9uO9mg}>oWL{TN-Xu__d1Z|aQ<0OK-!dx^F3v3@ANcq^2*}PH zy0y^AH1H}iWOA^$A$Captg4l(u@co8#%K(3bp|(;;|SiBiePt#jltobmgL=t-WVPp zkEYdv%N*BnCNjzhFQZfz?gG_Lz#8o;(?&#Q5tIx3{T>D9Ra2Z#aRv5aHKrQmQFS@{_X!e{((R8k3m`}K}+?wG#F(Q!EqN8QHp<<5psfQE0JiY^V&wQ%V zHyj?(CdWZu6Xo|g9!<14{nLW4R-C*rIMOjY?O=ZW%glW%Cf~u&^!gVK{Aq z{b;z|$I=WidS(V&#uzv$0t@ol$cGyE)VjL(R;?p>N#&zgS&o^D8xORVfG5>+TGu?4 zbQ$4;G-ah#fsrRPGhL=qScUnBMH!f=8pO(vPDmK2qAk7U8mhPlX#=AyXKadwGS84D zmNA!6*K?GP--~5U{@G-0KmoKd{i%K%raX^D({C5h^rqvvG_CVukCsv+Lj^L|&6%y$ z$#*Jhf}l**mWg?hP#qHrmjzBP7}mlIB=gy9+0ZhCHtY+c8!bt;usf;+V^(e|?AlXS zoFgrIbEqdWCY6mB-Jqb8M4L{Q4N5PSKoUCDZ^9Y-g*luNF%!xdRUtxP+{6Q&F%9m8 zw3zviMYWQ0=QLT=B&au_jZ!l+fnMf@XN$viRRT)%4p=i8tV*iLjT1Poj*gdb+?*6m zfV;s6rc#V`I?sJMABO(}yxeb#!SYJ9F%o2BtD?A_`$zMpEgMWe)7e z2%7{8RM0r0%X~TKnAs(eIn{=l6UqSU6qSm=H1ZrHhK0{sp)U<0qxeG?Sh!aU@bzE% zH*o*zV|Mm&AK4h#afEX@GGorsn&Mag(?5;h`z!xF{LJtFL$Kpgu`9w6U;s*kTp-$j zKw(MjOX(oeFDsqKvsxLmIpNQEM%g6y$&Z{lcOX?MZ#=fM%|VdVh^1d1G7rTA`#gO(}|8=;&uga_P= zh@sCK$I}Xwsi!CRk0oQ~uYLLHh9)~MFGlciOzCDGzjeTu_?gCrMzPt-6`bOaQp%N2 z-l}+W2;+N@uJ9Sg%L2kR^6eNFR~8Q003R7lUg1nam2|A_O74>{4XadOP%DJ{L7rUE z5jqjnK*WT91{>;8_7Pb+rSL$@WVG?_J9NpQs`MyYxL^u^l=u3mkz8<@f^hE;>_}t& z&yFrgQg(KSF~ZY)+&P;kqQNxrTrfIg zm&_*`)|h5K%y1l3w>W~>%(xQ_s>0N34B`^p1r-S+PK0eiLjPl|J~Ba^7D$D8MiIhH zu9c@nB&}xb?lZ?r7REUF5~6|BoLk3XhL7(Cu1^hi1d(|+$1wy$W8=IG!}S?BH)WiP z)>y#Y!>rMP*B9XK5+-t81ee3`$__MBoVGB@x!(;R-VXXz8NQ?)&#oyI?m>#Na;RsNQc?L5P^+> z;RhfFkwK(YaDR7;|K#8KSMgK7=Wh=`E1F%xJ(6>L25F1VjaYrE2k|L&WeL%N7N3zuX-(3E4%{9nqLqSB(6+{+pN&lu^bx<)ImRpxR{%{LP8@v>cO2qr ztzX}xivrznfA2*ZD7BfP3XmA(fqcY3GOJKz(Pu+LF^JfRwRnTGkrc}!9q0&t)^Njn zHyyoqyu97<^46jdPadZ(uBNHr%Z$JUDXBCDabDXv;iLTE67jbOJV!4$#Um<-#nMU^ z_c6;d&FCK-p(xX-mjB5^u+;}iPoOAqe(IroS zkE4~H94aqP;5hZ*99@ou*$r^<;rl=EiJGj(3|!wtan&QX;24u9ayTP87C6|lm|ZrT z4b+x9`IYc0m~Y0eE#8u_<=JemJgr!_}#y zYeT0Bv2o=zQvw8#TACtoXb?)V(o9ETDBeSZMQ2%`0X!G{*QYDWgeNqMiu*hMED zUgkZZyq{CLopY+--g%8vGGMtvr0cn!DzMsG*$j2^+6GC)B``qnn|cect-}Umn`Dxo z5%DN)$}zfO7%E)&Fb{HZqPJNB`XsR*>$8c~N{G+sn6@i1w&igbk$)CI0_FZK6=p0V zIG-BM8*oy^tGioNlrya*{6VuDBmSh2k_j3dG6RM>bfMs7VbL1RS$$bhxWrmZP9&xZ znC_8-W3l0eW^_q6CJ|5+kz=$_7Jn*Kt9+rjR=u2r9C%AhrZ==TZ8=lV zwT&B~hbtlycy6>ROZ&9sDtT?xQdvUD+eitsl%Y5`V3H#fDHBjRr_)ut(4<_r`5k6q zXGK7c;%WLpm0B-mkscd^O<%Bs%CIErjx-ERZz4uu#7L8b(1lwTNPv;c z?e-FR&=l_lxRR_g`d3m}xu`|mo1Wy^E zVKIeEazDsB8lhGa*V^REN36^u%hUeBy%x`YA`C)HM4O0!MZ_P}3VDP(Mni?IUiPq< zIA@6WF>t4fEnl|i;EBhVj?%H8umlOQ=K-*d#t zFcxgbl7~0AV-I)icEtVEv}zid!4?aEQXP~~f#;Z_1Til)olJx7K>vM)B|AskXp2Iz ztXqWE1Nj|i#FP$)H>JD1XA)33&O7~)5^`LTu|N)2a=K1Fp|IFlavgouTQj06_nB#( z8Nvx8**sv|QB6if{fyd66o4^$sw`WSM0A_Eo8-w?&Y$^j!j$H*XnNbmbN*)IIc9ww zCzlKTKiJ48ZMFM-3VY%2blw9Rk~fu-lSb2HD8+%Eh+h^5EcA_taXfyu_TtQPY%yYK zffkxMiL?*Bn}!>m;Mesi`CG9jG&Tb&8tTTRMK?AaHhr?pfpH8RN7zX~1^W@#SOsV> z9QQl=p}5&Pl~FN19p*9Cl^NFP%Lp%&>mo}q2}Rtg#}2-=UfS!j1m?{j-MGS zB_SNTG1aUYk)T$`nd^*JbhDHSufZQWz^@1kFS@Eeu$`%Lj#ezCLKL zC10Vn8Mi?r@Cs=iOkRggXYU%7Eeh`_4#+Jc5xeCW+L))d8V@4J8S$`oQ4C3v_T=g$ zq~?_Pl&st78B4et5(|iAVa9eydW@C^BS%_u2Ij7W^y&4XkeGif3$TNI&?U^-_T8zd znh`At1FvJZl-#t%kEUg~Y$8NynIKC9$)pDaM?j_%x8_*VX2G|P@6sgCFw^dn80u6p zDLt5yIIi^LI($)`v^a=OTZ{liaQJ{9!AlxbdKF_)qCTm5@nJX$WeftWDN)T#CuNpN zW1ulC)ewrSI5w?V9ubGxi2Ie$s+EkJ!LKej$nkmgt-lQMSCfox zz&H-dfspnHoE6tDeZ(anGVH@<;y{`z0W@A?CO5AAK{Sk^5a-f8gano`Uv ztV_0`T4Rf*Ju<+ObHbl$Z@TmyS)#jhzbmJMV_j8H! zqy8YvuZh5c9W12{qIdW9j&9U#cjLW^|^3CRAu9o4cLh`NPN)!jXxj~4%<(SM2 z@7!z*>x>2U_88cj;DaY8yt*BDbw4T^K^FONc{QbH(c<=<@xeOx-cs>o!IZ^brq3gZ z;YlVHtzt6s%dN&*6Gbejo9E%O4_uuhHlu690mJT4OQ}RwLHvf zq&zJ6O$%!d0|S@CD;U^TV@PHOHc_+z?6d`FY0UwY(d9@kl}|6LL{<(M+!V))PjLI~ zzlvku0|5-U0?rYrz;QaAaCh13dkhv3!RyP(M5zxO zy`^A8Zs~(&5daSx=)G}3(CU1N#5D+hnao_gK?6)(EM#c-YCbLeYcc|aDd!teV;+m9 zw{JZ6hI3U@t4&_nb=a6jbTLYc(UT_sC*%s1X_gO3Iy2@%+1NoBdV$3ta4D2h={5-I zH_r!7rf*U5l`uQA8gHeQ8l|R6qUm`PTsN80gh3r3i_;4)>GLtBS@qL^bZN{Ni!{?=1f2LGTgK!thYvewb)T@mBoe| zI?wXf6^-M$rV3HTi3r@*1VgdT`%7%q7FI*@{ne><-gFTlT$$^#h`dPcN_Bze}aaO`2~CNAS^F3ljBy9O0j} zAY(?(Rw62yX|?lb5*aG*AxBBj-J=;e#wvTDkC)}7f-oQ|y>0`yMeJpGq^29o=vCoOrPaU_zSC# zRlH#?M_!LgbOq!>WX2P?nU^)rm~ecyV3mm`mBT@g7LNOzoRw0TCDECSN0LhyVx-C9 zl${Q;)fw5MUZ4~7m^_WfuJyEqb>3kiE8mZZ3{eWecOP(B2x$QR2ULKk zR~=uv>A1NPz#E32VB|IpH$1)SxH)(1BgoZT3#8?%?{=K~2EcKBYIu6;czu6h48u#R znZ_~j`p$7c&^6GhloYpRY?$StiqlNdi!0K5a4J-ixD8xq<6se`!2aU<^5g z%a>zB@#W#`eT?X&)w7`pB*5rh^ZJwT;r`WgY}eOwRFr%bHYIbGKDlV3i_M1thmurH zZeJC=OL+8J3>EFYT+pW-2oizFSW9Rn06b7+C5e79vkaIyEh5rnbl#({?{=JHuMKW^=iJaw4Xu z@e!Z-#2DqT(}X%YY10Vj%@Qqzfc_32<9M4 z3hqxBS@T{drKWP@BouebI1*XHELX3X*|h~aaJM^v1Lv*PctkX~652r`=Pa077u<;8 z$qD$%vkg}#g+1wo!kkax2&^L55whl+v*OA5j1x`whJ`D*(vO^>i0LFf%&;H8l}7v68j5u4=C~X)jwNggfT!o!Xq3vZ>vO~Fec+@Wx4Yqv z1n~=x`Fd-BMp2uN=)9FM5Jj10w8UW?XH83oCR#*fr3xz?+DECx42H1}jN{;<9m0ow zj8cL+i|Rmrj75+{aaL&563ddKBTHKWkdPei%X^MEnn9ajbE)_aWRNqxxnK@^{eAfH zicaJl%bLw@)&(c+*!8|lWmQodQF0K+-77r*!FTcOD?iEJMnWN}5sG_wTqiUhN2BAj zO}}PA+z*3>lsj{G#0A|n3IU(oyXySc*&Lgq9G>LQ$dr8%ee=pelj&xgrs*)5HW6NQ zIC2h&(A@5ZK7g$S`V(GF4TIiKjYhM9m=}>MMohf^F^1O~y9h||Mwo1>IvSGz(0d^! zM~}v$X#@iYM@oQ`0IlQx-thWz2}=%b_~|cSp!>+g*_b4&K;-IhL1nF z4-ORypo*aD8pW~jW3jvPC?9A5vsg}xJr+h8ha+6))6T&kETZH}&UrTZp;ECY$q5_B z^gc^FhqU-eguXJ`i^QrxQ}k?uS*SK>jFMMz5ki!dmK{nHOc&Z5_z_A(bBK2?U<&uR zvJw5+!Y7K?*f4WO?TrF^ACacFlnDN2NRy;D%feVnYkL_^@n;q$bOMJHrj_Uv2<;vQ zJiBW6iT6$z$H1w@h^)1^;ZH;gUf-X>#kC7QemU^*-GG_lvKw|fXnThGa?BE)Rw!`< z#sExuh*&DF=rNOj9*zs=6IWgE^jdItG29)2uANVciwIusNAQkrHoSkMczP9Mpo2z- zLI>+4WRDT#;Nif{*3lV&Th~M5Njzx$IF5l=mx23Z;M{{B^z7VmeZ2(-%N*C|j(2WO zxEu#Qe0kuneD@Vz5mo3KA-EyR(o)UTHPi4yQaT?e6dqYuh+H|5;2%NIdz_mb5AHU3 z4IR^MIQDE0%|ijT=;npzJQQ++{3^vE^kuRb@tB39xlNKE zU1I!0-=Qgo4rSQuyL*fw&{KG*!4=*ec1Uqy_Tz#NzxQ?g)X)DN<-g-Yss1{m`_9Od zMh;K|?8tH2RCYvvWRMX`HyW8kOQ|?>2iGE~!+}rd!Q=1-ZEle?wORO`l!1>f8RM`#Yt<28S<1L%WMCl4%VF9Y7 zL0@gC&|4qCeuRIUmSLu&w~jBr-*A0uc+xun!?Wv-cdmOBu@F2xZ}{My6P{jm+};m- z^zwqsVdyQ2BX1;Ln?uxM98Y?LdIq6K<6xeiZ#KOw6_s_Ti)yzL1Y}0I$P!BxOAf6H zFaw|yWz?Q(LjG?WUoO5|Xj68S`Gz_Wmc%~2xN@VGCJ0SroNrJ2r4H<*poO<8vm6yr zYn6j3IN;J?t+SX%#USy93EI3g7_;aeIZa;xV=B{@-iUkcy`sffrT9Oymh>|J@B1RUgOEt3GTo* zKD@RQo*bqH;O z*Y}3q1n*oa-nkMyxoUWFZrEDGWenWw2-K@((mQZ_XE>i5R2;7_JFYf%HlmC)04}>@ zKaMCmhT-lQc=>wZw#69hvOBI1$EM+Woyf$KbB74E!|jXts8JO#=9oUMNQ;Dh6A;OanCw z-=?M!RDB!<>+?Ljqv9~c4afZ_WU#e}lUYFOCie*Oux2^0}h+zdET?Rbbl z55w)p--Wo~{qw;2wBy^KDBxGcDKZn>JD_gZdYDMk@V|^q;l9MNM2ruXVgxE79bXWR znv}}SsjShxO}mRSsnjKG+-H$h{$uI>?h{c~iTiQhw`p;qI1mk2^WfVhRYob?D1nFQ z`jIRKmeFGxa1wG7k5Fg<4N4_=Wx}y`OU`8zi1fO)iBw&k1kbKFoKIBG0(kdH$Iow1 zvAg5$5}_(LC&A76gxB{wPU`sN)q&R|_-qlK#0*fPf{o$?lwE*VDg$&1KGKa{vgl>; zm0(?Y7}29od15%-f?!eRbEGGWxh@&iftoV$Ky>D777|6XW22E$S`xSt*P@ybw1zMn zaK^4Iyn-m=NZMb=;&BfSK8FKtZOOyKv}ujt`zT{LNpz#=AEgPFp<8o_q)IxIT59Pk}__y`L!pr+&hFPftjd z^Ur?y8uxo}H(uTj+#eB*@ujC{m;v8=agR@K4d43s7SHdwxDK1-K5_b;%uQ~%6^;9ruUf?rz8H6L58E*rfIp?E65|hO4dPs#CS$hRYF~=fxbC+XGtzo?P|d zHVmV4ZgjqPm%&14RZcnX_Sh^w{J|}b0i3$vC*Rp{a}x#SrW>xdhM)Q13ipS@o&)dR zbhr!dj)1`L_Vh;~)5N%-=3EOTcC#bHFl=YRb?-on!ZXo^K+zP?K=zJf;O>YbvC%br zXZ%>#1>Sey{xCF+E_WYc829ulDR03=I&Xrlcgn&YAH6zo90M=!4s>l8MryyJ#!OkP zs0g;!ao&2EW!gZ~4ZU}`9r!o@l6e~f?Rf%y@rKL91JtNjHJrCu zN)<c@GSrp<%;fC##S3ms#c1Y>=CgzJjiOOjIir&c z>C2oyL>zHHipz|Gsp6SDyf#&PMy^vedcJr-X)DsbW-L~lo^I15Gz}~p%J#sgaHvd+ zGp=Sxp-%oL;KU=R>FpiQy%Era%B2m$t2oJd3YB<}ad=u@ppl3x5cEy(?55-AzI=tR zynDu}wMi7F3hR7|d4Fyu!UCkJ79n=i89sS(!PA=);J{bk9Y|BlRB(Lt{VN>9@%`u5 z_>13sfp30%L2n(}fn%U#Wh=9p8O%;HoR$xjErD9I{Q~qdRbF%0)L6HMf_L-@6EIF9+@p zqwYiS$?d>pI6ipi1V7MGQ z+z%cqmGibXCC;U|2nc;pYHf9NmIJOg!Gk8R~oEmV6qH`jFK8Zh{%CAdO zefc64897IpaRQS(A0*|8;3c=wmTXEO#>s_Zm0WjPNF<+kkaTw-HrTGAG=zt;_S7(W zITnR_lZVBa(%iN+j@fz|U}|x&;D+8>DK_I!vvDI5FTi#Vo{pJC0hl99kM2{&v29ku zm8~L<9M5hV-rGAqd>KK_Eeq9ja+d;mB2QA{_(j`9^epoHDwxDpyOG5$+|meBDiWpc ztxv@`Y4K^3nZYq@MR55<0(oJ)2vX5y7;Tgk0x`v~X}OZF;BE*MikG`(1dK=YPfPI! zRe-jHAPa>X0RUJ51L{kjDRRX3*(N!k^Xc5@xoB!{c=@ISwPwf~g>C7w2%+=8esB`ZVU;(TWQ)~PoyG5#dZx|!S zN;jLLakSMnP_gqqupfrg#!=#ExZ54iZwFpom~5^RV=Q*Vw|nK^;H-l8ZcaFpFnfC$ zFr!Baul0TmG!Z<#4u_uJ1mE=ohXY+2?)QU)O)X`Sc}kWYT?MBtI8?Wnfm0J`2Saq} zX?4Ux)m6}&;O-FI9>JN~=qM~TC5fV;X~X3(9LG+zlj5`qd>pvE`ab@_zxxm3rtjFs zN6_{R{pN&mbQV1Kc=7r|w{c+iSu7>;;oM{`l}Z{T7PoX}rYgy>m5|Xfb-me7k96)U7gDo1RhG#=dX9XbKP;>8rl}ebGgt0Kn$ne@br4a%iBwE z-}p3?qKc@aKUhz^1WIcNaG4_}D)j$n?_XkV%d+%5>>p#!we~*ezT)1<%*f2jSMgb8 zi!PEPO-lmQuw|39-4G-g2HdpWFl+;Y`?mXLTk5$d8E)A zVWpGNA0ud)4{b?``=jL`3-b~anVMnEV3X0JNm!Q}q1~P=q>27eVgx{YN}N+VR#79| z7R-!PVnJF6j*}Yibg)89!pFvayk~>2$_SQ9+sB9LY!* z%t)l1C~CU>IjYsvUm3F!yH1y;D#-u_E79c3K*$1WZA__qVg)kBF7>TPIFB3>vqV3) zCc_sYMhJZ56eY64;gbMcLpZFoOSk4DLAy1_>)!CN$K+^PH9A>ZgVU)5 zi_pttnM~Lko0N3KyC25%Hg1^g?&7`)?TP_dRPp>=5d1U6?Wv4hI5)$ybHR7Ndcw=6 z3qvvmwN`?tg#{#>=ZxqjO6mKpKmrd~erVi2OizfxAs<^g}+qGh0+{~#eo}C4s zUL0?>7R9p0bV;P3xkTZVT`FsB>xNGsc04;*tPWtIlWp&~-$NI&o8xMROYe})0W6cS zEOYwMnnhtC6q~a{@65tm&bR2-kI>pZ7P~?VE$0-*uGB!8C7C-;_5?mpGB<&lxlN;F zr=%JK)?fCTJ0>={ThEh@8u`|om z_2pIG4Zpm))MA~ST7k03YMk7YOEhc6umpP);S3C;gB6*)#8sF zxg**rU4YCrGvRcb;^&mMOPMiKwMMbrTE_v`IYYNSivl0X2kDGo7R9Tl3)=2@|MhmL zNTx$EHACJzRFywx;vQ0aBRH4~x*w*42dxgZk*RGn&)Ag%aJNt3?pX019ChPg$c)C4 zM~*X}H$1C5EhS=`^4kiFKo(bF2w?;YtKFh>)M<_PUx9);QY`XXlCH@5J7Q_(@9O^l zCvEWCqUo1O(!_QJLfbUm5rv$xk{6ia#N_dwjyVqp95Mt~8U>Vb6C|fev@nlrg3+=A z_tCw~%qllSlljl>FuFGjN1E9@e5?t|5>Y9l4zyU0ef#AJ?>t#iYvF@SW^iPJGF4IN zaLH~fckh=yv=GTNO3Qf^Lm@(3s<69N7Fd!0l%0%L!8q@EAY}-q9^5Jw1zkEjK|YAU z2U!Vn?NXHF>1DR_R0-}U8_0M(sp!E-aLrHsgtSI-uls*Z=$ z-VAq_9h(EUYaH**6}vcE>%=`wN6x#q1-EO#qJr~Dpi+iaeD86cbag!JhEFbr>(+7E z4ZB-FFmDt~4b4$xe(Jm~JltlLopmP~!X>&&+jppUz}kpKDFAwpSd?|GIIoJ!)``fN zfKNGuK&NBOkp-0v(z9~cvhNY6veq(IL-F%CQDU-QKDAxNIHE zTCgq)%)*?J&N4f|GY`*ku7@MTt`B|FXV!THw_3Lmfx{1zR&yIMIMgVQqDYeXOc$PT z3K)|i87K|q4=qx{;X1UNj$#d_24i+&P7HJUkZbPvY*_Sqh@ea6w)N2Nb?GB-PY`tZ zZRdGd<9ilPydD)i)F-)xMo^`MhK&3o<=Xw}O~w5s8q~~f%avM49axAS;(%sBlo}r! z#a~W;+>eV%N(?y6YORyeCj)M5Q$mG9RXJ9Bk7tetp*ZCqGtfGUAIrENKj@=$Y^kTe zp!?Bj5SR>^Ge)Q0O4Nrt&&Z;R^K5PA~*Qty5n*+oL9k3Q`|Shx8Ggxy|3Qj_Eey? zpsJF{%NEWgowg$uKrkmor?ujVHQZl%9G2OgA+n7$V@Ghj+)05&W&lbEmFVxR~`mE@}^PwjxzV;B8!i^5P4k-@vj#_|P>ofs) z2-&+C7A<)B&vh`OIKhpzVgsZrDt4Du5QnQVQ0hSeD2pd#DB5Zn$1sT-U`>$ku@$6yB);<9!iG z0g|;Xi-X`a3mIMke45&)xCRc6-z1OVVmH~(3Zt@Ypov&kSNHn*C_Va8lRo@ zP7F(kZz@7k;1&%;T$jQ765bEzD){QlGd{lGaQ6^&@wzD7;$YYv*jl_-Dsit`#@}ja z-HI!xD{+r%iTld>p_vO;Kop!F=7%g@j7@~+*~Z^5^WBinQ9VqS4zW?70A=P8e!oV==}2b8Q~wQ4cf+8+}If4&3mmvsvDi>qmR zl;i%#|N1juJK@8t;FC*3ErKUY!KDeVtz*$xE5IGkZwp?W>4wq@N36e2OU2eY+#T=S zoUxvC=n3L+9fC@yd+D)d!3Ur+nJ!mSsFMmHl#nH(CWgG=Hj6Ai)pd0mJOu)%98)NIHhS$x=}rNFJjsIwX- zDhnZV#u_L>vlSv`p{Tfw7=qThs#H*f&WBRqzOmFfCG#3ACTro|Gae|nm6mrNhP?{R z6|K=0-wjJqtRw+j6P#AXvs1yRmnafeE7(~8tV@K%Ruz2hS;ec{8jKcB+)ACUw@Mwv zW{&-#!&|&h&u$g(Jzw$klt-I!EgSDg>WtEIo)esmNo~DBplEI|UEsY#a*frEFwBZ( zJKO_lAqe4pzcBb$VwPl6CKT(R%su0%toN|yx9p0?+70NP;l&;gGPK%btx6EUcJD_m)Ge11&S_svI=%{ zyuR%C$w!W_JzHakduKR4i^IrGkHfdz;%~g+y&wy}C zE*lPO9T|(j<2s1Jf23K5!)<2YQIroE5KuS6?)m-cE_21DwYV2*i7?&n*eq})q5ImS zu($aBPi|H)M>@`rR4LQCFD0fjjcAb5BIsQXd4XgLb?VUgJ}IZvDvnm1>$4~{Dg?4r zEHz9sr_vcx9ZaOn4QTN@i^(Vu(4(N!9;_ z$p^VSR$^WvBT$L706AYt_;&PIm+LHR=DwUn_JFR#*~~gK?$l=FRIU_9EKY`!r+{6; z`I}R51rFPZpbr{npnsg{(l1jn^$VOm=U+(E^qp5{d|em(lb=7}?!Mt$@0@VA0iQky z-hEPVK25Zt+4JmSH-d@OdQP`&??-F#fFT@(Od<^@7~>@VsJ~Vap*l- zY9Ay}2F7kHV;jtZy96|pqF6;n=a@N9Dez1R`bhrPh!RL~c36F#+AEo`KjaQxhV#SI zjnXmG&sBnfbjWF1Q~?RWd6S0bilr#EA@Lxr;&`$aEbpA~gY`xNL^HgedvR z3OqRpo~}X4j+h0bNSgc?u4P08D*!A&J4fOA;zn_*Hj6@;aVs8z5q zyrS?ykVTPXPF;5_vc!6iZpGB9gl}*xz957oePA zVmPgees$bm4L{cwQ-UWaI2F4 zs^t3u^eT9MQ?R?>vNc>7n%#B-N|_IR z22|!N(PUBiSgl1Gfx=9Opj_NW!wM+hOX^A)bPi~o`QU^p(E?;GsYY^uwOEG&oE{wt zoIxv~Lob@axGu6`Eu!d1?57W+!sjW7GBfdQ(ex#pHGMHjli+qyeC4)c6~~kFg0H`< zsI*95w}^o_RT*H)h$c`-W#N>IEy>VXr4z;H8jA4~^J2_fPalnHQ#_e=@f_c)Ai7`? zcsq2Q0xV0#vH-VMu=kEC1?yU{wH?>ZfztWFEi*$ef6mZX*>H$uinfrcQi`ItT%)A{ zoreMsw4obNU~3K1WbE*7PD|)CsNES~%}$Mi0%kq3w+e95(9)dOiqrjue|p)_nxj_3B7zsUf*T5~g{##( zOtTOXOW9ahxle1s%j$S?=9?cyg}TZNr=EoDjMQbE@KJMjQ)WV;&iRx@72;qH2u?Aj8=`CjTI@-mh=AN)Sro1bA>&uDE&bHSTW@6ip|uJQg< zD4wi_&1C@k=CmN*|A)&J-+b>qtT)fFT_3P-JMJGI@NjpB>-`1jJ9_&VzC302ozNKw zeE7+Rhid^$@XnJ8oE3N1Jp{oHoKH&>rv~gnmyO9?^TUkdz;>fv2N@)t_lO80FD$NQ z6^j6STE}xq-cvL}P@*O9Qm926z+HuRpoxv9D(!p*hxgEI3Y}w-vBvc)3ldohE_-m* zmZC$ilDG`pE%N`G5xD8t+lHs-8u@MJc-R{18ZJaB6{el~!;C4?fg~}XaWQZWOhj~` z!AvS)KJgYI%0kAHw|JjaIw~7H$ygx>N7P4;AKypkQWT+K%`i=msMsKGS~ zGqVJaBEDBng6Z#Uy~9gr$<$^Dw?I%(V70~CzkL4ZXDQ`v(e!1VH2D|)4#4fIIIjyI z*pAkN8ojp;Zvxc?E`p^LNZPk|J{)QxX9s|kq302jxeZ2Y_YuRdBi||6H5tL+2iTks zFq#g%gfRok4=#!#4%Z|{$3&*+f?9SIrS9m+dOi^KCha-w-cHD8ipEP3U^gDx99d^~ z=20}L#H4HpVl#bQgKS<%6prp_E}ne6#?X|x3kr2!$E~}vgU>_QovGxDe#R2a195cy z8IZ~MmIbXlr%{9G&3~>AwF=-0@dzIdGIvmPJ=dZet`H{hNUA+<|lF>bhT$qpfq^~=tw&AGDAa6sH&@?SvgElcN6gg)e zo@!`}It*GBy?2J_hBk1mp*`wZc(|drxR#9IQ&@=!5#wB5d&9c0$m@pou%l^5tuYk= zvmZgpfgikOx$6zsD8tbQAbsk$%*h$!w7zOgp*p8xl{`Je42#b2-@*`EXqYmT-C{4H z}LLsG4 zd`r6TQYt!y-te&bFQwr2yhNOU3M$2ULom$;iybat?|r0Uk1OslMY2PB`r(dZ2rfs} zyui)Fof0>8b}8XpX}jb8dO<0QQ(0oQz_I_}YWU$07(dbJ7K?G05;T)6nW7q406ye9 zyXitZbixithecqbTWBO!PTqXDNBkhg&u-kuI!+HcUPCNPos$ef71wfpET1RlUqmO{ z2I0(6PO%I=@CRuz?(UH-*BVp>?>=4e!QGDgjjj}CxQRv|`BDQ$p{Z&(lp=&T-myg;S_J*lgFY;AJ-8OAlvtS^3Qr+7Od0iH z{QS&v+NfwuJkNNFs+=MzpgZpsRqSnN=4goan>lKau;-j!G_HKR1J}LbW|eTBp3XQe z4c2y)rJ~dmv{amK&bWW_9v<3rY}X${aUY{3F?8=ktGewS#f=b}A@Je-8u#1H?G4VS zGvJPGx40JTj%8_BE3obj+B;-XXffslb_~R_B-qh$S{Lkl$JUI&0iD)%I$GQD9?wo` z<^j&slmHci!K`L7ig-gj97i0`PBB9^ooRA)H`rRL#Y-`h8vbzIdx|? zomn7Hh+c_Vj7G7-!hgt_#is|&eNOHRpxv+*V7Vdl?!nQ!Vm-zAba&sW*Calv#Lw^i z{4nBa1kA%4F2$p+5Rh?cmwS{jEiG5~?F zbPFpWXS0gDu9C=)A)6Wnl34!Y6DI+_f5nt-rhTD-!`q_iODY8aA`7}&1UGAelQP{s zCO@_W%Vgg}Pa#;aTgTRVz!_VI7T}$yXDo%$DXFo@6Z4QOHSzqDnk_yBwki|=T0}^6 ziXesBDD(WjIU3D}HC=ifN4MUoUx*v9jH2n##_*7zWroe@2bZC%F>{XeX*HM74`fc4 z4ngFMNg0zM%!f$)etm?rW}%p(SRI3MKwYB%Zzjmk#PBp!YdE9KBinE zf|~Z|Dcy_-({Wu&c2w&j4t57_&w`hzxUJ#HTPg52=2*EHwA2uG_6R=(BP%A7E5VV5 zy~{y?$4MOBl@3GGNHiCX&!Zsey$qc7m^B#f@u(}h--SD-*|>(CxnG?Vky;8)OTn!H z_gh12kzse)JBk8JrOshDJRme+w@WydN>N-k!$WVO4Fd>W1y{a3)UQxws7Umb%UcybE9n)kSJzVd9rJ2wl? zwZJ@36(Sk|$2MbOq!Zf6`(_BeeR9@RLJMU^Egm1P#)5Wg%2K!;Gu2$pMNqTMhx<76 z4pws{4PC~45P`=uv4HT%6a%A^-B%F-Jn$!8^YE|5x1Y7H99_y65-El7QbGHU;jTvle*n2b!#SNRq z>$NTvm`8?Sijmi9C_NrXOVJUyn=v}6*IP@+d97$|L)$mB_JB{{JmCNRJ0IgmA2s~= zhd;&#AAW+59~6K7n-%bmy*Z?wAoT@)^wS^W<&EL#Ne?bl87qgqcRcJZ#M%%Px#HS( zz#ihcQ4~*>1+IqW1gu_hE(INiyZeSG=LKJRw&HfJ<9&oG#CEVAhV?#j;Re`nM5Tlt zP-uUsBB-lkEx`(V*mhiZ!$S+9JR}O%asRQoDb#Ise(#G78Gg58%9<=CJsZJ_?Dt6m}CvVY$q>1)YV8&x+(wJJHF(N+cpKa>8X4 zX&2Iur)}3+K&k2!mZQ*JV)!Tsep`?2>t8nhq}Obp3Ii$?QNmRv)%DI)~zch+r_e1AFGV>M*kjV;x`}OR4dY>p*8lM=hZ=(n+Y7?-T&L)m9ms)UI=q!Su7DLs@s!Ia|yy5m-aK5c5 zqPSTK8lk7>B><`&nF1dx^llb$GZvh$T#Z2Dx=m4WX2uEOpL=v*u@AhGP~FzibDv7L|E?|5Ber?kF-vjy(pWsD6E@?Gq4urR5J>< zQkB!NShIGI`G`1;9~1FLtA4EI4^9O*1lty8TBRl`R?Bfgm#XnPb27~Lvv9IqId?Xm zLqi7&A6tMR!_#?M<9e^48=1%HsQ|Z&;(FB)?ULD_)}uiR&7iWlU?W#BvROptvtX1cR_BC1ASvNQj&*GvtNfy&3vIw?3UgTz zRQ`0<30!@w^CdN*p8DDno9KCnz1`0JQWZ_^e?)tv|Djnqd+S&vtg5-N3VSO%0nSEq z0^-L!DUw!O2Y&y9dz4b}?8yn;Iz_fK=cs2a%N&i2Ku+VI)5D}{baFCud*hia+{cS> zf;)z7KC~-E%gA5q=5y4ZqQ(@^9^b$GuY=GPCXb}{LNTUG;d-!4=igyU8JSC_x=Q4 z<3Gd0o7ebX{agPQ{_$`BBmCX}=s(2W!^gPa?{QYar8S7}I4z2slVU_MXKTw+jP*=hEw4kbBQJ^9UrWC@1F-QrYdS#;0Ap9u;Fzxm>Zs)DucJ<{BT;yo#%)S z*VQ!iJ53^)^XA=S(!y&{5(T0JG5X*ra!bZ$2pv)ci&S_cGJ;yDKvA%u^i)p8T`O#m zu3H0Y3H_ZWX*^ex7NYgkevVLQ8Djrq8gu|YXY5J>esdjfJM93CXig>tDJ3#XtVx=C zbZCxL0IT`l)0J%wNyl|(I}aey0U=F;wZX*st zR8eXP3a^D|Jb!Yx?EYBrl8!CFh@epj#0^b-Bm`GiB zKZL$Jv^j216;&im3+#3+*D1W-6$P*FJO06Mejop*|MUMH%jpUJ`d|I4_?Q2ce+60= zJbU&6U;p|y@azB8{|Zj$6Mp-*{yskX{r?DGc^+%X-}v>f;QQbI*`wcY5U%;4+*(8H zj^=`o-~TD@?jLZuzsIMqU*qn6L#+#Lo;|^;1#7MlNwP1s#59;xcj?qHkqOn6uuGEk z(ll~JFDDv`;# zJgGPp;Dgsupw#MkdOl%m9ryP;T!8Z$6!^WzeR6Fb`%ae{1>(l%fNHJ@BYi;OGp)De zbemHj#5BuhD;c5JbSf8Q0UMvyA_~;mUU{VoiO^Hma0RX-mG}=12H=j~sExveavFDw zA~IHsY3=>Ikjl4k%P;9yCdq&9zb}H*X@Nkn_ZFd^hX6(lt`7SYGe?(9R@r)9`tTb*N{U@;pH%s_k#{d=7@Xjw4D=nXECb#3fW#;Q?ncSn^ z4N{aHyoROv(Puo1jN|Vz%DMyza>_DnwwTslm80@3i@7Q6H5QWAJ8i?0I~11SU|$!X z?!6q<51tZzHAVOGZxXMNd z^bjY9ID7Lrw3iZ}^-lIoabT0gR5*$Y8Z@l+*3ng99@DIJB!=BO3bJiC)U%8b*Fs72 z-a14Js>HhM>CG8`{jdIY{Hy^4=GC9T4}bP^{QRds!QK5o!neQmZG8CAhxqBw ze}?%i(A8ORh&-?Uf(x-blvdIx1K>4rFLl|6QKn^_~B3RcmCFYh});{;O6!T zS`%FN6W&}d`1GR>@ZNihSKsV|XCyKoXsR-trh6y3S`MFQ{#lDGz!Xt)aD!uhq>L$Q zXiQo&sB~zh{!bO>wcyFRFp(qHrngJQcfaxsTPH!AV9>1@_7+^FT@0%#bxPqXtJ$bX zOqm@9BWN|(;X)0f%3yayK4K4@Q|dzlv7yxA#Pp_O!Tq*_#>uhOiMofAN6Hv-^3j?F zet@gYT6Eki9eTL^om#rkZ^`TqNvg-dU`2rxE?O8lM|AX3_B~GmVh5g_BYgRO4_@6` z1h;EM8C`ooTWgKzsBRst7i`V2b;JD~C;lahb0-k9zy{=ZYT9P^n?-H%;PB{qf_Pst z{MXYJNF0SHZOMm>BUk6q*hO|tY*6vRn=4xX2;cb1b25ZvBz)UJ>WpJ> zBnv2KXA1*u+Z3d`aB?JJ4L>BM102DVGZNxH`ZP)zH>$M`O`3NuI4D3C3LW$3Psrgc zL}aA0&o!q~IBg?uDe1%gu!fR3MS?&mcJ`T?ISv&&OlSZ{{Q3rKGA3j>OPN!@W8!>_ z*^}X5?uWtNVG5Sz;NVH+Y9i4CozuRwc1Hmlz_=&`8-=_bF$xzt`^+7}08BS$_FtFa7CqJ25Zp6>*r5Z};BI3QDXgyxH5o+(#RRwH z+&t_ZpFA`u1kY|)paX9tFjSzVoeb1Kx4}aF6qO#jpR`pTXbzPybWAzVEoZ4Q^8F9qW37%N6Jl zEC(co(CE;+V%r?Q_UnHE&tAMlvyO*{D_*~O!0n4yc>eMYPPNAB9YEVVylND}*5Mm} z@1i5Lc-#l%1&up6#kJfJW|^x=_4Yn87&X_FEaF2iCs>s8YOZ!`RXlqdRCn`&*AE+Z z!+5CHs&En9Uptx_mbHZYiD|wuG54t#B-vl81h&MYfRdH3!DZ;}dIPL@#4{zMtCj$t zszNo2=!{eXn-fj9pE)`j+yu+A#2Zp*5hi?cBPyjx=zX%(jJ$LrFh*PC2l4luu4k@c zx_sgD_YqadBG4AOjDT>JY&ezBDx4OY~W7J$I9XMsgH2^@V$_Wn7upYbnv2HuYY4bsi!>SNm_skS_cDS&SQeJ8q zQ=djkZ`Cr0=tqYUg)=isL}dmSvs=v>LTa=m88}>Z#X-zMN)EYSvi z7hLw3ZqyRC`!^4U-9mG=R>i40YK_mSl2ELJSYF1IAh0kkW@S?G{MEN`^ZYB=_YM2r zu(us`S#Vl!@aO*Ag8%Ek|L@}`Kiu&80eEr~hke_x*fzuapEi8$#Vlsw66|R_h(YzAQ>M;}+}uO< zA_N>V>POVED!2lptJaw1SK^=FUw8B#59NqlB*4_bqEE2z9+NATAd8ERNTj@Zgk#5& z<_(PkTZ_z0vXl>Xz?(%*Bc~a47%4D>;p#FPo76=1)Kj^m^bV~8MaYTxuD4iIcAF33D1a=e_FM@E@`9_hZqQ0C zm3M{?&u4}tNY)KC<5NglPYhsj$|}0S^e_oaV6GINpI=N*{I+QN5`LNWFDT;|Lg#!0 zP@YOfIW6c-(YPuqENB*JWEov|JfK0CAnm+JAwYADEF|Zlo2#^e2{s&6I7W~rL@7k1 zlR`5CF0#&Q2`lfuBLIw?ETF{0-Z*h6eBgR-VXN1In$8gmfTh#fo8xjh#8p08b>%{D zXdY(@drBZ<;^d=ac8?oUBrpxbxiqFk@t&E@l|XNO96+hV@pS$i_x$!*@jr#qnV**$ zi4^c3prP(y;c0O|*(9zzuLCDC;Ii-7dT3<2%K&huP7N7rk<%|pXdn)+BOeSh^5_Pa zeQ2zvV0;=D9MCdZK3uyr4=iR?YCtk#A{GC|AH~Q8INp6)N0Hu4@aer_Ejl!AYXweAM#d-~TuK5xA8rZIbU~4dQsVxQvS8mg zbb>@hX2xErC%k&~F3f<3Mh4S%#XHY$u(t=i^R(jG4bZ)!ce>|x#i>?E-{H1Hu#9Q2 zrt^|3+RN5(VgQ(#;Q_!}qVO2LY#5po)R`;a?vJKhc5tB%gUCU!oOf3DoSbyH5(C01 zi}5}02ChnIK=8Q7AFhFeXb$Wx!=VNDyAdl?Fk-bBEe*j&NTEfyq5sP z+Qrj}w#REq2&8DC>!SfJ#pd?t_Yll%y*%=RC-OL)F*OlM1D?7fj=fbMiSz$3_L3GE zUF31a8txvW4kA7i>o!&t$Iseq(5!}wZs3qoo8%Ewpa&AWdFFJ*+{yWH?YXWMU^BgDfjFZ$|)r3phSRp2JE_7y5d?)~~He(cohw6Za#sOWljMZtbE^?Kr zsz6`RNhI&yW73#_!;GCMinWB;xM)G^9s9lqsMCWplU8VFx4mcqmcl|f)`Qw3xVDy# z?hz|-h4yz1##qs`e1q>NxmBqHI6izh6}7y^4uw>@@LdAbC?)vwVDS-GZTY-SO$QW@rD4SC^o1ZuY9fcd-lCXIxa)}X;2Pe{ zLi;2(!Mcx(E{c73w6;TvMw}F1TUs**J8I~?3PeK3G*(koFi8d%GlC`JNa7sn
    W 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�l4A8%daquJAV6jehaK8<;Z?} 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%0D)W-Ze|HM`Yfa}b(S697@DAqzQ0 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 QN&o-=07*qoM6N<$f`egv{r~^~ literal 0 HcmV?d00001 diff --git a/public/images/org_new_style/slide2.png b/public/images/org_new_style/slide2.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c93910db700d9b124575bfee27190c5e366032 GIT binary patch literal 232903 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%0A>przkLSoKeOA0t4yVFqBP=>gpM*wxmbt@Ap{<>a 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 X_z^*(`a))600000NkvXXu0mjfl^_0H literal 0 HcmV?d00001 diff --git a/public/stylesheets/org_new_style.css b/public/stylesheets/org_new_style.css new file mode 100644 index 000000000..d152b3d4f --- /dev/null +++ b/public/stylesheets/org_new_style.css @@ -0,0 +1,182 @@ +@charset "utf-8"; +/* CSS Document */ + +body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{ margin:0; padding:0;} +body,table,input,textarea,select,button { font-family: "微软雅黑","宋体"; font-size:12px;line-height:1.5; background:#fff;} +div,img,tr,td,table{ border:0;} +table,tr,td{border:0;cellspacing:0; cellpadding:0;} +ol,ul,li{ list-style-type:none} +a:link,a:visited{color:#000;text-decoration:none;} +a:hover{color:#29156f;} + +.fl{ float:left;} +.fr{ float:right;} +.cl{ clear:both;overflow:hidden;} +.mr40{ margin-right:40px;} +.mr30{ margin-right:30px;} +.mb20{ margin-bottom:20px;} +.mb70{ margin-bottom:70px;} + +/** header **/ +.header{ width:100%; height:72px; background:#29146f; padding:38px 0 40px;} +.header-con{ width:1200px; margin:0 auto;} +a.login{ background:url(../images/org_new_style/icons.png) -7px -11px no-repeat; width:146px; height:55px; margin-right:40px; margin-top:11px;} +a:hover.login{ background:url(../images/org_new_style/icons.png) -7px -88px no-repeat; } +a.register{ background:url(../images/org_new_style/icons.png) -190px -11px no-repeat; width:158px; height:55px; ;margin-top:11px;} +a:hover.register{ background:url(../images/org_new_style/icons.png) -190px -88px no-repeat; } +/** nav **/ +.nav-box{ width:1200px; height:79px; margin:0 auto;} +.nav a{ display:block; padding:25px 10px; font-size:18px; color:#000; margin-right:20px; } +.navact{border-bottom:3px solid #ffbd18;} +.nav a:hover{border-bottom:3px solid #ffbd18;} +.searchbox{ width:338px; height:57px; border:1px solid #ccc; -moz-border-radius: 35px; -webkit-border-radius: 35px; margin:10px 0px 0 0;} +.search-input{width:270px; height:40px; color:#bebebe; font-size:18px; border:1px solid #ccc;-moz-border-radius: 35px; -webkit-border-radius: 35px;border-radius: 35px; border:0px; background:none; margin:10px 0 0 20px;} +.search-input:hover{ border:none;color:#fff; } +a.search-icon{ background:url(../images/org_new_style/icons.png) -387px -11px no-repeat; width:40px; height:40px; margin-top:8px;} +a:hover.search-icon{ background:url(../images/org_new_style/icons.png) -387px -89px no-repeat;} +.searchbox:hover{ background:#999999; color:#fff;} + +/* Header text */ +.header-content { background: url(../images/org_new_style/header-background.jpg) no-repeat 50% 0px #070317;margin: 0;padding: 0;float: left;width: 100%;line-height: 22px;position: relative;z-index: 1;} +.header-content.home {height: 609px;} +.home .header-content { background: #070317 ; } +.header-content img {float: left; margin: 0 0 0 15px;} +.header-content .text {width:800px; text-align:center; margin-top:20%; } +.header-content .copy {font-size: 24px; line-height: 70px; } +.header-content .button { margin:0 auto;} +.header-content .dimmed { background: rgba(255, 255, 255, 0.4);} +.header-content .dimmed:hover { background: rgba(255, 255, 255, 1); } +.header-content .align-bottom {position: absolute; bottom: 0px;} +/* => SLIDE PREV AND NEXT ARROWS <= */ +.slider-prev, +.slider-next {text-indent:-9999px; width:60px;height:60px;background:url("../images/org_new_style/icons.png") -306px -264px no-repeat; position:absolute;top:50%; margin-top:-19px; z-index:999; opacity:.5; +-webkit-transition: all 0.3s ease-out; /* Saf3.2+, Chrome */-moz-transition: all 0.3s ease-out; /* FF4+ */ -ms-transition: all 0.3s ease-out; /* IE10? */ -o-transition: all 0.3s ease-out; /* Opera 10.5+ */ transition: all 0.3s ease-out;display: none} +.slider-prev{ left:50px; } +.slider-next { right:50px;background-position:-382px -264px;} +.slider-prev:hover,.slider-next:hover{opacity:1;} +/* => SLIDER NAV o o o <= */ +.slider-nav {position:absolute;bottom:5px;left:50%;list-style:none; overflow:hidden; padding:2px; z-index:10;margin: 0; } +.slider-nav li{ float:left; } +.slider-nav li a{ display:block;width:13px;height:13px;overflow:hidden; padding:0px; margin:5px; background:url("../images/org_new_style/icons.png") no-repeat -419px -219px; text-decoration:none; text-indent:-999px;} +.slider-nav li a:hover,.slider-nav li a.selected{background-position:-402px -219px;} +/* => HOLY SLIDES <= */ +.slider section {display: none;} +.slider section.first {display: block;} +.slider-sections, .slider-sections section {width: 806px; height: 600px; } +.slider-sections {margin: 0 auto; position: relative;} +.slider-sections section {position: absolute; top: 0; left: 0px; } +.header-content h2 {font:400 62px/1.2 "microsoft yahei", Tahoma, arial, sans-serif;color: #fff;margin: 0 0 26px; } +.header-content p {margin: 0 0 30px; font-size:28px; color:#fff;} +.header-content .centered-content{padding-top: 30px;padding-bottom: 10px;} +.button {float: left;width:800px;list-style: none; } +.button a { font-size: 15px;line-height: 18px; text-decoration: none;color:#FFF; padding: 12px 56px;display: block;width: auto;z-index: 2;border: none; -moz-border-radius: 25px;border-radius: 25px;cursor: pointer; margin:0 auto; width:35px;} +.button a:hover{color:#29156f;} + +/** box1 **/ +.box1{ width:100%; padding:70px 0;} +.content{ width:1200px; margin:0 auto;} +.box-top{ margin:0 auto; text-align:center; margin-bottom:45px; } +.box-title{ width:355px; height:67px; margin:0 auto; background:#29156f; color:#fff; text-align:center; font-size:40px; font-weight: lighter; margin-bottom:2px;} +.box-title-p{ font-size:20px; color:#999999;} +.row{ width:1200px; margin: 0 auto; } +.row-box1{ width:365px;} +.row-img{ margin-bottom:10px; width:365px; height:230px; display:block;} +.row-time{ color:#ffbd18; font-size:14px; font-weight:bold; line-height:1.9;} +.row-title{ font-size:16px; font-weight:bold; line-height:1.9;display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;} +.row-con { display:block; } +.row-con:hover{ color:#29156f; } +.row-txt{line-height:2.4; padding-bottom:10px; margin-bottom:10px; color:#888;} +.row-txt:hover{color:#29156f;} +.row-txt-line{border-bottom:1px solid #cccccc; width:365px;} +a.btn-more{ display:block; font-size:14px; width:110px; height:40px;-moz-border-radius: 3px; -webkit-border-radius: 3px; background:#ffbd18; color:#fff; text-align:center; line-height:3.0;} +a:hover.btn-more{ background:#29156f;} +.row-box2{ width:388px; border:1px solid #ccc; border-bottom:none;} +.row-con2 a{ display:block;padding:20px 10px; border-bottom:1px solid #ccc;} +.row-con2 a:hover{ background:#29156f; color:#fff;} +.row-con2 a:hover{ color:#fff;} +.row-txt2{line-height:2.4; color:#888;} +.row-txt2:hover{ color:#fff; } +/** 项目动态 **/ +.slider2 {position: relative;text-align: center;} +.slider2-left{ width:550px; margin-top:20px;} +.slider2-left h3{ font-size:18px; font-weight:bold; display:block; width:550px;white-space:nowrap; overflow:hidden; } +.slider2-left h3 span{color:#29156f; margin-right:20px;} +.slider2-left p{ display:block; margin-top:20px; font-size:14px; line-height:1.9; width:550px;} +.slider2-right{ width:600px; margin-top:20px;} +.rslides li {-webkit-backface-visibility: hidden;position: absolute; display: none; width: 100%;left:60px;top: 0; } +.rslides li:first-child {position: relative;display: block; float: left;} +.callbacks_tabs a:after { +content: "\f111"; +font-size: 0; +font-family: FontAwesome; +visibility: visible; +display: block; +width: 15px; +height: 15px; +display: inline-block; +background:url(../images/org_new_style/icons.png) no-repeat -100px -511px ; +} +.callbacks_here a:after{background:url(../images/org_new_style/icons.png) no-repeat -83px -511px ;} +.callbacks_tabs a{visibility:hidden;} +.callbacks_tabs li{display:inline-block;} +ul.callbacks_tabs.callbacks1_tabs {position:absolute;bottom: 7.3%;z-index: 999;left: -92%; display: block;} +/** 开源 **/ +.box2{ height:569px; padding:70px 0; width:100%; background:url(../images/org_new_style/bg.jpg) no-repeat; } +.row-box3{ width:380px;} +.row-title3{ width:290px; font-size:18px;white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-weight:bold; } +.box3{height:540px; width:100%; padding:70px 0; background:url(../images/org_new_style/bg2.jpg) no-repeat; } +.box-title-p3{font-size:14px; color:#999999;} +.row-img2{ margin-bottom:10px; width:380px; height:310px; display:block;} +/** 社区规则 **/ +.indexmaindiv{height:310px;margin:0px auto;width:1200px; } +.indexmaindiv1{margin-top:25px;} +.stylesgoleft{float:left;width:49px;height:47px;background:url(../images/org_new_style/icons.png) no-repeat -391px -360px; opacity:.5;margin:106px 20px 0px 0px;cursor:pointer;} +.stylesgoleft:hover{float:left;opacity:1;} +.playerdetail{width:240px;height:310px; } +.div.detailimg{width:240px;height:240px;} +.detailimg img{width:240px;height:240px;} +.teanames{font-size:18px; font-weight:bold;margin-top:10px;color:#000;} +.teadetail{font-size:14px; color:#999;margin-top:5px;} +.stylesgoright{float:left;width:49px;height:47px;background:url(../images/org_new_style/icons.png) no-repeat -393px -432px; opacity:.5;margin:106px 0px 0px 15px;cursor:pointer;} +.stylesgoright:hover{float:left;opacity:1;} +.teanames{ text-align:left;} +.maindiv1{float:left;width:1063px;height:310px;overflow:hidden;position:relative; } +.maindiv1 ul{position:absolute;left:0;top:0;} +.maindiv1 ul li{float:left;width:240px;height:310px;margin-left:21px; } +/** 活动专区 **/ +.con-left{ width:618px;} +.con-left-box{ margin-bottom:20px; height:96px; display:block;} +.con-left-img{ width:175px; height:96px;} +.con-left-txt{ width:360px; margin-left:15px; font-size:14px; color:#888; padding-top:8px; line-height:1.9;} +.con-left-txt:hover{color:#29156f;} +.con-left-pre{ margin-top:15px; } +a.con-back-btn{ display: block;width:25px;height:25px;background:url(../images/org_new_style/icons.png) no-repeat -38px -505px ;} +a.con-arrow-btn{ display: block;width:25px;height:25px;background:url(../images/org_new_style/icons.png) no-repeat -12px -505px ; opacity:.5;} +.con-right{ width:532px; height:170px; background:#f6f6f6 ; padding:25px;} +.con-right p{background: url(../images/org_new_style/con-right.gif) no-repeat 0 0;line-height:1.9; width:415px; padding:40px 0 0 20px; font-size:14px; color:#888; margin-left:20px;} +.con-r-img img{ border:3px solid #e6473b; -moz-border-radius: 50px; -webkit-border-radius: 50px;border-radius: 50px; display:block; width:67px; height:67px;} +.con-r-img img:hover{border:3px solid #29156f;} +.con-name{ font-size:18px; font-weight:bold; margin-top:5px;} +.con-r-img { text-align:center;} +.con-r-pre{ margin-top:20px;} +a.pre-arrow,a.pre-back{ display:block; width:25px; height:10px; background:#29156f; margin-left:5px;} +a.pre-back{ background:#888;} +/** footer **/ +.footer{ height:220px; background:#29156f; width:100%;} +.footer-con{ width:1200px; padding:65px 0 0 60px; margin:0 auto; text-align:center; font-size:14px; color:#fff;} +.footer-con ul{ display:block; width:430px; height:50px; margin:0 auto; } +.footer-con ul li a{font-size:18px; color:#fff; margin-right:35px; font-weight:bold;} + + + + + + + + + + + + + + From a9fd79ec633a877ed7aa68edb26cbf2b18532904 Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 28 Mar 2016 14:45:11 +0800 Subject: [PATCH 095/423] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/acitivities.html | 220 ++++++++++++++++++++++++ public/javascripts/wechat/wechat-dev.js | 48 ++++-- 2 files changed, 249 insertions(+), 19 deletions(-) create mode 100644 public/assets/wechat/acitivities.html diff --git a/public/assets/wechat/acitivities.html b/public/assets/wechat/acitivities.html new file mode 100644 index 000000000..87c697aba --- /dev/null +++ b/public/assets/wechat/acitivities.html @@ -0,0 +1,220 @@ + + + + react js + + + + + + + + + + + +

    + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/wechat/wechat-dev.js b/public/javascripts/wechat/wechat-dev.js index 9c5704b8c..56a95ac72 100644 --- a/public/javascripts/wechat/wechat-dev.js +++ b/public/javascripts/wechat/wechat-dev.js @@ -15,11 +15,13 @@ $(document).ready(function(){ var html=bt('t:result-list',{issues: data}); $('#container').prepend(html); + descToggle(); + } - var loadDataFromServer = function(id){ + var loadDataFromServer = function(page){ $.ajax({ - url: apiUrl + 'issues/' + id, + url: apiUrl + 'activities/' + page + "?openid=", dataType: 'json', success: function(data){ setTemplate(data.data); @@ -31,24 +33,32 @@ $(document).ready(function(){ }; - loadDataFromServer(299); + loadDataFromServer(0); + + var descToggle = function(){ + var postWidth = $(".post-wrapper").width(); + var titleWidth = postWidth - 80; + $(".post-title").css("maxWidth",titleWidth); + $(".post-all-content").each(function(){ + var postHeight = $(this).height(); + if (postHeight > 90){ + $(this).parent().next().css("display","block"); + $(this).parent().next().toggle(function(){ + $(this).text("点击隐藏"); + $(this).prev().css("height",postHeight); + },function(){ + $(this).text("点击展开"); + $(this).prev().css("height",90); + }); + } + }); + } + + var timeSpilt = function(){ + + } + - var postWidth = $(".post-wrapper").width(); - var titleWidth = postWidth - 80; - $(".post-title").css("maxWidth",titleWidth); - $(".post-all-content").each(function(){ - var postHeight = $(this).height(); - if (postHeight > 90){ - $(this).parent().next().css("display","block"); - $(this).parent().next().toggle(function(){ - $(this).text("点击隐藏"); - $(this).prev().css("height",postHeight); - },function(){ - $(this).text("点击展开"); - $(this).prev().css("height",90); - }); - } - }); }); From 9fc227d6197e371cca60ebe3e774323f9d4477e4 Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 28 Mar 2016 14:50:26 +0800 Subject: [PATCH 096/423] =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=BA=93=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/_resources_list.html.erb | 353 +++++++++++++++++- app/views/users/_user_resource_info.html.erb | 356 +------------------ 2 files changed, 353 insertions(+), 356 deletions(-) diff --git a/app/views/users/_resources_list.html.erb b/app/views/users/_resources_list.html.erb index c2b37f0e6..a545038f1 100644 --- a/app/views/users/_resources_list.html.erb +++ b/app/views/users/_resources_list.html.erb @@ -26,14 +26,349 @@ <% end %> <% end %> -
    + diff --git a/app/views/users/_user_resource_info.html.erb b/app/views/users/_user_resource_info.html.erb index bf36e4b38..bea78130a 100644 --- a/app/views/users/_user_resource_info.html.erb +++ b/app/views/users/_user_resource_info.html.erb @@ -37,350 +37,12 @@ - \ No newline at end of file + \ No newline at end of file From 33c9331c7b0a5c5ae2d6d5e13596c37112480b72 Mon Sep 17 00:00:00 2001 From: cxt Date: Mon, 28 Mar 2016 15:35:24 +0800 Subject: [PATCH 097/423] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=BA=E7=A7=81=E6=9C=89/=E5=85=AC=E5=BC=80=20=E8=AF=BE?= =?UTF-8?q?=E7=A8=8B=E5=A4=B4=E9=83=A8=E6=9C=AA=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_project_info.html.erb | 1 + app/views/layouts/base_courses.html.erb | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/_project_info.html.erb b/app/views/layouts/_project_info.html.erb index d94cbdcc7..30f527595 100644 --- a/app/views/layouts/_project_info.html.erb +++ b/app/views/layouts/_project_info.html.erb @@ -1,6 +1,7 @@ <% is_teacher = User.current.logged? && (User.current.admin? || User.current.allowed_to?(:as_teacher,@course)) %> <% teacher_num = TeacherAndAssistantCount(@course) %> <% student_num = studentCount(@course) %> +<% course_file_num = visable_attachemnts_incourse(@course).count %>