diff --git a/App/Console/Kernel.php b/App/Console/Kernel.php new file mode 100644 index 0000000..ab8f917 --- /dev/null +++ b/App/Console/Kernel.php @@ -0,0 +1,60 @@ +command('inspire') + // ->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + $this->registerModuleCommands(); + + require base_path('routes/console.php'); + } + + private function registerModuleCommands() + { + $modules = app()->make('modules'); + + foreach ($modules->getModulePaths() as $path) { + if (file_exists($path)) { + foreach (listDir($path) as $dir) { + $commandsDir = $path.DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR.'Commands'; + + $this->load($commandsDir); + } + } + } + } +} diff --git a/App/Exceptions/Handler.php b/App/Exceptions/Handler.php new file mode 100644 index 0000000..aab295b --- /dev/null +++ b/App/Exceptions/Handler.php @@ -0,0 +1,67 @@ +expectsJson()) { + return response()->json([ + 'success' => false, + 'data' => [], + 'message' => $exception->getMessage(), + ]); + } + + return parent::render($request, $exception); + } +} diff --git a/src/Http/Controllers/Controller.php b/App/Http/Controller.php similarity index 50% rename from src/Http/Controllers/Controller.php rename to App/Http/Controller.php index df0df6d..dff9c00 100644 --- a/src/Http/Controllers/Controller.php +++ b/App/Http/Controller.php @@ -1,45 +1,57 @@ json([ 'success' => $success, - 'data' => $data, + 'data' => $data, 'message' => $msg, ]); } + /** + * Prints a json response that would be identified as a redirect. + * + * @param $route + * @param null $msg + * + * @return \Illuminate\Http\JsonResponse + */ public function printRedirect($route, $msg = null) { return $this->printJson(true, ['redir' => $route], $msg); } - public function printModal($view) - { - return $this->printJson(true, ['content' => $view->render()]); - } - - public function printPartial($view, $msg = null, $target = null) - { - return $this->printJson(true, ['partial' => $view->render(), 'target' => Request::get('target', $target)], $msg); - } - + /** + * Returns a JsValidator object from FormRequest object. + * + * @param $validatorClass + * + * @throws \Exception + * + * @return JsValidator\JsValidator + */ public function jsValidator($validatorClass) { return JsValidatorFactory::create($validatorClass); diff --git a/App/Http/JsValidator/JsValidator.php b/App/Http/JsValidator/JsValidator.php new file mode 100644 index 0000000..5bedc72 --- /dev/null +++ b/App/Http/JsValidator/JsValidator.php @@ -0,0 +1,87 @@ +rules = collect($rules); + $this->attributes = collect($attributes); + + $this->processRules(); + } + + /** + * Process rules. + */ + private function processRules() + { + $this->rules = $this->rules->map(function ($rules, $element) { + return $this->processItemRules($rules); + }); + } + + /** + * Renders a set of rules in the Laravel json object format. + * + * @return string + */ + public function renderRules() + { + return json_encode($this->rules); + } + + /** + * Process form field rules. + * + * @param $rules + * + * @return \stdClass + */ + private function processItemRules($rules) + { + $rules = explode('|', $rules); + + $returned = new \stdClass(); + + foreach ($rules as $rule) { + $ruleParts = explode(':', $rule); + $rule = $ruleParts[0]; + $ruleOptions = isset($ruleParts[1]) ? explode(',', $ruleParts[1]) : null; + $method = 'rule'.ucfirst($rule); + + switch ($rule) { + case 'max': + $returned->maxLength = intval($ruleOptions[0]); + break; + + case 'min': + $returned->minLength = intval($ruleOptions[0]); + break; + + case 'between': + $returned->rangeLength = [intval($ruleOptions[0]), intval($ruleOptions[1])]; + break; + + case 'required': + $returned->required = true; + break; + + case 'email': + $returned->email = true; + break; + + case 'url': + $returned->url = true; + break; + } + } + + return $returned; + } +} diff --git a/App/Http/JsValidator/JsValidatorFactory.php b/App/Http/JsValidator/JsValidatorFactory.php new file mode 100644 index 0000000..79e2691 --- /dev/null +++ b/App/Http/JsValidator/JsValidatorFactory.php @@ -0,0 +1,28 @@ +rules(), $class->attributes()); + } +} diff --git a/App/Http/Kernel.php b/App/Http/Kernel.php new file mode 100644 index 0000000..3f52f85 --- /dev/null +++ b/App/Http/Kernel.php @@ -0,0 +1,84 @@ + [ + EncryptCookies::class, + AddQueuedCookiesToResponse::class, + StartSession::class, + AuthenticateSession::class, + ShareErrorsFromSession::class, + VerifyCsrfToken::class, + SubstituteBindings::class, + ], + + 'api' => [ + 'throttle:60,1', + 'bindings', + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => Authenticate::class, + 'reauth' => ReAuth::class, + //'auth.basic' => AuthenticateWithBasicAuth::class, + 'bindings' => SubstituteBindings::class, + 'can' => Authorize::class, + 'guest' => RedirectIfAuthenticated::class, + 'throttle' => ThrottleRequests::class, + ]; +} diff --git a/src/Http/Middleware/Ajax.php b/App/Http/Middleware/Ajax.php similarity index 70% rename from src/Http/Middleware/Ajax.php rename to App/Http/Middleware/Ajax.php index d153c32..6b8308d 100644 --- a/src/Http/Middleware/Ajax.php +++ b/App/Http/Middleware/Ajax.php @@ -10,14 +10,14 @@ class Ajax /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param \Closure $next - * @param string|null $guard + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param string|null $guard + * * @return mixed */ public function handle($request, Closure $next, $guard = null) { - if (!$request->ajax()) { abort(404); } diff --git a/src/Http/Middleware/Authenticate.php b/App/Http/Middleware/Authenticate.php similarity index 70% rename from src/Http/Middleware/Authenticate.php rename to App/Http/Middleware/Authenticate.php index 3742f9c..448b06c 100644 --- a/src/Http/Middleware/Authenticate.php +++ b/App/Http/Middleware/Authenticate.php @@ -2,17 +2,18 @@ namespace Collejo\App\Http\Middleware; -use Closure; use Auth; +use Closure; class Authenticate { /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param \Closure $next - * @param string|null $guard + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param string|null $guard + * * @return mixed */ public function handle($request, Closure $next, $guard = null) @@ -20,10 +21,9 @@ public function handle($request, Closure $next, $guard = null) if (Auth::guard($guard)->guest()) { if ($request->ajax() || $request->wantsJson()) { return response('Unauthorized.', 401); - } else { - - return redirect()->guest(route('auth.login')); } + + return redirect()->guest(route('login')); } return $next($request); diff --git a/App/Http/Middleware/CheckInstallation.php b/App/Http/Middleware/CheckInstallation.php new file mode 100644 index 0000000..f940477 --- /dev/null +++ b/App/Http/Middleware/CheckInstallation.php @@ -0,0 +1,26 @@ +isInstalled()) { + return response(view('base::setup.incomplete')); + } + + return $next($request); + } +} diff --git a/src/Http/Middleware/EncryptCookies.php b/App/Http/Middleware/EncryptCookies.php similarity index 60% rename from src/Http/Middleware/EncryptCookies.php rename to App/Http/Middleware/EncryptCookies.php index a59816e..48a49c2 100644 --- a/src/Http/Middleware/EncryptCookies.php +++ b/App/Http/Middleware/EncryptCookies.php @@ -2,9 +2,9 @@ namespace Collejo\App\Http\Middleware; -use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter; +use Illuminate\Cookie\Middleware\EncryptCookies as Middleware; -class EncryptCookies extends BaseEncrypter +class EncryptCookies extends Middleware { /** * The names of the cookies that should not be encrypted. @@ -12,6 +12,6 @@ class EncryptCookies extends BaseEncrypter * @var array */ protected $except = [ - // + 'collejo-tz', ]; } diff --git a/App/Http/Middleware/JsonRequest.php b/App/Http/Middleware/JsonRequest.php new file mode 100644 index 0000000..d32d056 --- /dev/null +++ b/App/Http/Middleware/JsonRequest.php @@ -0,0 +1,30 @@ +getMethod(), self::PARSED_METHODS)) { + $request->merge((array) json_decode($request->getContent())); + } + + return $next($request); + } +} diff --git a/src/Http/Middleware/ReAuth.php b/App/Http/Middleware/ReAuth.php similarity index 53% rename from src/Http/Middleware/ReAuth.php rename to App/Http/Middleware/ReAuth.php index d4191d9..8376969 100644 --- a/src/Http/Middleware/ReAuth.php +++ b/App/Http/Middleware/ReAuth.php @@ -2,8 +2,10 @@ namespace Collejo\App\Http\Middleware; -use Closure; use Auth; +use Closure; +use Collejo\App\Http\JsValidator\JsValidatorFactory; +use Collejo\App\Modules\Auth\Http\Requests\ReauthRequest; use Session; class ReAuth @@ -11,29 +13,32 @@ class ReAuth /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param \Closure $next - * @param string|null $guard + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param string|null $guard + * * @return mixed */ public function handle($request, Closure $next, $guard = null) { $token = Session::get('reauth-token'); - $ttl = config('collejo.auth.reauth_ttl'); - if (!is_null($ttl) && (is_null($token) - || ($token && $token['email'] != Auth::user()->email) - || ($token && $token['ts'] + $ttl < time()))) { + $ttl = config('collejo.tweaks.reauth_ttl'); + if (!is_null($ttl) && (is_null($token) + || ($token && $token['email'] != Auth::user()->email) + || ($token && $token['ts'] + $ttl < time()))) { if ($request->ajax()) { return response()->json([ 'success' => false, - 'data' => ['redir' => $request->getRequestUri()], - 'message' => trans('auth::auth.reauth_expired') + 'data' => ['redir' => $request->getRequestUri()], + 'message' => trans('auth::auth.reauth_expired'), ]); } - return response(view('auth::reauth')); + return response(view('auth::reauth', [ + 'reauth_form_validator' => JsValidatorFactory::create(ReauthRequest::class), + ])); } return $next($request); diff --git a/src/Http/Middleware/RedirectIfAuthenticated.php b/App/Http/Middleware/RedirectIfAuthenticated.php similarity index 67% rename from src/Http/Middleware/RedirectIfAuthenticated.php rename to App/Http/Middleware/RedirectIfAuthenticated.php index c57a4b0..05bb921 100644 --- a/src/Http/Middleware/RedirectIfAuthenticated.php +++ b/App/Http/Middleware/RedirectIfAuthenticated.php @@ -3,16 +3,17 @@ namespace Collejo\App\Http\Middleware; use Closure; -use Auth; +use Illuminate\Support\Facades\Auth; class RedirectIfAuthenticated { /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param \Closure $next - * @param string|null $guard + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param string|null $guard + * * @return mixed */ public function handle($request, Closure $next, $guard = null) diff --git a/App/Http/Middleware/TrimStrings.php b/App/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..c410696 --- /dev/null +++ b/App/Http/Middleware/TrimStrings.php @@ -0,0 +1,18 @@ +authorize; + } + + /** + * Formats form validation errors. + * + * @param Validator $validator + * + * @return array + */ + public function formatErrors(Validator $validator) + { + return [ + 'success' => false, + 'data' => [ + 'errors' => $validator->errors()->getMessages(), + ], + ]; + } + + /** + * Returns a json response. + * + * @param array $errors + * + * @return $this|JsonResponse + */ + public function response(array $errors) + { + return new JsonResponse($errors, 422); + } +} diff --git a/App/Http/Tests/Unit/JsValidatorTest.php b/App/Http/Tests/Unit/JsValidatorTest.php new file mode 100644 index 0000000..82e8f3c --- /dev/null +++ b/App/Http/Tests/Unit/JsValidatorTest.php @@ -0,0 +1,36 @@ +assertFalse(false); + $this->assertTrue($validator instanceof JsValidator); + } +} + +class TestableRequest extends Request +{ + public function rules() + { + return [ + 'name' => 'required', + ]; + } + + public function attributes() + { + return [ + 'name' => 'Batch Name', + ]; + } +} diff --git a/src/Console/Commands/AdminCreate.php b/App/Modules/ACL/Commands/AdminCreate.php similarity index 79% rename from src/Console/Commands/AdminCreate.php rename to App/Modules/ACL/Commands/AdminCreate.php index 3300046..081dc8b 100644 --- a/src/Console/Commands/AdminCreate.php +++ b/App/Modules/ACL/Commands/AdminCreate.php @@ -1,9 +1,9 @@ userRepository = $userRepository; + } + /** * Execute the console command. * @@ -29,23 +36,21 @@ class AdminCreate extends Command public function handle() { $name = $this->ask('Enter name'); - $email = false; + $email = null; - do{ + do { $email = $this->ask('Enter email'); if (!$this->isValidEmail($email)) { $this->error('Enter a valid email address'); } - } while (!$this->isValidEmail($email)); - do{ + do { if ($this->accountExists($email)) { $this->error('There is already an account by this email'); $email = $this->ask('Enter email'); } - } while ($this->accountExists($email)); $password = $this->secret('Enter password'); @@ -53,20 +58,27 @@ public function handle() $this->userRepository->createAdminUser($name, $email, $password); } + /** + * Checks if the given email is valid. + * + * @param $email + * + * @return mixed + */ private function isValidEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); } + /** + * Checks if there's already an account by the given email. + * + * @param $email + * + * @return bool + */ private function accountExists($email) { return (bool) $this->userRepository->findByEmail($email); } - - public function __construct(UserRepository $userRepository) - { - parent::__construct(); - - $this->userRepository = $userRepository; - } } diff --git a/App/Modules/ACL/Commands/AdminPermissions.php b/App/Modules/ACL/Commands/AdminPermissions.php new file mode 100644 index 0000000..e998263 --- /dev/null +++ b/App/Modules/ACL/Commands/AdminPermissions.php @@ -0,0 +1,53 @@ +make('modules'); + + foreach ($modules->getModulePaths() as $path) { + if (file_exists($path)) { + foreach (listDir($path) as $dir) { + if (is_dir($path.'/'.$dir)) { + $provider = 'Collejo\App\Modules\\'.$dir.'\Providers\\'.$dir.'ModuleServiceProvider'; + $this->processModule($provider); + } + } + } + } + } + + private function processModule($providerName) + { + $provider = new $providerName(app()); + + $this->info('Processing : '.$provider->getModuleName()); + + $provider->createPermissions(); + } +} diff --git a/App/Modules/ACL/Commands/AdminReset.php b/App/Modules/ACL/Commands/AdminReset.php new file mode 100644 index 0000000..ce34f07 --- /dev/null +++ b/App/Modules/ACL/Commands/AdminReset.php @@ -0,0 +1,87 @@ +userRepository = $userRepository; + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $email = null; + + do { + $email = $this->ask('Enter email'); + + if (!$this->isValidEmail($email)) { + $this->error('Enter a valid email address'); + } + } while (!$this->isValidEmail($email)); + + do { + if (!$this->accountExists($email)) { + $this->error('There are no accounts with that email'); + $email = $this->ask('Enter email'); + } + } while (!$this->accountExists($email)); + + $password = $this->secret('Enter new password'); + + $user = $this->userRepository->findByEmail($email); + + $this->userRepository->update([ + 'password' => $password, + ], $user->id); + } + + /** + * Checks if the given email is valid. + * + * @param $email + * + * @return mixed + */ + private function isValidEmail($email) + { + return filter_var($email, FILTER_VALIDATE_EMAIL); + } + + /** + * Checks if there's already an account by the given email. + * + * @param $email + * + * @return bool + */ + private function accountExists($email) + { + return (bool) $this->userRepository->findByEmail($email); + } +} diff --git a/App/Modules/ACL/Contracts/UserRepository.php b/App/Modules/ACL/Contracts/UserRepository.php new file mode 100644 index 0000000..003fab3 --- /dev/null +++ b/App/Modules/ACL/Contracts/UserRepository.php @@ -0,0 +1,57 @@ + 'role_user.role_id', + 'name' => 'CONCAT(users.first_name, \' \', users.last_name)', + ]; + + protected $joins = [ + ['role_user', 'users.id', 'role_user.user_id'], + ]; + + protected $form = [ + 'role' => [ + 'type' => 'select', + 'itemsCallback' => 'userRoles', + ], + ]; + + public function callbackUserRoles() + { + return app()->make(UserRepository::class)->getRoles()->get(); + } +} diff --git a/App/Modules/ACL/Http/Controllers/ACLController.php b/App/Modules/ACL/Http/Controllers/ACLController.php new file mode 100644 index 0000000..8d77bd6 --- /dev/null +++ b/App/Modules/ACL/Http/Controllers/ACLController.php @@ -0,0 +1,267 @@ +authorize('view_user_account_info'); + + return view('acl::view_user_account', [ + 'user' => $this->userRepository->findUser($userId), + ]); + } + + public function getUserAccountEdit($userId) + { + $this->authorize('edit_user_account_info'); + + return view('acl::edit_user_account', [ + 'user' => present($this->userRepository->findUser($userId), UserAccountPresenter::class), + 'user_form_validator' => $this->jsValidator(UpdateUserAccountRequest::class), + ]); + } + + public function postUserAccountEdit(UpdateUserAccountRequest $request, $userId) + { + $this->authorize('edit_user_account_info'); + + $this->userRepository->update($request->all(), $userId); + + return $this->printJson(true, [], trans('acl::user.user_updated')); + } + + /** + * @param $userId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getUserRolesView($userId) + { + $this->authorize('view_user_account_info'); + + return view('acl::view_user_roles', [ + 'user' => $this->userRepository->findUser($userId), + ]); + } + + /** + * @param $userId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getUserRolesEdit($userId) + { + $this->authorize('edit_user_account_info'); + + return view('acl::edit_user_roles', [ + 'user' => $this->userRepository->findUser($userId, 'roles'), + 'roles' => $this->userRepository->getRoles()->get(), + ]); + } + + /** + * @param Request $request + * @param $userId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postUserRolesEdit(Request $request, $userId) + { + $this->authorize('edit_user_account_info'); + + $this->userRepository->assignRolesToUser($request::get('roles', []), $userId); + + return $this->printJson(true, [], trans('acl::user.user_updated')); + } + + /** + * Create user and redirect to the new user details. + * + * @param CreateUserRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postNewUser(CreateUserRequest $request) + { + $this->authorize('create_user_accounts'); + + $user = $this->userRepository->create($request->all()); + + return $this->printRedirect(route('user.details.edit', $user->id)); + } + + /** + * Returns the view for the create user form. + * + * @throws \Exception + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getNewUser() + { + $this->authorize('create_user_accounts'); + + return view('acl::edit_user_details', [ + 'user' => null, + 'user_form_validator' => $this->jsValidator(CreateUserRequest::class), + ]); + } + + /** + * Updates a user and displays a message. + * + * @param UpdateUserRequest $request + * @param $userId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postUserDetailsEdit(UpdateUserRequest $request, $userId) + { + $this->authorize('edit_user_account_info'); + + $this->userRepository->update($request->all(), $userId); + + return $this->printJson(true, [], trans('acl::user.user_updated')); + } + + /** + * Returns the view for user details. + * + * @param $userId + * + * @throws \Exception + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getUserDetailsEdit($userId) + { + $this->authorize('edit_user_account_info'); + + return view('acl::edit_user_details', [ + 'user' => $this->userRepository->findUser($userId), + 'user_form_validator' => $this->jsValidator(UpdateUserRequest::class), + ]); + } + + /** + * Returns the view for user details. + * + * @param $userId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getUserDetailsView($userId) + { + $this->authorize('view_user_account_info'); + + return view('acl::view_user_details', [ + 'user' => $this->userRepository->findUser($userId), + ]); + } + + /** + * Returns a list of available roles. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getPermissionsManage() + { + $this->authorize('add_remove_permission_to_role'); + + return view('acl::roles_list', [ + 'roles' => $this->userRepository->getRoles()->with('permissions')->paginate(), + ]); + } + + /** + * Get the Role edit form. + * + * @param $roleId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getRoleEdit($roleId) + { + $this->authorize('add_edit_role'); + + return view('acl::edit_role', [ + 'role' => $this->userRepository->findRole($roleId)->load('permissions'), + 'permissions' => $this->userRepository->getPermissions()->where('parent_id', null)->with('children')->get(), + 'role_form_validator' => $this->jsValidator(UpdateUserRequest::class), + ]); + } + + /** + * Save a role configuration. + * + * @param Request $request + * @param $roleId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postRoleEdit(Request $request, $roleId) + { + $this->authorize('add_edit_role'); + + $this->userRepository->assignPermissionsToRole($request::get('permissions', []), $roleId); + + return $this->printJson(true, [], trans('acl::role.role_updated')); + } + + /** + * Returns the UI for managing users. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getUserManage(UserListCriteria $criteria) + { + $this->authorize('view_user_account_info'); + + return view('acl::users_list', [ + 'criteria' => $criteria, + 'users' => present($this->userRepository + ->getUsers($criteria) + ->with('roles') + ->paginate(), UserListPresenter::class), + ]); + } + + public function __construct(UserRepository $userRepository) + { + $this->userRepository = $userRepository; + } +} diff --git a/App/Modules/ACL/Http/Requests/CreateUserRequest.php b/App/Modules/ACL/Http/Requests/CreateUserRequest.php new file mode 100644 index 0000000..105dca7 --- /dev/null +++ b/App/Modules/ACL/Http/Requests/CreateUserRequest.php @@ -0,0 +1,26 @@ + 'required', + 'email' => 'required|email|unique:users,email,'.$this->json('id'), + 'date_of_birth' => 'date', + ]; + } + + public function attributes() + { + return [ + 'first_name' => trans('acl::user.first_name'), + 'email' => trans('acl::user.email'), + 'date_of_birth' => trans('acl::user.date_of_birth'), + ]; + } +} diff --git a/App/Modules/ACL/Http/Requests/UpdateUserAccountRequest.php b/App/Modules/ACL/Http/Requests/UpdateUserAccountRequest.php new file mode 100644 index 0000000..32499e7 --- /dev/null +++ b/App/Modules/ACL/Http/Requests/UpdateUserAccountRequest.php @@ -0,0 +1,24 @@ + 'required|email|unique:users,email,'.$this->json('id'), + 'password' => '', + ]; + } + + public function attributes() + { + return [ + 'email' => trans('acl::user.email'), + 'password' => trans('acl::user.password'), + ]; + } +} diff --git a/App/Modules/ACL/Http/Requests/UpdateUserRequest.php b/App/Modules/ACL/Http/Requests/UpdateUserRequest.php new file mode 100644 index 0000000..e135b12 --- /dev/null +++ b/App/Modules/ACL/Http/Requests/UpdateUserRequest.php @@ -0,0 +1,22 @@ +rules(); + } + + public function attributes() + { + $createRequest = new CreateUserRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/ACL/Http/menus.php b/App/Modules/ACL/Http/menus.php new file mode 100644 index 0000000..be5bbcb --- /dev/null +++ b/App/Modules/ACL/Http/menus.php @@ -0,0 +1,11 @@ +setParent('administration') + ->setPath('users.manage') + ->setPermission('create_admin'); + +Menu::create('permissions.manage', trans('acl::menu.user_roles')) + ->setParent('administration') + ->setPath('permissions.manage') + ->setPermission('add_remove_permission_to_role'); diff --git a/App/Modules/ACL/Http/routes.php b/App/Modules/ACL/Http/routes.php new file mode 100644 index 0000000..c27ebf8 --- /dev/null +++ b/App/Modules/ACL/Http/routes.php @@ -0,0 +1,42 @@ + 'dashboard', 'middleware' => ['auth', 'reauth']], function () { + Route::group(['prefix' => 'users'], function () { + Route::get('manage', 'ACLController@getUserManage')->name('users.manage'); + }); + + Route::group(['prefix' => 'user'], function () { + Route::get('{id}/details/view', 'ACLController@getUserDetailsView')->name('user.details.view'); + + Route::get('{id}/details/edit', 'ACLController@getUserDetailsEdit')->name('user.details.edit'); + + Route::post('{id}/details/edit', 'ACLController@postUserDetailsEdit'); + + Route::get('{id}/roles/view', 'ACLController@getUserRolesView')->name('user.roles.view'); + + Route::get('{id}/roles/edit', 'ACLController@getUserRolesEdit')->name('user.roles.edit'); + + Route::post('{id}/roles/edit', 'ACLController@postUserRolesEdit'); + + Route::get('{id}/account/view', 'ACLController@getUserAccountView')->name('user.account.view'); + + Route::get('{id}/account/edit', 'ACLController@getUserAccountEdit')->name('user.account.edit'); + + Route::post('{id}/account/edit', 'ACLController@postUserAccountEdit'); + + Route::get('new', 'ACLController@getNewUser')->name('user.new'); + Route::post('new', 'ACLController@postNewUser'); + }); + + Route::group(['prefix' => 'permissions'], function () { + Route::get('manage', 'ACLController@getPermissionsManage')->name('permissions.manage'); + }); + + Route::group(['prefix' => 'role'], function () { + Route::get('new', 'ACLController@getRoleNew')->name('role.new'); + + Route::get('{id}/edit', 'ACLController@getRoleEdit')->name('role.edit'); + + Route::post('{id}/edit', 'ACLController@postRoleEdit'); + }); +}); diff --git a/src/Models/Address.php b/App/Modules/ACL/Models/Address.php similarity index 52% rename from src/Models/Address.php rename to App/Modules/ACL/Models/Address.php index 0f7a907..44ac9fe 100644 --- a/src/Models/Address.php +++ b/App/Modules/ACL/Models/Address.php @@ -1,22 +1,24 @@ 'boolean']; + /** + * Returns the User of this Address. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ public function user() { - return $this->belongsTo(User::class); + return $this->belongsTo(User::class); } - } diff --git a/App/Modules/ACL/Models/Permission.php b/App/Modules/ACL/Models/Permission.php new file mode 100644 index 0000000..846595a --- /dev/null +++ b/App/Modules/ACL/Models/Permission.php @@ -0,0 +1,54 @@ +belongsToMany(Role::class); + } + + /** + * Returns the child Permissions of this Permission. + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function children() + { + return $this->hasMany(self::class, 'parent_id', 'id'); + } + + /** + * Returns the parent Permission of this Permission. + * + * @return \Illuminate\Database\Eloquent\Relations\HasOne + */ + public function parent() + { + return $this->hasOne(self::class, 'id', 'parent_id'); + } + + /** + * Returns Permissions name. + * + * @return mixed + */ + public function getNameAttribute() + { + return str_replace('_', ' ', ucfirst($this->permission)); + } +} diff --git a/App/Modules/ACL/Models/Role.php b/App/Modules/ACL/Models/Role.php new file mode 100644 index 0000000..6e896b6 --- /dev/null +++ b/App/Modules/ACL/Models/Role.php @@ -0,0 +1,47 @@ +role)); + } + + /** + * Returns a collection of Users for this Role. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ + public function users() + { + return $this->belongsToMany(User::class); + } + + /** + * Returns a collection of Permissions for this Role. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ + public function permissions() + { + return $this->belongsToMany(Permission::class); + } +} diff --git a/src/Traits/CommonUserPropertiesTrait.php b/App/Modules/ACL/Models/Traits/CommonUserPropertiesTrait.php similarity index 55% rename from src/Traits/CommonUserPropertiesTrait.php rename to App/Modules/ACL/Models/Traits/CommonUserPropertiesTrait.php index 685127b..0bae24c 100644 --- a/src/Traits/CommonUserPropertiesTrait.php +++ b/App/Modules/ACL/Models/Traits/CommonUserPropertiesTrait.php @@ -1,44 +1,43 @@ -belongsTo(User::class); - } - - public function getNameAttribute() - { - return $this->user->name; - } - - public function getFirstNameAttribute() - { - return $this->user->first_name; - } - - public function getLastNameAttribute() - { - return $this->user->last_name; - } - - public function getDateOfBirthAttribute() - { - return $this->user->date_of_birth; - } - - public function getEmailAttribute() - { - return $this->user->email; - } - - public function getAddressesAttribute() - { - return $this->user->addresses; - } - -} \ No newline at end of file +belongsTo(User::class); + } + + public function getNameAttribute() + { + return $this->user->name; + } + + public function getFirstNameAttribute() + { + return $this->user->first_name; + } + + public function getLastNameAttribute() + { + return $this->user->last_name; + } + + public function getDateOfBirthAttribute() + { + return $this->user->date_of_birth; + } + + public function getEmailAttribute() + { + return $this->user->email; + } + + public function getAddressesAttribute() + { + return $this->user->addresses; + } +} diff --git a/src/Models/User.php b/App/Modules/ACL/Models/User.php similarity index 51% rename from src/Models/User.php rename to App/Modules/ACL/Models/User.php index 1533d8c..8930bc4 100644 --- a/src/Models/User.php +++ b/App/Modules/ACL/Models/User.php @@ -1,47 +1,62 @@ permissions->where('permission', $permission)->count(); } + /** + * Determines if the given role is assigned to the User. + * + * @param $role + * + * @return bool + */ public function hasRole($role) { return (bool) $this->roles->where('role', $role)->count(); } + /** + * Concat User's name attributes to form a single attribute. + * + * @return string + */ public function getNameAttribute() { - return $this->first_name . ' ' . $this->last_name; + return $this->first_name.' '.$this->last_name; } + /** + * Get all permissions assigned to this User. + * + * @return mixed + */ public function getPermissionsAttribute() { - return Cache::remember('user-perms:' . $this->id, config('collejo.caching.user_permissions'), function(){ - return Permission::join('permission_role', 'permission_role.permission_id', '=' ,'permissions.id') + return Cache::remember('user-perms:'.$this->id, config('collejo.tweaks.user_permissions_cache_ttl'), function () { + return Permission::join('permission_role', 'permission_role.permission_id', '=', 'permissions.id') ->join('roles', 'permission_role.role_id', '=', 'roles.id') ->join('role_user', 'permission_role.role_id', '=', 'role_user.role_id') ->where('role_user.user_id', $this->id) @@ -49,28 +64,13 @@ public function getPermissionsAttribute() }); } + /** + * Returns Roles assigned to this User. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ public function roles() { - return $this->belongsToMany(Role::class); - } - - public function student() - { - return $this->hasOne(Student::class); - } - - public function employee() - { - return $this->hasOne(Employee::class); - } - - public function guardian() - { - return $this->hasOne(Guardian::class); - } - - public function addresses() - { - return $this->hasMany(Address::class); + return $this->belongsToMany(Role::class); } } diff --git a/App/Modules/ACL/Models/factories/Address.php b/App/Modules/ACL/Models/factories/Address.php new file mode 100644 index 0000000..4225ab3 --- /dev/null +++ b/App/Modules/ACL/Models/factories/Address.php @@ -0,0 +1,15 @@ +define(Collejo\App\Modules\ACL\Models\Address::class, function (Faker\Generator $faker) { + return [ + 'full_name' => $faker->name, + 'user_id' => $faker->name, + 'address' => $faker->address, + 'city' => $faker->city, + 'postal_code' => $faker->zip, + 'phone' => $faker->phone, + ]; +}); diff --git a/App/Modules/ACL/Models/factories/Permission.php b/App/Modules/ACL/Models/factories/Permission.php new file mode 100644 index 0000000..b7e2094 --- /dev/null +++ b/App/Modules/ACL/Models/factories/Permission.php @@ -0,0 +1,11 @@ +define(Collejo\App\Modules\ACL\Models\Permission::class, function (Faker\Generator $faker) { + return [ + 'module' => 'test', + 'permission' => $faker->randomLetter.$faker->time('H:i:s'), + ]; +}); diff --git a/App/Modules/ACL/Models/factories/Role.php b/App/Modules/ACL/Models/factories/Role.php new file mode 100644 index 0000000..b64faee --- /dev/null +++ b/App/Modules/ACL/Models/factories/Role.php @@ -0,0 +1,10 @@ +define(Collejo\App\Modules\ACL\Models\Role::class, function (Faker\Generator $faker) { + return [ + 'role' => $faker->randomLetter.$faker->time('H:i:s'), + ]; +}); diff --git a/App/Modules/ACL/Models/factories/User.php b/App/Modules/ACL/Models/factories/User.php new file mode 100644 index 0000000..e8170f3 --- /dev/null +++ b/App/Modules/ACL/Models/factories/User.php @@ -0,0 +1,15 @@ +define(Collejo\App\Modules\ACL\Models\User::class, function (Faker\Generator $faker) { + return [ + 'email' => $faker->safeEmail, + 'password' => Hash::make('123'), + 'remember_token' => null, + 'date_of_birth' => $faker->dateTimeThisDecade, + 'first_name' => $faker->firstName, + 'last_name' => $faker->lastName, + ]; +}); diff --git a/App/Modules/ACL/Presenters/UserAccountPresenter.php b/App/Modules/ACL/Presenters/UserAccountPresenter.php new file mode 100644 index 0000000..d31fd01 --- /dev/null +++ b/App/Modules/ACL/Presenters/UserAccountPresenter.php @@ -0,0 +1,16 @@ +app->bind(UserRepositoryContract::class, UserRepository::class); + $this->app->bind(UserListCriteria::class); + } + + /** + * Returns an array of permissions for the current module. + * + * @return array + */ + public function getPermissions() + { + return [ + 'create_admin' => [], + 'add_remove_permission_to_role' => ['add_edit_role'], + 'view_user_account_info' => ['create_user_accounts', 'edit_user_account_info', 'reset_user_password', 'disable_user'], + ]; + } +} diff --git a/App/Modules/ACL/Repositories/UserRepository.php b/App/Modules/ACL/Repositories/UserRepository.php new file mode 100644 index 0000000..3934c89 --- /dev/null +++ b/App/Modules/ACL/Repositories/UserRepository.php @@ -0,0 +1,354 @@ +create([ + 'first_name' => $name, + 'email' => $email, + 'password' => $password, + ]); + + $this->addRoleToUser($user, $this->getRoleByName('admin')); + + return $user; + } + + /** + * Returns a collection of admin users. + * + * @return mixed + */ + public function getAdminUsers() + { + return $this->getRoleByName('admin')->users; + } + + /** + * Sync user roles with the given User model. + * + * @param User $user + * @param array $roleNames + */ + public function syncUserRoles(User $user, array $roleNames) + { + $roleIds = Role::whereIn('role', $roleNames)->get(['id'])->pluck('id')->all(); + + $this->assignRolesToUser($roleIds, $user->id); + } + + /** + * @param $user + * @param $roleIds + */ + public function assignRolesToUser(array $roleIds, $userId) + { + $this->findUser($userId)->roles()->sync($this->createPivotIds($roleIds)); + } + + /** + * Adds the given Role model to the User model. + * + * @param User $user + * @param Role $role + */ + public function addRoleToUser(User $user, Role $role) + { + if (!$this->userHasRole($user, $role)) { + $user->roles()->attach($role, ['id' => $this->newUUID()]); + } + } + + /** + * Checks if the given User model has the given Role model. + * + * @param User $user + * @param Role $role + * + * @return mixed + */ + public function userHasRole(User $user, Role $role) + { + return $user->hasRole($role->role); + } + + /** + * Assign an array of permission ids to the given Role. + * + * @param array $permissionIds + * @param $roleId + */ + public function assignPermissionsToRole(array $permissionIds, $roleId) + { + $this->findRole($roleId)->permissions()->sync($this->createPivotIds($permissionIds)); + } + + /** + * Syncs given role's permissions, optionally a module name is supported. + * + * @param Role $role + * @param array $permissions + * @param null $module + */ + public function syncRolePermissions(Role $role, array $permissions, $module = null) + { + if (!is_null($module)) { + $otherPermissions = $role->permissions() + ->where('module', '!=', strtolower($module))->get() + ->pluck('permission')->all(); + + $permissions = array_merge($otherPermissions, $permissions); + } + + $permissionIds = Permission::whereIn('permission', (array) $permissions)->get(['id']) + ->pluck('id')->all(); + + $role->permissions()->sync($this->createPivotIds($permissionIds)); + } + + /** + * Adds a given Permission to the given Role. + * + * @param Role $role + * @param Permission $permission + */ + public function addPermissionToRole(Role $role, Permission $permission) + { + if (!$this->roleHasPermission($role, $permission)) { + $role->permissions()->attach($permission, ['id' => $this->newUUID()]); + } + } + + /** + * Checks of the given Permission is in the given Role. + * + * @param Role $role + * @param Permission $permission + * + * @return mixed + */ + public function roleHasPermission(Role $role, Permission $permission) + { + return $role->permissions->contains($permission->id); + } + + /** + * Creates a Permission if it's not in the database. + * + * @param $permission + * @param null $module + * + * @return mixed + */ + public function createPermissionIfNotExists($permission, $module = null) + { + $perm = $this->getPermissionByName($permission); + + if (is_null($perm)) { + $perm = Permission::create(['permission' => $permission, 'module' => $module]); + } + + return $perm; + } + + /** + * Soft deletes a Role. + * + * @param $roleId + */ + public function disableRole($roleId) + { + $this->findRole($roleId)->delete(); + } + + /** + * Undo a soft deleted Role. + * + * @param $roleId + */ + public function enableRole($roleId) + { + Role::withTrashed()->findOrFail($roleId)->restore(); + } + + /** + * Returns a Role by it's name. + * + * @param $name + * + * @return mixed + */ + public function getRoleByName($name) + { + return Role::where('role', $name)->first(); + } + + /** + * Returns a Permission by it's name. + * + * @param $name + * + * @return mixed + */ + public function getPermissionByName($name) + { + return Permission::where('permission', $name)->first(); + } + + /** + * Returns an array of Permissions for the given module. + * + * @param $name + * + * @return mixed + */ + public function getPermissionsByModule($name) + { + return Permission::where('module', strtolower($name))->get(); + } + + /** + * Creates a Role if it's not in the database. + * + * @param $roleName + * + * @return mixed + */ + public function createRoleIfNotExists($roleName) + { + if (is_null($role = $this->getRoleByName($roleName))) { + $role = Role::create(['role' => $roleName]); + } + + return $role; + } + + /** + * Returns a collection for Users. + * + * @param UserListCriteria $criteria + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getUsers(UserListCriteria $criteria) + { + return $this->search($criteria); + } + + /** + * Returns a collection for Roles. + * + * @return Role + */ + public function getRoles() + { + return new Role(); + } + + /** + * Returns a collection for Permissions. + * + * @return Permissions + */ + public function getPermissions() + { + return new Permission(); + } + + /** + * Returns a Role by id. + * + * @param $id + * + * @return mixed + */ + public function findRole($id) + { + return Role::findOrFail($id); + } + + /** + * Update a User by id. + * + * @param array $attributes + * @param $id + * + * @return mixed + */ + public function update(array $attributes, $id) + { + if (isset($attributes['password'])) { + if (!empty($attributes['password'])) { + $attributes['password'] = Hash::make($attributes['password']); + } else { + unset($attributes['password']); + } + } + + return User::findOrFail($id)->update($attributes); + } + + /** + * Creates a new User by given details. + * + * @param array $attributes + * + * @return mixed + */ + public function create(array $attributes) + { + if (isset($attributes['password'])) { + $attributes['password'] = Hash::make($attributes['password']); + } + + return User::create($this->parseFillable($attributes, User::class)); + } + + /** + * Returns a user by the given email. + * + * @param $email + * + * @return mixed + */ + public function findByEmail($email) + { + return User::where('email', $email)->first(); + } + + /** + * Find a user by id. + * + * @param $id + * + * @return mixed + */ + public function findUser($id, $with = null) + { + if ($with) { + return User::with($with)->findOrFail($id); + } + + return User::findOrFail($id); + } +} diff --git a/App/Modules/ACL/Seeder/AdminUserSeeder.php b/App/Modules/ACL/Seeder/AdminUserSeeder.php new file mode 100644 index 0000000..b7aa485 --- /dev/null +++ b/App/Modules/ACL/Seeder/AdminUserSeeder.php @@ -0,0 +1,19 @@ +create(); + } +} diff --git a/App/Modules/ACL/Tests/Http/ACLControllerTest.php b/App/Modules/ACL/Tests/Http/ACLControllerTest.php new file mode 100644 index 0000000..e53532c --- /dev/null +++ b/App/Modules/ACL/Tests/Http/ACLControllerTest.php @@ -0,0 +1,58 @@ +runDatabaseMigrations(); + + $user = factory(User::class)->create(); + + $this->actingAs($this->createAdminUser('edit_user_account_info')) + ->get(route('user.details.edit', $user->id)) + ->assertSuccessful(); + } + + /** + * @throws \Exception + * @throws \Throwable + * @covers \Collejo\App\Modules\ACL\Http\Controllers\ACLController::getUserDetailsView() + */ + public function testGetUserDetailsView() + { + $this->runDatabaseMigrations(); + + $user = factory(User::class)->create(); + + $this->actingAs($this->createAdminUser('view_user_account_info')) + ->get(route('user.details.view', $user->id)) + ->assertSuccessful(); + } + + /** + * @throws \Exception + * @throws \Throwable + * @covers \Collejo\App\Modules\ACL\Http\Controllers\ACLController::getManage() + */ + public function testGetManage() + { + $this->runDatabaseMigrations(); + + $this->actingAs($this->createAdminUser('view_user_account_info')) + ->get(route('users.manage')) + ->assertSuccessful(); + } +} diff --git a/App/Modules/ACL/Tests/Unit/UserRepositoryACLTest.php b/App/Modules/ACL/Tests/Unit/UserRepositoryACLTest.php new file mode 100644 index 0000000..710ae1b --- /dev/null +++ b/App/Modules/ACL/Tests/Unit/UserRepositoryACLTest.php @@ -0,0 +1,247 @@ +make(); + + $user = $this->userRepository->create($userAttributes->toArray()); + + $userFetched = $this->userRepository->findUser($user->id); + + $this->assertEquals($user->id, $userFetched->id); + } + + /** + * Test if a user can be found by email. + */ + public function testFindByEmail() + { + $userAttributes = factory(User::class)->make(); + + $user = $this->userRepository->create($userAttributes->toArray()); + + $userFetched = $this->userRepository->findByEmail($user->email); + + $this->assertEquals($user->id, $userFetched->id); + } + + /** + * Test if a Role can be found by id. + */ + public function testFindRole() + { + $role = factory(Role::class)->create(); + + $roleFetched = $this->userRepository->findRole($role->id); + + $this->assertArrayValuesEquals($role, $roleFetched); + } + + /** + * Test creating a role if not exists. + */ + public function testCreateRoleIfNotExists() + { + $this->runDatabaseMigrations(); + + $role = $this->userRepository->createRoleIfNotExists('test_role'); + + $roleFetched = Role::find($role->id); + + $this->assertArrayValuesEquals($role, $roleFetched); + } + + /** + * Test getting permissions by module name. + */ + public function testGetPermissionsByModule() + { + $this->runDatabaseMigrations(); + + $permissions = factory(Permission::class, 5)->create(); + + $permissionsFetched = $this->userRepository->getPermissionsByModule('test'); + + $this->assertArraysEquals($permissions->pluck('id')->sort(), $permissionsFetched->pluck('id')->sort()); + } + + /** + * Test getting permission by name. + */ + public function testGetPermissionByName() + { + $this->runDatabaseMigrations(); + + $permission = factory(Permission::class)->create(); + + $permissionFetched = $this->userRepository->getPermissionByName($permission->permission); + + $this->assertEquals($permission->id, $permissionFetched->id); + } + + /** + * Test get Role by name. + */ + public function testGetRoleByName() + { + $this->runDatabaseMigrations(); + + $role = factory(Role::class)->create(); + + $roleFetched = $this->userRepository->getRoleByName($role->role); + + $this->assertEquals($role->id, $roleFetched->id); + } + + /** + * Test enabling a Role. + */ + public function testEnableRole() + { + $this->runDatabaseMigrations(); + + $role = factory(Role::class)->create(); + + $role->delete(); + + $this->userRepository->enableRole($role->id); + + $role = Role::withTrashed()->where('id', $role->id)->firstOrFail(); + + $this->assertFalse($role->trashed()); + } + + /** + * Test disabling a Role. + */ + public function testDisableRole() + { + $this->runDatabaseMigrations(); + + $role = factory(Role::class)->create(); + + $this->userRepository->disableRole($role->id); + + $role = Role::withTrashed()->where('id', $role->id)->firstOrFail(); + + $this->assertTrue($role->trashed()); + } + + /** + * Test if a Permission could be created if not exists. + */ + public function testCreatePermissionIfNotExists() + { + $this->runDatabaseMigrations(); + + $permission = $this->userRepository->createPermissionIfNotExists('test_permission', 'test'); + + $permissionFetched = Permission::find($permission->id); + + $this->assertArrayValuesEquals($permission, $permissionFetched); + } + + /** + * Test sync Permissions in to Role. + */ + public function testSyncRolePermissions() + { + $this->runDatabaseMigrations(); + + $permissions = factory(Permission::class, 5)->create(); + + $role = factory(Role::class)->create(); + + $this->userRepository->syncRolePermissions($role, $permissions->pluck('permission')->toArray()); + + $role = Role::find($role->id); + + $rolePermissionsArray = $role->permissions->pluck('id')->sort(); + $permissionsArray = $permissions->pluck('id')->sort(); + + $this->assertArraysEquals($rolePermissionsArray, $permissionsArray); + } + + /** + * Test adding a Role to a User. + */ + public function testAddRoleToUser() + { + $user = factory(User::class)->create(); + + $role = factory(Role::class)->create(); + + $this->userRepository->addRoleToUser($user, $role); + + $user = User::find($user->id); + $role = Role::find($role->id); + + $this->assertTrue($this->userRepository->userHasRole($user, $role)); + } + + /** + * Test sync Roles in to User. + */ + public function testSyncUserRoles() + { + $this->runDatabaseMigrations(); + + $roles = factory(Role::class, 5)->create(); + + $user = factory(User::class)->create(); + + $this->userRepository->syncUserRoles($user, $roles->pluck('role')->toArray()); + + $user = User::find($user->id); + + $userRolesArray = $user->roles->pluck('id')->sort(); + $rolesArray = $roles->pluck('id')->sort(); + + $this->assertArraysEquals($userRolesArray, $rolesArray); + } + + /** + * Test Permissions are assigned to Role. + */ + public function testRolePermission() + { + $this->runDatabaseMigrations(); + + $permission = factory(Permission::class)->create(); + + $role = factory(Role::class)->create(); + + $this->userRepository->addPermissionToRole($role, $permission); + + $permission = Permission::find($permission->id); + $role = Role::find($role->id); + + $this->assertTrue($this->userRepository->roleHasPermission($role, $permission)); + } + + public function setup() + { + parent::setup(); + + $this->userRepository = $this->app->make(UserRepository::class); + } +} diff --git a/App/Modules/ACL/Tests/Unit/UserRepositoryAdminTest.php b/App/Modules/ACL/Tests/Unit/UserRepositoryAdminTest.php new file mode 100644 index 0000000..850228d --- /dev/null +++ b/App/Modules/ACL/Tests/Unit/UserRepositoryAdminTest.php @@ -0,0 +1,66 @@ +make(); + + $model = $this->userRepository->createAdminUser($user->first_name, $user->email, '123'); + + $adminUsers = $this->userRepository->getAdminUsers()->pluck('id')->toArray(); + + $this->assertTrue(in_array($model->id, $adminUsers)); + } + + /** + * Test creating an admin User. + */ + public function testCreateAdminUser() + { + $user = factory(User::class)->make(); + + $model = $this->userRepository->createAdminUser($user->first_name, $user->email, '123'); + + $model->password = '123'; + + $this->assertTrue(true); + } + + /** + * Test if admin users can login. + */ + public function testAdminUserLogin() + { + $user = factory(User::class)->make(); + + $this->userRepository->createAdminUser($user->first_name, $user->email, '123'); + + $result = Auth::attempt(['email' => $user->email, 'password' => '123']); + + $this->assertTrue($result); + } + + public function setup() + { + parent::setup(); + + $this->userRepository = $this->app->make(UserRepository::class); + } +} diff --git a/src/migrations/0_0_0_000045_create_users_table.php b/App/Modules/ACL/migrations/0_0_0_000045_create_users_table.php similarity index 95% rename from src/migrations/0_0_0_000045_create_users_table.php rename to App/Modules/ACL/migrations/0_0_0_000045_create_users_table.php index 082cf83..38157c3 100644 --- a/src/migrations/0_0_0_000045_create_users_table.php +++ b/App/Modules/ACL/migrations/0_0_0_000045_create_users_table.php @@ -1,7 +1,7 @@ string('id', 45)->primary(); + $table->string('id', 45)->primary(); $table->string('module')->nullable(); $table->string('permission')->unique(); $table->string('parent_id')->nullable(); diff --git a/src/migrations/0_0_0_000070_create_roles_table.php b/App/Modules/ACL/migrations/0_0_0_000070_create_roles_table.php similarity index 93% rename from src/migrations/0_0_0_000070_create_roles_table.php rename to App/Modules/ACL/migrations/0_0_0_000070_create_roles_table.php index 2633831..5073567 100644 --- a/src/migrations/0_0_0_000070_create_roles_table.php +++ b/App/Modules/ACL/migrations/0_0_0_000070_create_roles_table.php @@ -1,7 +1,7 @@ foreign('created_by')->references('id')->on('users'); $table->foreign('updated_by')->references('id')->on('users'); - }); + }); } /** diff --git a/src/migrations/0_0_0_000080_create_role_permission_table.php b/App/Modules/ACL/migrations/0_0_0_000080_create_permission_role_table.php similarity index 90% rename from src/migrations/0_0_0_000080_create_role_permission_table.php rename to App/Modules/ACL/migrations/0_0_0_000080_create_permission_role_table.php index 7a0576b..293369c 100644 --- a/src/migrations/0_0_0_000080_create_role_permission_table.php +++ b/App/Modules/ACL/migrations/0_0_0_000080_create_permission_role_table.php @@ -1,9 +1,9 @@ string('user_id'); $table->string('role_id'); $table->string('created_by')->nullable(); - $table->timestamp('created_at'); + $table->timestamp('created_at'); }); Schema::table('role_user', function (Blueprint $table) { diff --git a/src/migrations/0_0_0_000100_insert_main_roles.php b/App/Modules/ACL/migrations/0_0_0_000100_insert_main_roles.php similarity index 74% rename from src/migrations/0_0_0_000100_insert_main_roles.php rename to App/Modules/ACL/migrations/0_0_0_000100_insert_main_roles.php index 45f46dd..569155f 100644 --- a/src/migrations/0_0_0_000100_insert_main_roles.php +++ b/App/Modules/ACL/migrations/0_0_0_000100_insert_main_roles.php @@ -1,8 +1,7 @@ + + +
+
+ +
    +
  • + + {{permission.name}} + + +
      + +
    • + + + {{subPermission.name}} + + +
    • +
    +
  • +
+ +
+
+ +
+ {{ trans('base::common.save') }} +
+ +
+ + + \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/components/EditUserAccount.vue b/App/Modules/ACL/resources/assets/js/components/EditUserAccount.vue new file mode 100644 index 0000000..1b26fc7 --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/components/EditUserAccount.vue @@ -0,0 +1,40 @@ + + + \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/components/EditUserDetails.vue b/App/Modules/ACL/resources/assets/js/components/EditUserDetails.vue new file mode 100644 index 0000000..7c15aa6 --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/components/EditUserDetails.vue @@ -0,0 +1,51 @@ + + + \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/components/EditUserRoles.vue b/App/Modules/ACL/resources/assets/js/components/EditUserRoles.vue new file mode 100644 index 0000000..cfcfa49 --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/components/EditUserRoles.vue @@ -0,0 +1,78 @@ + + + \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/components/RolesList.vue b/App/Modules/ACL/resources/assets/js/components/RolesList.vue new file mode 100644 index 0000000..938af22 --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/components/RolesList.vue @@ -0,0 +1,74 @@ + + + \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/components/UsersList.vue b/App/Modules/ACL/resources/assets/js/components/UsersList.vue new file mode 100644 index 0000000..fb882a2 --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/components/UsersList.vue @@ -0,0 +1,68 @@ + + + \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/editRole.js b/App/Modules/ACL/resources/assets/js/editRole.js new file mode 100644 index 0000000..9c7945d --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/editRole.js @@ -0,0 +1,5 @@ +Vue.component('edit-role', require('./components/EditRole')); + +new Vue({ + el: '#editRole' +}); \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/editUserAccount.js b/App/Modules/ACL/resources/assets/js/editUserAccount.js new file mode 100644 index 0000000..6033e35 --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/editUserAccount.js @@ -0,0 +1,5 @@ +Vue.component('edit-user-account', require('./components/EditUserAccount')); + +new Vue({ + el: '#editUserAccount' +}); \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/editUserDetails.js b/App/Modules/ACL/resources/assets/js/editUserDetails.js new file mode 100644 index 0000000..872972d --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/editUserDetails.js @@ -0,0 +1,5 @@ +Vue.component('edit-user-details', require('./components/EditUserDetails')); + +new Vue({ + el: '#editUserDetails' +}); \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/editUserRoles.js b/App/Modules/ACL/resources/assets/js/editUserRoles.js new file mode 100644 index 0000000..cc5fbbb --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/editUserRoles.js @@ -0,0 +1,5 @@ +Vue.component('edit-user-roles', require('./components/EditUserRoles')); + +new Vue({ + el: '#editUserRoles' +}); \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/rolesList.js b/App/Modules/ACL/resources/assets/js/rolesList.js new file mode 100644 index 0000000..906b5fc --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/rolesList.js @@ -0,0 +1,5 @@ +Vue.component('roles-list', require('./components/RolesList')); + +new Vue({ + el: '#rolesList' +}); \ No newline at end of file diff --git a/App/Modules/ACL/resources/assets/js/usersList.js b/App/Modules/ACL/resources/assets/js/usersList.js new file mode 100644 index 0000000..fcf7bcc --- /dev/null +++ b/App/Modules/ACL/resources/assets/js/usersList.js @@ -0,0 +1,5 @@ +Vue.component('users-list', require('./components/UsersList')); + +new Vue({ + el: '#usersList' +}); \ No newline at end of file diff --git a/App/Modules/ACL/resources/lang/en/menu.php b/App/Modules/ACL/resources/lang/en/menu.php new file mode 100644 index 0000000..2a665fb --- /dev/null +++ b/App/Modules/ACL/resources/lang/en/menu.php @@ -0,0 +1,7 @@ + 'Users', + 'user_manage' => 'Users and Access', + 'user_roles' => 'Roles and Permissions', +]; diff --git a/App/Modules/ACL/resources/lang/en/role.php b/App/Modules/ACL/resources/lang/en/role.php new file mode 100644 index 0000000..f6618bf --- /dev/null +++ b/App/Modules/ACL/resources/lang/en/role.php @@ -0,0 +1,14 @@ + 'Roles', + 'new_role' => 'New Role', + 'role_details' => 'Role Details', + + 'name' => 'Name', + 'permissions' => 'Permissions', + + 'updated_at' => 'Updated At', + + 'role_updated' => 'Role updated.', +]; diff --git a/App/Modules/ACL/resources/lang/en/user.php b/App/Modules/ACL/resources/lang/en/user.php new file mode 100644 index 0000000..bf34c83 --- /dev/null +++ b/App/Modules/ACL/resources/lang/en/user.php @@ -0,0 +1,25 @@ + 'Users', + 'new_user' => 'New User', + + 'email' => 'Email', + 'first_name' => 'First Name', + 'last_name' => 'Last Name', + 'name' => 'Name', + 'password' => 'Password', + + 'updated_at' => 'Updated At', + + 'date_of_birth' => 'Date of Birth', + + 'user_details' => 'Details', + 'user_roles' => 'Roles', + 'edit_user' => 'Edit User Details', + 'account_details' => 'Account', + + 'empty_list' => 'There are no Users for the given criteria', + + 'user_updated' => 'User details updated.', +]; diff --git a/App/Modules/ACL/resources/views/edit_role.blade.php b/App/Modules/ACL/resources/views/edit_role.blade.php new file mode 100644 index 0000000..84517ce --- /dev/null +++ b/App/Modules/ACL/resources/views/edit_role.blade.php @@ -0,0 +1,40 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', trans('acl::role.role_details')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('acl::partials.edit_role_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/ACL/resources/views/edit_user_account.blade.php b/App/Modules/ACL/resources/views/edit_user_account.blade.php new file mode 100644 index 0000000..b682eda --- /dev/null +++ b/App/Modules/ACL/resources/views/edit_user_account.blade.php @@ -0,0 +1,40 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', trans('acl::user.account_details')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('acl::partials.edit_user_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/ACL/resources/views/edit_user_details.blade.php b/App/Modules/ACL/resources/views/edit_user_details.blade.php new file mode 100644 index 0000000..5fd992d --- /dev/null +++ b/App/Modules/ACL/resources/views/edit_user_details.blade.php @@ -0,0 +1,44 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $user ? trans('acl::user.edit_user') : trans('acl::user.new_user')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + @if($user) + + + + @endif + +@endsection + +@section('tabs') + + @include('acl::partials.edit_user_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/ACL/resources/views/edit_user_roles.blade.php b/App/Modules/ACL/resources/views/edit_user_roles.blade.php new file mode 100644 index 0000000..59a21f3 --- /dev/null +++ b/App/Modules/ACL/resources/views/edit_user_roles.blade.php @@ -0,0 +1,40 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $user->name) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + @if($user) + + + + @endif + +@endsection + +@section('tabs') + + @include('acl::partials.edit_user_tabs') + +@endsection + +@section('tab') + +
+ +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/ACL/resources/views/partials/edit_role_tabs.blade.php b/App/Modules/ACL/resources/views/partials/edit_role_tabs.blade.php new file mode 100644 index 0000000..174e1fb --- /dev/null +++ b/App/Modules/ACL/resources/views/partials/edit_role_tabs.blade.php @@ -0,0 +1,17 @@ + + diff --git a/App/Modules/ACL/resources/views/partials/edit_user_tabs.blade.php b/App/Modules/ACL/resources/views/partials/edit_user_tabs.blade.php new file mode 100644 index 0000000..fb58dca --- /dev/null +++ b/App/Modules/ACL/resources/views/partials/edit_user_tabs.blade.php @@ -0,0 +1,30 @@ + + diff --git a/App/Modules/ACL/resources/views/partials/view_user_tabs.blade.php b/App/Modules/ACL/resources/views/partials/view_user_tabs.blade.php new file mode 100644 index 0000000..0f41920 --- /dev/null +++ b/App/Modules/ACL/resources/views/partials/view_user_tabs.blade.php @@ -0,0 +1,22 @@ + diff --git a/App/Modules/ACL/resources/views/roles_list.blade.php b/App/Modules/ACL/resources/views/roles_list.blade.php new file mode 100644 index 0000000..bca5759 --- /dev/null +++ b/App/Modules/ACL/resources/views/roles_list.blade.php @@ -0,0 +1,32 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('acl::role.roles')) + +@section('total', $roles->total()) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('add_edit_role') + + {{ trans('acl::role.new_role') }} + + @endcan + +@endsection + +@section('table') +
+ count()) + :roles="{{$roles->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/ACL/resources/views/users_list.blade.php b/App/Modules/ACL/resources/views/users_list.blade.php new file mode 100644 index 0000000..1b2503b --- /dev/null +++ b/App/Modules/ACL/resources/views/users_list.blade.php @@ -0,0 +1,32 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('acl::user.users')) + +@section('total', $users->total()) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('create_user_accounts') + + {{ trans('acl::user.new_user') }} + + @endcan + +@endsection + +@section('table') +
+ count()) + :users="{{$users->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/ACL/resources/views/view_user_account.blade.php b/App/Modules/ACL/resources/views/view_user_account.blade.php new file mode 100644 index 0000000..06b2669 --- /dev/null +++ b/App/Modules/ACL/resources/views/view_user_account.blade.php @@ -0,0 +1,33 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $user->name) + +@section('tools') + + @can('edit_user_account_info') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('acl::partials.view_user_tabs') + +@endsection + +@section('tab') + +
+
+ +
{{ trans('acl::user.email') }}
+
{{ $user->email }}
+ +
+
+ +@endsection \ No newline at end of file diff --git a/App/Modules/ACL/resources/views/view_user_details.blade.php b/App/Modules/ACL/resources/views/view_user_details.blade.php new file mode 100644 index 0000000..10b89f2 --- /dev/null +++ b/App/Modules/ACL/resources/views/view_user_details.blade.php @@ -0,0 +1,37 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $user->name) + +@section('tools') + + @can('edit_user_account_info') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('acl::partials.view_user_tabs') + +@endsection + +@section('tab') + +
+
+
{{ trans('acl::user.name') }}
+
{{ $user->name }}
+ +
{{ trans('acl::user.email') }}
+
{{ $user->email }}
+ +
{{ trans('acl::user.date_of_birth') }}
+
{{ $user->date_of_birth }}
+
+
+ +@endsection \ No newline at end of file diff --git a/App/Modules/ACL/resources/views/view_user_roles.blade.php b/App/Modules/ACL/resources/views/view_user_roles.blade.php new file mode 100644 index 0000000..4f2ec3e --- /dev/null +++ b/App/Modules/ACL/resources/views/view_user_roles.blade.php @@ -0,0 +1,44 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $user->name) + +@section('tools') + + @can('edit_user_account_info') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('acl::partials.view_user_tabs') + +@endsection + +@section('tab') + +
+
+ + @foreach($user->roles as $role) + +
{{ $role->name }}
+ + + + @foreach($role->permissions as $permission) + + {{ $permission->name }} + + @endforeach + + + @endforeach +
+
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Auth/Http/Controllers/AuthController.php b/App/Modules/Auth/Http/Controllers/AuthController.php new file mode 100644 index 0000000..ea9c5bc --- /dev/null +++ b/App/Modules/Auth/Http/Controllers/AuthController.php @@ -0,0 +1,32 @@ +password)) { + $session::put('reauth-token', [ + 'email' => Auth::user()->email, + 'ts' => time(), + ]); + + return $this->printJson(true, ['redir' => URL::previous()]); + } + + return $this->printJson(false, [], trans('auth::auth.failed')); + } + + public function __construct() + { + $this->middleware('guest', ['except' => ['logout', 'postReauth']]); + } +} diff --git a/App/Modules/Auth/Http/Controllers/ForgotPasswordController.php b/App/Modules/Auth/Http/Controllers/ForgotPasswordController.php new file mode 100644 index 0000000..0f15c94 --- /dev/null +++ b/App/Modules/Auth/Http/Controllers/ForgotPasswordController.php @@ -0,0 +1,30 @@ +middleware('guest'); + } +} diff --git a/App/Modules/Auth/Http/Controllers/LoginController.php b/App/Modules/Auth/Http/Controllers/LoginController.php new file mode 100644 index 0000000..c137a08 --- /dev/null +++ b/App/Modules/Auth/Http/Controllers/LoginController.php @@ -0,0 +1,70 @@ +printJson(false, [], trans('auth::auth.failed')); + } + + /** + * On successful authentication redirect to the intended url or to the default route. + * + * @return \Illuminate\Http\JsonResponse + */ + public function authenticated() + { + // This is required to make the reauth screen not appear right after login + Session::put('reauth-token', [ + 'email' => Auth::user()->email, + 'ts' => time(), + ]); + + return $this->printJson(true, [ + 'redir' => Session::get('url.intended', $this->redirectTo), + ]); + } + + /** + * Returns the login form view. + * + * @throws \Exception + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function showLoginForm() + { + return view('auth::login', [ + 'login_form_validator' => $this->jsValidator(LoginRequest::class), + ]); + } + + public function __construct() + { + $this->middleware('guest', ['except' => ['logout', 'postReauth']]); + + $this->redirectTo = route('dash'); + } +} diff --git a/App/Modules/Auth/Http/Controllers/ProfileController.php b/App/Modules/Auth/Http/Controllers/ProfileController.php new file mode 100644 index 0000000..7c6caba --- /dev/null +++ b/App/Modules/Auth/Http/Controllers/ProfileController.php @@ -0,0 +1,26 @@ + Auth::user(), + ]); + } + + public function __construct() + { + $this->middleware('auth'); + } +} diff --git a/App/Modules/Auth/Http/Controllers/ResetPasswordController.php b/App/Modules/Auth/Http/Controllers/ResetPasswordController.php new file mode 100644 index 0000000..68cb25b --- /dev/null +++ b/App/Modules/Auth/Http/Controllers/ResetPasswordController.php @@ -0,0 +1,37 @@ +middleware('guest'); + } +} diff --git a/App/Modules/Auth/Http/Requests/LoginRequest.php b/App/Modules/Auth/Http/Requests/LoginRequest.php new file mode 100644 index 0000000..0b5c7a7 --- /dev/null +++ b/App/Modules/Auth/Http/Requests/LoginRequest.php @@ -0,0 +1,24 @@ + 'required|email', + 'password' => 'required', + ]; + } + + public function attributes() + { + return [ + 'email' => trans('auth::auth.email'), + 'password' => trans('auth::auth.password'), + ]; + } +} diff --git a/App/Modules/Auth/Http/Requests/ReauthRequest.php b/App/Modules/Auth/Http/Requests/ReauthRequest.php new file mode 100644 index 0000000..909262d --- /dev/null +++ b/App/Modules/Auth/Http/Requests/ReauthRequest.php @@ -0,0 +1,22 @@ + 'required', + ]; + } + + public function attributes() + { + return [ + 'password' => trans('auth::auth.password'), + ]; + } +} diff --git a/App/Modules/Auth/Http/menus.php b/App/Modules/Auth/Http/menus.php new file mode 100644 index 0000000..c1f3e95 --- /dev/null +++ b/App/Modules/Auth/Http/menus.php @@ -0,0 +1,14 @@ +setParent($parent) + ->setPath('user.profile'); + })->setParent($parent); + + Menu::create('auth.logout', trans('auth::menu.logout')) + ->setParent($parent) + ->setPath('auth.logout'); +})->setOrder(10) + ->setPosition('right'); diff --git a/App/Modules/Auth/Http/routes.php b/App/Modules/Auth/Http/routes.php new file mode 100644 index 0000000..6d245e1 --- /dev/null +++ b/App/Modules/Auth/Http/routes.php @@ -0,0 +1,25 @@ + 'auth'], function () { + + // We've defined login twice to get pass Laravel being hard coding the login route name + Route::get('login', 'LoginController@showLoginForm')->name('login'); + + Route::post('login', 'LoginController@login'); + + Route::group(['middleware' => 'auth'], function () { + Route::get('reauth', 'AuthController@getReauth')->name('auth.reauth'); + Route::post('reauth', 'AuthController@postReauth'); + + Route::get('logout', 'LoginController@logout')->name('auth.logout'); + }); +}); + +Route::group(['prefix' => 'password'], function () { + Route::get('email', 'ResetPasswordController@getEmail')->name('password.email'); + Route::post('email', 'ResetPasswordController@postEmail'); +}); + +Route::group(['prefix' => 'dashboard', 'middleware' => 'auth'], function () { + Route::get('profile', 'ProfileController@getProfile')->name('user.profile'); +}); diff --git a/App/Modules/Auth/Providers/AuthModuleServiceProvider.php b/App/Modules/Auth/Providers/AuthModuleServiceProvider.php new file mode 100644 index 0000000..297186f --- /dev/null +++ b/App/Modules/Auth/Providers/AuthModuleServiceProvider.php @@ -0,0 +1,17 @@ +runDatabaseMigrations(); + + $this->browse(function (Browser $browser) { + $browser->visit('/') + ->assertSee(config('app.name')) + ->assertTitle(trans('auth::auth.login').' - '.config('app.name')); + });*/ + + $this->assertTrue(true); + } +} diff --git a/App/Modules/Auth/Tests/Http/LoginControllerTest.php b/App/Modules/Auth/Tests/Http/LoginControllerTest.php new file mode 100644 index 0000000..fccc7e8 --- /dev/null +++ b/App/Modules/Auth/Tests/Http/LoginControllerTest.php @@ -0,0 +1,70 @@ +runDatabaseMigrations(); + + $response = $this->get(route('login')); + + $this->assertGuest(); + + $response->assertStatus(200); + } + + /** + * @throws \Exception + * @throws \Throwable + * @covers \Collejo\App\Modules\Auth\Http\Controllers\LoginController::login() + * @covers \Collejo\App\Modules\Auth\Http\Controllers\LoginController::authenticated() + */ + public function testLoginSuccess() + { + $user = factory(User::class)->create(); + + $credentials = [ + 'email' => $user->email, + 'password' => 123, + ]; + + $response = $this->post(route('login'), $credentials); + + $this->assertCredentials($credentials); + + // Assert redirect + $response->assertStatus(302); + } + + /** + * @throws \Exception + * @throws \Throwable + * @covers \Collejo\App\Modules\Auth\Http\Controllers\LoginController::sendFailedLoginResponse() + */ + public function testLoginFailed() + { + $user = factory(User::class)->create(); + + $credentials = [ + 'email' => $user->email, + 'password' => 'wrong password', + ]; + + $response = $this->post(route('login'), $credentials); + + $this->assertInvalidCredentials($credentials); + + // Assert error message response + $response->assertStatus(200); + } +} diff --git a/App/Modules/Auth/Tests/Http/ProfileControllerTest.php b/App/Modules/Auth/Tests/Http/ProfileControllerTest.php new file mode 100644 index 0000000..01d2db3 --- /dev/null +++ b/App/Modules/Auth/Tests/Http/ProfileControllerTest.php @@ -0,0 +1,24 @@ +runDatabaseMigrations(); + + $user = factory(User::class)->create(); + + $this->actingAs($user) + ->get(route('user.profile')) + ->assertViewIs('auth::view_profile_details'); + } +} diff --git a/App/Modules/Auth/resources/assets/js/components/Login.vue b/App/Modules/Auth/resources/assets/js/components/Login.vue new file mode 100644 index 0000000..850df5a --- /dev/null +++ b/App/Modules/Auth/resources/assets/js/components/Login.vue @@ -0,0 +1,53 @@ + + + \ No newline at end of file diff --git a/App/Modules/Auth/resources/assets/js/components/Reauth.vue b/App/Modules/Auth/resources/assets/js/components/Reauth.vue new file mode 100644 index 0000000..e9ed1a5 --- /dev/null +++ b/App/Modules/Auth/resources/assets/js/components/Reauth.vue @@ -0,0 +1,45 @@ + + + \ No newline at end of file diff --git a/App/Modules/Auth/resources/assets/js/login.js b/App/Modules/Auth/resources/assets/js/login.js new file mode 100644 index 0000000..17758e9 --- /dev/null +++ b/App/Modules/Auth/resources/assets/js/login.js @@ -0,0 +1,5 @@ +Vue.component('login', require('./components/Login')); + +new Vue({ + el: '#login' +}); \ No newline at end of file diff --git a/App/Modules/Auth/resources/assets/js/reauth.js b/App/Modules/Auth/resources/assets/js/reauth.js new file mode 100644 index 0000000..ffce27a --- /dev/null +++ b/App/Modules/Auth/resources/assets/js/reauth.js @@ -0,0 +1,5 @@ +Vue.component('reauth', require('./components/Reauth')); + +new Vue({ + el: '#reauth' +}); \ No newline at end of file diff --git a/App/Modules/Auth/resources/assets/sass/module.scss b/App/Modules/Auth/resources/assets/sass/module.scss new file mode 100644 index 0000000..a7248df --- /dev/null +++ b/App/Modules/Auth/resources/assets/sass/module.scss @@ -0,0 +1,17 @@ +@import "../../../../Base/resources/assets/sass/bs"; + +.auth-row { + min-height: 100%; + height: auto !important; + margin-bottom: 2rem; +} + +.form-auth { + margin-top: 20%; + background: #fff; + padding: $box-padding * 2; +} + +footer{ + padding: $box-padding; +} \ No newline at end of file diff --git a/App/Modules/Auth/resources/lang/en/auth.php b/App/Modules/Auth/resources/lang/en/auth.php new file mode 100644 index 0000000..5f560e2 --- /dev/null +++ b/App/Modules/Auth/resources/lang/en/auth.php @@ -0,0 +1,16 @@ + config('app.name'), + 'email' => 'Email', + 'password' => 'Password', + 'failed' => 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + 'remember_me' => 'Remember Me', + 'login' => 'Login', + 'reauth' => 'Security Checkpoint', + + 'reauth_msg' => 'Enter your password to continue.', + 'reauth_expired' => 'Authentication must be confirmed to save data', + +]; diff --git a/App/Modules/Auth/resources/lang/en/menu.php b/App/Modules/Auth/resources/lang/en/menu.php new file mode 100644 index 0000000..97f9fd8 --- /dev/null +++ b/App/Modules/Auth/resources/lang/en/menu.php @@ -0,0 +1,7 @@ + 'My Account', + 'my_profile' => 'My Profile', + 'logout' => 'Logout', +]; diff --git a/App/Modules/Auth/resources/views/layouts/auth.blade.php b/App/Modules/Auth/resources/views/layouts/auth.blade.php new file mode 100644 index 0000000..fe1c28b --- /dev/null +++ b/App/Modules/Auth/resources/views/layouts/auth.blade.php @@ -0,0 +1,20 @@ + + + + @include('base::layouts.partials.head') + + + +
+ +
+ + @yield('content') + +
+
+ + @include('base::layouts.partials.footer') + + + diff --git a/App/Modules/Auth/resources/views/login.blade.php b/App/Modules/Auth/resources/views/login.blade.php new file mode 100644 index 0000000..50f79fb --- /dev/null +++ b/App/Modules/Auth/resources/views/login.blade.php @@ -0,0 +1,21 @@ +@extends('auth::layouts.auth') + +@section('title', trans('auth::auth.login')) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + +@endsection + +@section('content') + +
+ +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Auth/resources/views/partials/view_profile_tabs.blade.php b/App/Modules/Auth/resources/views/partials/view_profile_tabs.blade.php new file mode 100644 index 0000000..2340242 --- /dev/null +++ b/App/Modules/Auth/resources/views/partials/view_profile_tabs.blade.php @@ -0,0 +1,8 @@ + diff --git a/App/Modules/Auth/resources/views/reauth.blade.php b/App/Modules/Auth/resources/views/reauth.blade.php new file mode 100644 index 0000000..4223d26 --- /dev/null +++ b/App/Modules/Auth/resources/views/reauth.blade.php @@ -0,0 +1,21 @@ +@extends('auth::layouts.auth') + +@section('title', trans('auth::auth.reauth')) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + +@endsection + +@section('content') + +
+ +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Auth/resources/views/view_profile_details.blade.php b/App/Modules/Auth/resources/views/view_profile_details.blade.php new file mode 100644 index 0000000..a8c543e --- /dev/null +++ b/App/Modules/Auth/resources/views/view_profile_details.blade.php @@ -0,0 +1,26 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $user->name) + +@section('tabs') + + @include('auth::partials.view_profile_tabs') + +@endsection + +@section('tab') + +
+
+
{{ trans('acl::user.name') }}
+
{{ $user->name }}
+ +
{{ trans('acl::user.email') }}
+
{{ $user->email }}
+ +
{{ trans('acl::user.date_of_birth') }}
+
{{ $user->date_of_birth }}
+
+
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Base/Commands/DBSeed.php b/App/Modules/Base/Commands/DBSeed.php new file mode 100644 index 0000000..87da172 --- /dev/null +++ b/App/Modules/Base/Commands/DBSeed.php @@ -0,0 +1,59 @@ +modules = app()->make('modules'); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + foreach ($this->modules->getModulePaths() as $path) { + if (file_exists($path)) { + foreach (listDir($path) as $dir) { + $seedsDir = $path.'/'.$dir.'/Seeder'; + + if (is_dir($seedsDir)) { + foreach (listDir($seedsDir) as $seeder) { + $seeder = 'Collejo\App\Modules\\'.$dir.'\Seeder\\'.substr($seeder, 0, strlen($seeder) - 4); + + $this->info('Seeding : '.$seeder); + + $class = new $seeder(); + + $class->setCommand($this)->__invoke(); + } + } + } + } + } + + $this->info('Database seeded!'); + } +} diff --git a/src/Console/Commands/Install.php b/App/Modules/Base/Commands/Install.php similarity index 73% rename from src/Console/Commands/Install.php rename to App/Modules/Base/Commands/Install.php index f6fb131..d1a8510 100644 --- a/src/Console/Commands/Install.php +++ b/App/Modules/Base/Commands/Install.php @@ -1,62 +1,61 @@ -isInstalled()) { - $this->error('Collejo is already installed. Exiting.'); - exit(); - } - - $this->call('migrate:copy'); - - $this->info(" ,-----. ,--. ,--. ,--. "); - $this->info("' .--./ ,---. | | | | ,---. `--' ,---. "); - $this->info("| | | .-. | | | | | | .-. : ,--. | .-. | "); - $this->info("' '--'\ ' '-' ' | | | | \ --. | | ' '-' ' "); - $this->info(" `-----' `---' `--' `--' `----' .-' / `---' "); - $this->info(" '---' "); - - $this->info('Done'); - - $this->info('Creating Admin Account'); - - $this->call('admin:create'); - - $this->info('Done'); - - $this->info('Creating Permissions'); - - $this->call('admin:permissions'); - - $this->info('Done'); - - $this->info('Setup complete'); - $this->info('Documentation can be found at https://github.com/codebreez/collejo-docs'); - } -} +isInstalled()) { + $this->error('Collejo is already installed. Bye.'); + exit(); + } + + $this->call('migrate'); + + $this->info(' ,-----. ,--. ,--. ,--. '); + $this->info("' .--./ ,---. | | | | ,---. `--' ,---. "); + $this->info('| | | .-. | | | | | | .-. : ,--. | .-. | '); + $this->info("' '--'\ ' '-' ' | | | | \ --. | | ' '-' ' "); + $this->info(" `-----' `---' `--' `--' `----' .-' / `---' "); + $this->info(" '---' "); + + $this->info('Done'); + + $this->info('Creating Admin Account'); + + $this->call('admin:create'); + + $this->info('Done'); + + $this->info('Creating Permissions'); + + $this->call('admin:permissions'); + + $this->info('Done'); + + $this->info('Setup complete'); + $this->info('Documentation can be found at https://github.com/codebreez/collejo-docs'); + } +} diff --git a/App/Modules/Base/Http/Controllers/AssetsController.php b/App/Modules/Base/Http/Controllers/AssetsController.php new file mode 100644 index 0000000..7852e74 --- /dev/null +++ b/App/Modules/Base/Http/Controllers/AssetsController.php @@ -0,0 +1,98 @@ +getLocals()) + .';'.'C.routes='.json_encode($this->getRoutes($router)) + .';'.'C.permissions='.json_encode($this->getPermissions()); + + return response($content) + ->header('Cache-Control', 'max-age='.config('fe_asset_cache_ttl')) + ->header('Content-Type', 'application/javascript'); + } + + /** + * Returns a cached array of permissions for the application for current User. + * + * @return mixed + */ + private function getPermissions() + { + if (!Auth::user()) { + return []; + } + + return Auth::user()->permissions->map(function ($permission) { + return $permission->permission; + }); + } + + /** + * Returns a cached array of routes for the application. + * + * @return mixed + */ + private function getRoutes(Router $router) + { + $cacheKey = 'route-files-'.(Auth::user() ? Auth::user()->id : 'guest'); + + return Cache::remember($cacheKey, config('fe_asset_cache_ttl'), function () use ($router) { + $routes = []; + + foreach ($router->getRoutes() as $route) { + if ($route->getName()) { + $routes[] = [ + 'name' => $route->getName(), + 'uri' => $route->uri(), + ]; + } + } + + return $routes; + }); + } + + /** + * Returns a cached array of locales for the application. + * + * @return mixed + */ + private function getLocals() + { + return Cache::remember('lang-files', config('fe_asset_cache_ttl'), function () { + $langs = array_fill_keys(config('collejo.languages'), []); + + foreach (Module::getModulePaths() as $path) { + if (file_exists($path)) { + foreach (listDir($path) as $module) { + $langDir = $path.'/'.$module.'/resources/lang'; + + if (is_dir($path.'/'.$module) && is_dir($langDir)) { + foreach (listDir($langDir) as $lang) { + foreach (listDir($langDir.'/'.$lang) as $langFile) { + if (!isset($langs[$lang][strtolower($module)])) { + $langs[$lang][strtolower($module)] = []; + } + + $langs[$lang][strtolower($module)][basename($langFile, '.php')] = require $langDir.'/'.$lang.'/'.$langFile; + } + } + } + } + } + } + + return $langs; + }); + } +} diff --git a/App/Modules/Base/Http/menus.php b/App/Modules/Base/Http/menus.php new file mode 100644 index 0000000..fb0f36c --- /dev/null +++ b/App/Modules/Base/Http/menus.php @@ -0,0 +1,4 @@ +setOrder(0)->setPosition('right'); diff --git a/App/Modules/Base/Http/routes.php b/App/Modules/Base/Http/routes.php new file mode 100644 index 0000000..550eb49 --- /dev/null +++ b/App/Modules/Base/Http/routes.php @@ -0,0 +1,5 @@ + 'assets'], function () { + Route::get('fe-assets.js', 'AssetsController@getFrontAssets')->name('fe-assets.js'); +}); diff --git a/App/Modules/Base/Providers/BaseModuleServiceProvider.php b/App/Modules/Base/Providers/BaseModuleServiceProvider.php new file mode 100644 index 0000000..0c69c51 --- /dev/null +++ b/App/Modules/Base/Providers/BaseModuleServiceProvider.php @@ -0,0 +1,17 @@ +runDatabaseMigrations(); + + $response = $this->get(route('fe-assets.js')); + + $response->assertStatus(200); + } +} diff --git a/src/migrations/0_0_0_000010_create_jobs_table.php b/App/Modules/Base/migrations/0_0_0_000010_create_jobs_table.php similarity index 94% rename from src/migrations/0_0_0_000010_create_jobs_table.php rename to App/Modules/Base/migrations/0_0_0_000010_create_jobs_table.php index 7239925..4f40d9d 100644 --- a/src/migrations/0_0_0_000010_create_jobs_table.php +++ b/App/Modules/Base/migrations/0_0_0_000010_create_jobs_table.php @@ -1,7 +1,7 @@ 20){ + date = date.substring(0, date.length - 7); + } + + if(utc){ + + return moment.utc(date); + } + + return moment(date); + }, + + /** + * Returns the user's time zone offset to UTC + * + * @returns {number} + * @private + */ + _getUserTimezoneOffset() + { + return new Date().getTimezoneOffset(); + }, + + /** + * Returns the date format for calendars + * + * @returns {string} + */ + getCalendarFormat() + { + return 'MMM dd, yyyy'; + }, + + /** + * Returns how dates should be formatted + * + * @returns {string} + * @private + */ + getDateFormat() + { + return 'MMM D, YYYY'; + }, + + /** + * Returns how time should be formatted + * + * @returns {string} + * @private + */ + getTimeFormat() + { + return 'h:mm a'; + }, + + /** + * Returns how date and time should be formatted + * + * @returns {string} + * @private + */ + getDateTimeFormat() + { + return `${this.getDateFormat()}, ${this.getTimeFormat()}`; + } + } +}; + +export {DateTimeHelpers}; \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/js/_formHelper.js b/App/Modules/Base/resources/assets/js/_formHelper.js new file mode 100644 index 0000000..9135f1b --- /dev/null +++ b/App/Modules/Base/resources/assets/js/_formHelper.js @@ -0,0 +1,174 @@ +import { required, requiredIf, requiredUnless, minLength, maxLength, minValue, maxValue, between, alpha, alphaNum, numeric, integer, decimal, email, ipAddress, macAddress, sameAs, url, or, and, not, withParams } from 'vuelidate/lib/validators' + +const FormHelpers = { + + props:{ + validation: Object, + entity: { + default: null, + type: Object + } + }, + + data(){ + + return { + action: null, + submitDisabled: false, + form: {} + } + }, + + mounted(){ + + this.setFormObject(); + }, + + /** + * Dynamically convert laravel validation in to vuelidate + * + * @return {{form: *}} + */ + validations(){ + + const rulesMap = { + required: required, + requiredIf: requiredIf, + requiredUnless: requiredUnless, + minLength: minLength, + maxLength: maxLength, + minValue: minValue, + maxValue: maxValue, + between: between, + alpha: alpha, + alphaNum: alphaNum, + numeric: numeric, + integer: integer, + decimal: decimal, + email: email, + ipAddress: ipAddress, + macAddress: macAddress, + sameAs: sameAs, + url: url, + or: or, + and: and, + not: not, + withParams: withParams, + }; + + this._getFormFields().forEach(field => { + + _.keys(this.validation[field]).forEach(rule => { + + if(rulesMap[rule]){ + + this.validation[field][rule] = rulesMap[rule]; + } else{ + + console.error(`Validation rule "${rule}" is called but not defined`) + } + }); + }); + + return { + form: this.validation + }; + }, + + methods: { + + /** + * Returns the form fields + * + * @return {*} + * @private + */ + _getFormFields(){ + + return _.keys(this.validation); + }, + + /** + * Sets the form object bases on the validating fields + */ + setFormObject(){ + + this.form = Object.assign({}, this.entity); + }, + + /** + * Before submit validate + */ + onSubmit(){ + + if(!this.$v.form.$error){ + + this.submitDisabled = true; + + if(this.action){ + + axios.post(this.action, this.form) + .then(this.handleSubmitResponse) + .catch(this.handleSubmitResponse); + }else{ + + console.error('form does not have an action'); + } + } + }, + + /** + * Handles the response for a form submit event + * + * @param response + */ + handleSubmitResponse(response) { + + if (response.response) { + + response = response.response; + } + + if (response && response.data) { + + if (!response.data.data || !response.data.data.redir) { + + this.submitDisabled = false; + } + + if (response.data.message) { + + if (!response.data.success) { + + if (response.data.errors) { + + const msgDetails = []; + + Object.keys(response.data.errors).forEach(field => { + + response.data.errors[field].forEach(msg => { + msgDetails.push(this.trans('base::' + msg, field)); + }); + }); + + window.C.notification.danger(response.data.message, true, msgDetails); + + }else{ + + window.C.notification.warning(response.data.message); + + } + + } else if (response.data.success) { + + window.C.notification.success(response.data.message); + } + } + } + + return response; + } + } +}; + +export {FormHelpers}; \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/js/_notificationHelper.js b/App/Modules/Base/resources/assets/js/_notificationHelper.js new file mode 100644 index 0000000..ddf8837 --- /dev/null +++ b/App/Modules/Base/resources/assets/js/_notificationHelper.js @@ -0,0 +1,89 @@ +const Notification = { + + methods: { + + /** + * Show a success message + * + * @param message + * @param dismissible + * @param msgDetails + */ + success(message, dismissible = true, msgDetails = null) { + + this._showMessage({ + message, + msgDetails, + dismissible + }); + }, + + /** + * Show a danger message + * + * @param message + * @param dismissible + * @param msgDetails + */ + danger(message, dismissible = true, msgDetails = null) { + + this._showMessage({ + message, + msgDetails, + dismissible, + variant: 'danger' + }); + }, + + /** + * Show a warning message + * + * @param message + * @param dismissible + * @param msgDetails + */ + warning(message, dismissible = true, msgDetails = null) { + + this._showMessage({ + message, + msgDetails, + dismissible, + variant: 'warning' + }); + }, + + /** + * Show a info message + * + * @param message + * @param dismissible + * @param msgDetails + */ + info(message, dismissible = true, msgDetails = null) { + + this._showMessage({ + message, + msgDetails, + dismissible, + variant: 'info' + }); + }, + + /** + * Show message with given options + * + * @param options + */ + _showMessage(options) { + + this.notifications.push(Object.assign({ + show: 5, + variant: 'success', + dismissible: true, + dismissLabel: 'Close' + }, options)); + } + } +}; + +export {Notification}; diff --git a/App/Modules/Base/resources/assets/js/_paginationHelper.js b/App/Modules/Base/resources/assets/js/_paginationHelper.js new file mode 100644 index 0000000..cca7943 --- /dev/null +++ b/App/Modules/Base/resources/assets/js/_paginationHelper.js @@ -0,0 +1,36 @@ +const PaginationHelper = { + + data() { + + return { + totalPages: null, + currentPage: null, + baseUrl: null + }; + }, + + methods: { + + /** + * Handles the pagination data properties for lists + * + * @param list + */ + createPaginationProps(list) { + + this.totalPages = Math.ceil(list.total / list.per_page); + this.currentPage = list.current_page; + this.baseUrl = list.path; + }, + + /** + * Generates links bases on page number + */ + linkGen(pageNum) { + + return `?page=${pageNum}&${window.location.search.replace('?','')}`; + } + } +}; + +export {PaginationHelper}; \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/js/_permissions.js b/App/Modules/Base/resources/assets/js/_permissions.js new file mode 100644 index 0000000..81c9299 --- /dev/null +++ b/App/Modules/Base/resources/assets/js/_permissions.js @@ -0,0 +1,29 @@ +const Permissions = { + + methods:{ + + /** + * Check if the user permission is allowed + * + * @param permission + * @returns {string} + */ + can(permission) { + + return this._getPermissions().indexOf(permission) > -1; + }, + + /** + * Returns all the registered permissions for the user + * + * @private + */ + _getPermissions() { + + return window.C.permissions; + } + }, + +}; + +export { Permissions }; \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/js/_routes.js b/App/Modules/Base/resources/assets/js/_routes.js new file mode 100644 index 0000000..221b3b2 --- /dev/null +++ b/App/Modules/Base/resources/assets/js/_routes.js @@ -0,0 +1,63 @@ +const Routes = { + + methods:{ + + /** + * Parse and return a route by it's name + * + * @param name + * @param params + * @returns {string} + */ + route(name, params) { + + const routes = this._getRoutes().filter(route => { + + return route.name === name; + }); + + if(routes.length >= 1){ + + let url = `/${routes[0].uri}`; + + if (typeof params === 'string' || typeof params === 'number') { + + params = { + 'id': params + }; + } + + // If parameters are present parse them in to the route + if (params) { + + _.each(Object.keys(params), key => { + + const pattern = new RegExp(`{${key}}`); + + url = url.replace(pattern, params[key]); + }); + } + + return url; + + } else { + + throw Error(`Route ${name} is not found`); + } + }, + + /** + * Returns all the registered routes in the system + * + * @returns {any} + * @private + */ + _getRoutes() { + + return window.C.routes; + } + }, + +}; + +export { Routes }; \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/js/_tableHelper.js b/App/Modules/Base/resources/assets/js/_tableHelper.js new file mode 100644 index 0000000..a70f527 --- /dev/null +++ b/App/Modules/Base/resources/assets/js/_tableHelper.js @@ -0,0 +1,20 @@ +const TableHelper = { + + methods: { + + sortingChanged(context){ + + const sortFields = this.fields.filter(field => { + return field.key === context.sortBy; + }); + + window.C.sorting = { + sortBy: context.sortBy, + sortByLabel: sortFields.length ? sortFields[0].label : context.sortBy, + sortDesc: context.sortDesc + }; + } + } +}; + +export {TableHelper}; \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/js/_trans.js b/App/Modules/Base/resources/assets/js/_trans.js new file mode 100644 index 0000000..7178074 --- /dev/null +++ b/App/Modules/Base/resources/assets/js/_trans.js @@ -0,0 +1,81 @@ +const Trans = { + + methods:{ + + /** + * Translate a given string + * + * @param string + * @param params + * @returns {*} + */ + trans(string, params){ + + const parts = string.split('::'); + const module = parts[0]; + const path = parts[1]; + + // Get the trans line from the trans object + let transString = _.get(this.getModuleLangObject(module), path, string); + + const re = /(?:^|\W):(\w+)(?!\w)/g; + const matches = []; + let match; + + // Find any keys we need to parse + while (match = re.exec(transString)) { + + matches.push(match[1]); + } + + let paramsObj = {}; + + // If the passed params are a string or a number + // we create the params object + if ((typeof params === 'string' || typeof params === 'number') + && matches.length) { + + paramsObj[matches[0]] = params; + } + + // Parse values in to keys in to the trans line + _.each(Object.keys(paramsObj), key => { + + const pattern = new RegExp(`:${key}`); + + transString = transString.replace(pattern, paramsObj[key]); + }); + + return transString; + }, + + /** + * Returns the language string for the given module + * + * @param module + * @returns {*} + */ + getModuleLangObject(module){ + + if(this.getCurrentLanguage() !== 'en'){ + + return _.merge(C.langs['en'][module], C.langs[this.getCurrentLanguage()][module]); + } + + return C.langs[this.getCurrentLanguage()][module]; + }, + + /** + * Returns the current language set in the document + * + * @returns {*} + */ + getCurrentLanguage(){ + + return document.documentElement.lang; + } + }, + +}; + +export { Trans }; \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/js/bootstrap.js b/App/Modules/Base/resources/assets/js/bootstrap.js new file mode 100644 index 0000000..e44f36f --- /dev/null +++ b/App/Modules/Base/resources/assets/js/bootstrap.js @@ -0,0 +1,116 @@ +/** + * Global packages + */ +import * as Vue from 'vue'; +import BootstrapVue from 'bootstrap-vue' +import Vuelidate from 'vuelidate'; + +/** + * Common collejo Vue mixins + */ +import {Routes} from './_routes'; +import {Permissions} from './_permissions'; +import {Trans} from './_trans'; +import {Notification} from './_notificationHelper'; +import {FormHelpers} from './_formHelper'; +import {TableHelper} from './_tableHelper'; +import {PaginationHelper} from './_paginationHelper'; +import {DateTimeHelpers} from './_dateTimeHelpers'; + +/** + * Register global third party packages + */ +window._ = require('lodash'); +window.Vue = require('vue'); +window.moment = require('moment'); + +/** + * Register third party Vue packages + */ +Vue.use(BootstrapVue); +Vue.use(Vuelidate); + +/** + * Register collejo Vue components + */ +Vue.component('notification', require('./components/Notification')); + +/** + * Get CSRF token for ajax requests + */ +const token = document.head.querySelector('meta[name="token"]'); + +if (!token) { + + console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token'); +} + +/** + * Setup Axios for ajax requests + */ +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; +window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; +window.axios.defaults.headers.common['Content-Type'] = 'application/x-www-form-urlencoded'; +window.axios.interceptors.response.use(response => { + + if(response.data.data && response.data.data.redir){ + + window.location = response.data.data.redir; + } + + return response; +}, error => { + + return Promise.reject(error); +}); + +/** + * Setup Collejo global object + */ +window.C = { + mixins : { + Routes: Routes, + Permissions: Permissions, + Trans: Trans, + FormHelpers: FormHelpers, + TableHelper: TableHelper, + PaginationHelper: PaginationHelper, + DateTimeHelpers: DateTimeHelpers, + }, + routes: [], + langs: {}, + menus: [], + sorting: null, + notification: new Vue({ + mixins: [Notification], + el: '#notification', + props: { + notifications: { + default: () => [], + type: Array + } + } + }), +}; + +/** + * Import collejo form components + */ +Vue.component('c-form-input', require('./components/form/Input')); + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo' + +// window.Pusher = require('pusher-js'); + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: 'your-pusher-key' +// }); \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/js/components/Notification.vue b/App/Modules/Base/resources/assets/js/components/Notification.vue new file mode 100644 index 0000000..025da27 --- /dev/null +++ b/App/Modules/Base/resources/assets/js/components/Notification.vue @@ -0,0 +1,31 @@ + + + \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/js/components/form/Input.vue b/App/Modules/Base/resources/assets/js/components/form/Input.vue new file mode 100644 index 0000000..3130720 --- /dev/null +++ b/App/Modules/Base/resources/assets/js/components/form/Input.vue @@ -0,0 +1,112 @@ + + + \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/sass/_auth.scss b/App/Modules/Base/resources/assets/sass/_auth.scss new file mode 100644 index 0000000..9a965f6 --- /dev/null +++ b/App/Modules/Base/resources/assets/sass/_auth.scss @@ -0,0 +1,17 @@ +@import "../../../../Base/resources/assets/sass/variables"; + +body.auth-body{ + background-size: cover; + background: lighten($brand-primary, 25) url("../../images/auth-bg.svg"); +} + +.brand-text { + font-family: $font-family-brand; +} + +.auth-logo{ + background: url("../../images/collejo.svg") center center no-repeat; + height: 9.375rem; + background-size: contain; + margin-bottom: $box-padding; +} \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/sass/_bs.scss b/App/Modules/Base/resources/assets/sass/_bs.scss new file mode 100644 index 0000000..e535d27 --- /dev/null +++ b/App/Modules/Base/resources/assets/sass/_bs.scss @@ -0,0 +1,36 @@ +@import "~bootstrap/scss/functions"; +//@import "~bootstrap/scss/variables"; +@import "variables"; +@import "~bootstrap/scss/mixins"; +@import "~bootstrap/scss/root"; +@import "~bootstrap/scss/reboot"; +@import "~bootstrap/scss/type"; +@import "~bootstrap/scss/images"; +//@import "~bootstrap/scss/code"; +@import "~bootstrap/scss/grid"; +@import "~bootstrap/scss/tables"; +@import "~bootstrap/scss/forms"; +@import "~bootstrap/scss/buttons"; +@import "~bootstrap/scss/transitions"; +@import "~bootstrap/scss/dropdown"; +@import "~bootstrap/scss/button-group"; +@import "~bootstrap/scss/input-group"; +@import "~bootstrap/scss/custom-forms"; +@import "~bootstrap/scss/nav"; +@import "~bootstrap/scss/navbar"; +@import "~bootstrap/scss/card"; +@import "~bootstrap/scss/breadcrumb"; +@import "~bootstrap/scss/pagination"; +@import "~bootstrap/scss/badge"; +//@import "~bootstrap/scss/jumbotron"; +@import "~bootstrap/scss/alert"; +@import "~bootstrap/scss/progress"; +@import "~bootstrap/scss/media"; +@import "~bootstrap/scss/list-group"; +@import "~bootstrap/scss/close"; +@import "~bootstrap/scss/modal"; +@import "~bootstrap/scss/tooltip"; +@import "~bootstrap/scss/popover"; +//@import "~bootstrap/scss/carousel"; +@import "~bootstrap/scss/utilities"; +@import "~bootstrap/scss/print"; diff --git a/App/Modules/Base/resources/assets/sass/_checkbox.scss b/App/Modules/Base/resources/assets/sass/_checkbox.scss new file mode 100644 index 0000000..eebfe3a --- /dev/null +++ b/App/Modules/Base/resources/assets/sass/_checkbox.scss @@ -0,0 +1,5 @@ +@import "variables"; + +.checkbox-row{ + margin-bottom: $box-padding; +} \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/sass/_common.scss b/App/Modules/Base/resources/assets/sass/_common.scss new file mode 100644 index 0000000..c4e4307 --- /dev/null +++ b/App/Modules/Base/resources/assets/sass/_common.scss @@ -0,0 +1,93 @@ +@import "variables"; + +.navbar{ + .navbar-brand { + background: url("../../images/collejo.svg") left center no-repeat; + padding-left: 2.188rem; + height: 30px; + background-size: contain; + + .brand-name { + position: relative; + top: -0.3125rem + } + } + + .dropdown-menu{ + font-size: 0.875rem !important; + } +} + +.notifications-wrap { + position: fixed; + top: 0; + width: 100%; + height: 0; + + .notifications-list { + width: 33.33%; + left: 33.33%; + position: absolute; + margin-top: $box-padding; + } + + .alert-dismissible .close { + padding: 0.55rem 1.05rem; + } +} + +.landing-screen{ + + min-height: 80vh; + + i.fa{ + font-size: 6.25rem; + color: lighten($gray-100, 50%); + margin-top: 3.125rem; + margin-bottom: $box-padding * 2; + } +} + +.invalid-feedback { + display: block !important; +} + + +.vdp-datepicker{ + input{ + background-color:transparent !important; + } +} + +.dropdown-toggle::after{ + vertical-align: 0.18em; +} + +.row-column-group{ + padding: 15px; +} + +.preloader{ + background: $gray-400; + background-image: linear-gradient(to right, $gray-400 0%, $gray-200 20%, $gray-400 40%, $gray-300 100%); + background-repeat: no-repeat; + background-size: 800px 104px; + display: inline-block; + position: relative; + + -webkit-animation-duration: 1.5s; + -webkit-animation-fill-mode: forwards; + -webkit-animation-iteration-count: infinite; + -webkit-animation-name: placeholderShimmer; + -webkit-animation-timing-function: linear; +} + +@-webkit-keyframes placeholderShimmer { + 0% { + background-position: -468px 0; + } + + 100% { + background-position: 468px 0; + } +} \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/sass/_setup.scss b/App/Modules/Base/resources/assets/sass/_setup.scss new file mode 100644 index 0000000..04eab37 --- /dev/null +++ b/App/Modules/Base/resources/assets/sass/_setup.scss @@ -0,0 +1,12 @@ + +.setup-page{ + .card{ + margin-top: 15%; + min-height: 50vh; + } + + .setup-required-card{ + margin-top: 60px; + margin-bottom: 60px; + } +} \ No newline at end of file diff --git a/App/Modules/Base/resources/assets/sass/_variables.scss b/App/Modules/Base/resources/assets/sass/_variables.scss new file mode 100644 index 0000000..9705bc2 --- /dev/null +++ b/App/Modules/Base/resources/assets/sass/_variables.scss @@ -0,0 +1,24 @@ +@import "~bootstrap/scss/functions"; +@import "~bootstrap/scss/variables"; + +// Body +$body-bg: $gray-100; + +// Borders +$box-padding: ($grid-gutter-width / 2); + +// Brands +$brand-primary: #3498db; +$brand-info: #3498db; +$brand-success: #27ae60; +$brand-warning: #e67e22; +$brand-danger: #c0392b; + +// Typography +$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/"; +$font-family-sans-serif: "Roboto", sans-serif; +$font-family-serif: 'Roboto', sans-serif; +$font-family-brand: "Raleway", Helvetica, Arial; +$font-size-base: .875rem; +$line-height-base: 1.6; +$text-color: #636b6f; diff --git a/App/Modules/Base/resources/assets/sass/app.scss b/App/Modules/Base/resources/assets/sass/app.scss new file mode 100644 index 0000000..8f9b473 --- /dev/null +++ b/App/Modules/Base/resources/assets/sass/app.scss @@ -0,0 +1,17 @@ +// Fonts +@import url("https://fonts.googleapis.com/css?family=Raleway:300,400,600"); +@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,600"); +@import "~@fortawesome/fontawesome-free/scss/fontawesome.scss"; +@import "~@fortawesome/fontawesome-free/scss/solid.scss"; +@import "~@fortawesome/fontawesome-free/scss/brands.scss"; + +// Bootstrap +@import "bs"; + +// Collejo components +@import "common"; +@import "setup"; +@import "checkbox"; + +// Layouts +@import "auth"; diff --git a/src/resources/assets/fonts/FontAwesome.otf b/App/Modules/Base/resources/fonts/FontAwesome.otf similarity index 100% rename from src/resources/assets/fonts/FontAwesome.otf rename to App/Modules/Base/resources/fonts/FontAwesome.otf diff --git a/src/resources/assets/fonts/fontawesome-webfont.eot b/App/Modules/Base/resources/fonts/fontawesome-webfont.eot similarity index 100% rename from src/resources/assets/fonts/fontawesome-webfont.eot rename to App/Modules/Base/resources/fonts/fontawesome-webfont.eot diff --git a/src/resources/assets/fonts/fontawesome-webfont.svg b/App/Modules/Base/resources/fonts/fontawesome-webfont.svg similarity index 100% rename from src/resources/assets/fonts/fontawesome-webfont.svg rename to App/Modules/Base/resources/fonts/fontawesome-webfont.svg diff --git a/src/resources/assets/fonts/fontawesome-webfont.ttf b/App/Modules/Base/resources/fonts/fontawesome-webfont.ttf similarity index 100% rename from src/resources/assets/fonts/fontawesome-webfont.ttf rename to App/Modules/Base/resources/fonts/fontawesome-webfont.ttf diff --git a/src/resources/assets/fonts/fontawesome-webfont.woff b/App/Modules/Base/resources/fonts/fontawesome-webfont.woff similarity index 100% rename from src/resources/assets/fonts/fontawesome-webfont.woff rename to App/Modules/Base/resources/fonts/fontawesome-webfont.woff diff --git a/src/resources/assets/fonts/fontawesome-webfont.woff2 b/App/Modules/Base/resources/fonts/fontawesome-webfont.woff2 similarity index 100% rename from src/resources/assets/fonts/fontawesome-webfont.woff2 rename to App/Modules/Base/resources/fonts/fontawesome-webfont.woff2 diff --git a/App/Modules/Base/resources/images/auth-bg.svg b/App/Modules/Base/resources/images/auth-bg.svg new file mode 100644 index 0000000..f69e573 --- /dev/null +++ b/App/Modules/Base/resources/images/auth-bg.svg @@ -0,0 +1,2902 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/App/Modules/Base/resources/images/collejo.svg b/App/Modules/Base/resources/images/collejo.svg new file mode 100644 index 0000000..47b126e --- /dev/null +++ b/App/Modules/Base/resources/images/collejo.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/resources/assets/images/user_avatar_medium.png b/App/Modules/Base/resources/images/user_avatar_medium.png similarity index 100% rename from src/resources/assets/images/user_avatar_medium.png rename to App/Modules/Base/resources/images/user_avatar_medium.png diff --git a/src/resources/assets/images/user_avatar_small.png b/App/Modules/Base/resources/images/user_avatar_small.png similarity index 100% rename from src/resources/assets/images/user_avatar_small.png rename to App/Modules/Base/resources/images/user_avatar_small.png diff --git a/App/Modules/Base/resources/lang/en/common.php b/App/Modules/Base/resources/lang/en/common.php new file mode 100644 index 0000000..a3abfe0 --- /dev/null +++ b/App/Modules/Base/resources/lang/en/common.php @@ -0,0 +1,51 @@ + 'Create New', + 'continue' => 'Continue', + 'ok' => 'Ok', + 'yes' => 'Yes', + 'no' => 'No', + 'save' => 'Save', + 'saving' => 'Saving...', + 'try_again' => 'Try Again', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'remove' => 'Remove', + 'disable' => 'Disable', + 'disabled' => 'Disabled', + 'enable' => 'Enable', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'create' => 'Create New', + 'list' => 'List', + 'search' => 'Search', + 'search_filter' => 'Search Filter', + 'clear_search' => 'Clear', + 'sorting_by' => 'Sorting by', + 'actions' => 'Actions', + 'add_row' => 'Add Row', + 'continue' => 'Continue', + + 'dashboard' => 'Dashboard', + 'go_to_dashboard' => 'Go To Dashboard', + + 'delete_confirm' => 'Are you sure you want to delete this item?', + 'action_required' => 'Action Required', + 'copyright_text' => 'Powered by '.config('app.name').'', + 'copyright_link' => 'https://github.com/codebreez/collejo-app', + + 'authorization_failed' => 'You do not have permission to do this action', + 'ajax_token_mismatch' => 'Could not fulfill your request. Please refresh the page and try again', + 'ajax_unauthorized' => 'You are not authorized to perform this action', + 'validation_failed' => 'Validation Failed', + 'validation_correct' => 'Please correct them and try again', + 'select' => 'Select...', +]; diff --git a/App/Modules/Base/resources/lang/en/entities.php b/App/Modules/Base/resources/lang/en/entities.php new file mode 100644 index 0000000..f37bbb9 --- /dev/null +++ b/App/Modules/Base/resources/lang/en/entities.php @@ -0,0 +1,15 @@ + [ + 'singular' => 'Grade', //'Course', + 'plural' => 'Grades', //'Courses' + ], + 'term' => [ + 'singular' => 'Term', //'Semester', + 'plural' => 'Terms', //'Semesters', + ], +]; diff --git a/App/Modules/Base/resources/lang/en/errors.php b/App/Modules/Base/resources/lang/en/errors.php new file mode 100644 index 0000000..7dcc42a --- /dev/null +++ b/App/Modules/Base/resources/lang/en/errors.php @@ -0,0 +1,8 @@ + 'The requested resource no longer exists.', + '403' => 'You don\'t have permission to view this page.', + '404' => 'The page you requested cannot be found.', + '500' => 'Something went terribly wrong. Couldn\'t complete your request.', +]; diff --git a/App/Modules/Base/resources/lang/en/menu.php b/App/Modules/Base/resources/lang/en/menu.php new file mode 100644 index 0000000..a4d5860 --- /dev/null +++ b/App/Modules/Base/resources/lang/en/menu.php @@ -0,0 +1,5 @@ + 'Administration', +]; diff --git a/src/resources/lang/en/pagination.php b/App/Modules/Base/resources/lang/en/pagination.php similarity index 100% rename from src/resources/lang/en/pagination.php rename to App/Modules/Base/resources/lang/en/pagination.php diff --git a/src/resources/lang/en/setup.php b/App/Modules/Base/resources/lang/en/setup.php similarity index 54% rename from src/resources/lang/en/setup.php rename to App/Modules/Base/resources/lang/en/setup.php index 6135360..2caf561 100644 --- a/src/resources/lang/en/setup.php +++ b/App/Modules/Base/resources/lang/en/setup.php @@ -1,15 +1,17 @@ - 'Documentation', - 'guide' => 'View Installation Guide', - - 'incomplete' => 'It looks like you haven\'t installed collejo yet.' -]; \ No newline at end of file + 'Setup', + + 'documentation' => 'Documentation', + 'guide' => 'View Installation Guide', + + 'incomplete' => 'It looks like you haven\'t installed Collejo.', +]; diff --git a/src/resources/lang/en/validation.php b/App/Modules/Base/resources/lang/en/validation.php similarity index 97% rename from src/resources/lang/en/validation.php rename to App/Modules/Base/resources/lang/en/validation.php index a364914..c07cc98 100644 --- a/src/resources/lang/en/validation.php +++ b/App/Modules/Base/resources/lang/en/validation.php @@ -104,8 +104,8 @@ | */ - 'attributes' => [], - 'invalid_file' => 'Invalid File', + 'attributes' => [], + 'invalid_file' => 'Invalid File', 'invalid_file_size' => 'Invalid File Size', - 'invalid_file_type' => 'Invalid File Type' + 'invalid_file_type' => 'Invalid File Type', ]; diff --git a/src/resources/views/errors/400.blade.php b/App/Modules/Base/resources/views/errors/400.blade.php similarity index 84% rename from src/resources/views/errors/400.blade.php rename to App/Modules/Base/resources/views/errors/400.blade.php index db5e02a..83d02b9 100644 --- a/src/resources/views/errors/400.blade.php +++ b/App/Modules/Base/resources/views/errors/400.blade.php @@ -1,14 +1,14 @@ -@extends('collejo::layouts.errors') - -@section('title', '400') - -@section('content') - -
- -

{{ trans('errors.400') }}

-
- {{ trans('common.go_to_dashboard') }} -
- +@extends('base::layouts.errors') + +@section('title', '400') + +@section('content') + +
+ +

{{ trans('errors.400') }}

+
+ {{ trans('common.go_to_dashboard') }} +
+ @endsection \ No newline at end of file diff --git a/src/resources/views/errors/403.blade.php b/App/Modules/Base/resources/views/errors/403.blade.php similarity index 84% rename from src/resources/views/errors/403.blade.php rename to App/Modules/Base/resources/views/errors/403.blade.php index 3dcd282..45b03aa 100644 --- a/src/resources/views/errors/403.blade.php +++ b/App/Modules/Base/resources/views/errors/403.blade.php @@ -1,14 +1,14 @@ -@extends('collejo::layouts.errors') - -@section('title', '403') - -@section('content') - -
- -

{{ trans('errors.403') }}

-
- {{ trans('common.go_to_dashboard') }} -
- +@extends('base::layouts.errors') + +@section('title', '403') + +@section('content') + +
+ +

{{ trans('errors.403') }}

+
+ {{ trans('common.go_to_dashboard') }} +
+ @endsection \ No newline at end of file diff --git a/src/resources/views/errors/404.blade.php b/App/Modules/Base/resources/views/errors/404.blade.php similarity index 84% rename from src/resources/views/errors/404.blade.php rename to App/Modules/Base/resources/views/errors/404.blade.php index aa9c836..981c688 100644 --- a/src/resources/views/errors/404.blade.php +++ b/App/Modules/Base/resources/views/errors/404.blade.php @@ -1,14 +1,14 @@ -@extends('collejo::layouts.errors') - -@section('title', '404') - -@section('content') - -
- -

{{ trans('errors.404') }}

-
- {{ trans('common.go_to_dashboard') }} -
- +@extends('base::layouts.errors') + +@section('title', '404') + +@section('content') + +
+ +

{{ trans('errors.404') }}

+
+ {{ trans('common.go_to_dashboard') }} +
+ @endsection \ No newline at end of file diff --git a/src/resources/views/errors/500.blade.php b/App/Modules/Base/resources/views/errors/500.blade.php similarity index 84% rename from src/resources/views/errors/500.blade.php rename to App/Modules/Base/resources/views/errors/500.blade.php index 5d92b13..273099d 100644 --- a/src/resources/views/errors/500.blade.php +++ b/App/Modules/Base/resources/views/errors/500.blade.php @@ -1,14 +1,14 @@ -@extends('collejo::layouts.errors') - -@section('title', '500') - -@section('content') - -
- -

{{ trans('errors.500') }}

-
- {{ trans('common.go_to_dashboard') }} -
- +@extends('base::layouts.errors') + +@section('title', '500') + +@section('content') + +
+ +

{{ trans('errors.500') }}

+
+ {{ trans('common.go_to_dashboard') }} +
+ @endsection \ No newline at end of file diff --git a/App/Modules/Base/resources/views/layouts/partials/footer.blade.php b/App/Modules/Base/resources/views/layouts/partials/footer.blade.php new file mode 100644 index 0000000..7dccbfd --- /dev/null +++ b/App/Modules/Base/resources/views/layouts/partials/footer.blade.php @@ -0,0 +1,23 @@ + + +
+
+ +
+
+ + + + + +@yield('scripts') \ No newline at end of file diff --git a/App/Modules/Base/resources/views/layouts/partials/head.blade.php b/App/Modules/Base/resources/views/layouts/partials/head.blade.php new file mode 100644 index 0000000..3cad677 --- /dev/null +++ b/App/Modules/Base/resources/views/layouts/partials/head.blade.php @@ -0,0 +1,15 @@ + + + + + + + + + + @yield('title') - {{config('app.name')}} + + + @yield('styles') + + \ No newline at end of file diff --git a/App/Modules/Base/resources/views/layouts/setup.blade.php b/App/Modules/Base/resources/views/layouts/setup.blade.php new file mode 100644 index 0000000..37dd6fe --- /dev/null +++ b/App/Modules/Base/resources/views/layouts/setup.blade.php @@ -0,0 +1,20 @@ + + + +@include('base::layouts.partials.head') + + + +
+ +
+ + @yield('content') + +
+
+ +@include('base::layouts.partials.footer') + + + diff --git a/App/Modules/Base/resources/views/setup/incomplete.blade.php b/App/Modules/Base/resources/views/setup/incomplete.blade.php new file mode 100644 index 0000000..bc4386a --- /dev/null +++ b/App/Modules/Base/resources/views/setup/incomplete.blade.php @@ -0,0 +1,24 @@ +@extends('base::layouts.setup') + +@section('title', trans('base::setup.title')) + +@section('content') + +
+ +
+ +
+ + +

{{ trans('base::setup.incomplete') }}

+ {{ trans('base::setup.guide') }} + {{ trans('base::setup.documentation') }} + +
+ +
+ +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/Contracts/ClassRepository.php b/App/Modules/Classes/Contracts/ClassRepository.php new file mode 100644 index 0000000..a3bb7dd --- /dev/null +++ b/App/Modules/Classes/Contracts/ClassRepository.php @@ -0,0 +1,46 @@ +authorize('view_batch_details'); + + return view('classes::view_batch_terms', [ + 'batch' => $this->classRepository->findBatch($batchId), + ]); + } + + /** + * Returns the view for Batch Term edit UI. + * + * @param $batchId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getBatchTermsEdit($batchId) + { + $this->authorize('add_edit_batch'); + + return view('classes::edit_batch_terms', [ + 'batch' => $this->classRepository->findBatch($batchId), + 'terms_form_validator' => $this->jsValidator(CreateTermRequest::class), + ]); + } + + /** + * Save Batch Grade data. + * + * @param Request $request + * @param $batchId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postBatchGradesEdit(Request $request, $batchId) + { + $this->authorize('add_edit_batch'); + + $this->classRepository->assignGradesToBatch($request::get('grades', []), $batchId); + + return $this->printJson(true, [], trans('classes::batch.batch_updated')); + } + + /** + * @param $batchId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getBatchGradesView($batchId) + { + $this->authorize('view_batch_details'); + + return view('classes::view_batch_grades', [ + 'batch' => $this->classRepository->findBatch($batchId), + ]); + } + + /** + * Returns the view for Batch Grade edit. + * + * @param $batchId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getBatchGradesEdit($batchId) + { + $this->authorize('add_edit_batch'); + + return view('classes::edit_batch_grades', [ + 'batch' => $this->classRepository->findBatch($batchId, 'grades'), + 'grades' => $this->classRepository->getGrades()->get(), + ]); + } + + /** + * Deletes a Batch Term. + * + * @param $batchId + * @param $termId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function getBatchTermDelete($batchId, $termId) + { + $this->authorize('add_edit_batch'); + + $this->classRepository->deleteTerm($termId, $batchId); + + return $this->printJson(true, [], trans('classes::term.term_deleted')); + } + + /** + * Save Batch Term. + * + * @param UpdateTermRequest $request + * @param $batchId + * @param $termId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postBatchTermEdit(UpdateTermRequest $request, $batchId, $termId) + { + $this->authorize('add_edit_batch'); + + $attributes = $request->all(); + + $attributes['start_date'] = toUTC($attributes['start_date']); + $attributes['end_date'] = toUTC($attributes['end_date']); + + $term = $this->classRepository->updateTerm($attributes, $termId, $batchId); + + return $this->printJson(true, [ + 'term' => $term, + ], trans('classes::term.term_updated')); + } + + /** + * Creates a new Batch Term. + * + * @param CreateTermRequest $request + * @param $batchId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postBatchTermNew(CreateTermRequest $request, $batchId) + { + $this->authorize('add_edit_batch'); + + $term = $this->classRepository->createTerm($request->all(), $batchId); + + return $this->printJson(true, [ + 'term' => $term, + ], trans('classes::term.term_created')); + } + + /** + * Returns the Batch Terms. + * + * @param $batchId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getBatchTerms($batchId) + { + $this->authorize('view_batch_details'); + + return view('classes::view_batch_terms', [ + 'batch' => $this->classRepository->findBatch($batchId), + ]); + } + + /** + * Get Batch Details view. + * + * @param $batchId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getBatchDetailsView($batchId) + { + $this->authorize('view_batch_details'); + + return view('classes::view_batch_details', [ + 'batch' => $this->classRepository->findBatch($batchId), + ]); + } + + /** + * Get the Batch Details edit form. + * + * @param $batchId + * + * @throws \Exception + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getBatchDetailsEdit($batchId) + { + $this->authorize('add_edit_batch'); + + return view('classes::edit_batch_details', [ + 'batch' => $this->classRepository->findBatch($batchId), + 'batch_form_validator' => $this->jsValidator(UpdateBatchRequest::class), + ]); + } + + /** + * Save batch Details. + * + * @param UpdateBatchRequest $request + * @param $batchId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postBatchDetailsEdit(UpdateBatchRequest $request, $batchId) + { + $this->authorize('add_edit_batch'); + + $this->classRepository->updateBatch($request->all(), $batchId); + + return $this->printJson(true, [], trans('classes::batch.batch_updated')); + } + + /** + * Create a new Batch. + * + * @param CreateBatchRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postBatchNew(CreateBatchRequest $request) + { + $this->authorize('add_edit_batch'); + + $batch = $this->classRepository->createBatch($request->all()); + + return $this->printRedirect(route('batch.details.edit', $batch->id)); + } + + /** + * Get form for new Batch. + * + * @throws \Exception + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getBatchNew() + { + $this->authorize('add_edit_batch'); + + return view('classes::edit_batch_details', [ + 'batch' => null, + 'batch_form_validator' => $this->jsValidator(UpdateBatchRequest::class), + ]); + } + + /** + * Render a list of batches. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getBatchList(BatchListCriteria $criteria) + { + $this->authorize('list_batches'); + + if (!$this->classRepository->getGrades()->count()) { + return view('dashboard::landings.action_required', [ + 'message' => trans('classes::batch.no_grades_defined'), + 'help' => trans('classes::batch.no_grades_defined_help'), + 'action' => trans('classes::grade.create_grade'), + 'route' => route('grade.new'), + ]); + } + + return view('classes::batches_list', [ + 'criteria' => $criteria, + 'batches' => $this->classRepository + ->search($criteria) + ->with('terms') + ->paginate(), + ]); + } + + /** + * View Grades for a Batch. + * + * @param Request $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function getBatchGrades(Request $request) + { + $this->authorize('view_batch_details'); + + return $this->printJson(true, + $this->classRepository->findBatch($request::get('batch_id'))->grades->pluck('name', 'id')); + } + + public function __construct(ClassRepository $classRepository) + { + $this->classRepository = $classRepository; + } +} diff --git a/App/Modules/Classes/Http/Controllers/GradeController.php b/App/Modules/Classes/Http/Controllers/GradeController.php new file mode 100644 index 0000000..f236ce8 --- /dev/null +++ b/App/Modules/Classes/Http/Controllers/GradeController.php @@ -0,0 +1,269 @@ +authorize('add_edit_class'); + + $this->classRepository->deleteClass($classId, $gradeId); + + return $this->printJson(true, [], trans('classes::class.class_deleted')); + } + + /** + * Save Grade Class. + * + * @param UpdateClassRequest $request + * @param $gradeId + * @param $classId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postGradeClassEdit(UpdateClassRequest $request, $gradeId, $classId) + { + $this->authorize('add_edit_class'); + + $class = $this->classRepository->updateClass($request->all(), $classId, $gradeId); + + return $this->printJson(true, [ + 'grade' => $this->classRepository->findGrade($gradeId), + 'class' => $class, + ], trans('classes::class.class_updated')); + } + + /** + * Create Grade Class. + * + * @param CreateClassRequest $request + * @param $gradeId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postGradeClassNew(CreateClassRequest $request, $gradeId) + { + $this->authorize('add_edit_class'); + + $class = $this->classRepository->createClass($request->all(), $gradeId); + + return $this->printJson(true, [ + 'grade' => $this->classRepository->findGrade($gradeId), + 'class' => $class, + ], trans('classes::class.class_created')); + } + + /** + * Get Grade Details view. + * + * @param $gradeId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGradeDetailsView($gradeId) + { + $this->authorize('view_grade_details'); + + return view('classes::view_grade_details', [ + 'grade' => $this->classRepository->findGrade($gradeId), + ]); + } + + /** + * View Grade Classes. + * + * @param $gradeId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGradeClassesView($gradeId) + { + $this->authorize('list_classes'); + + return view('classes::view_grade_classes', [ + 'grade' => $this->classRepository->findGrade($gradeId), + ]); + } + + /** + * Grade Classes Edit view. + * + * @param $gradeId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGradeClassesEdit($gradeId) + { + $this->authorize('add_edit_class'); + + return view('classes::edit_grade_classes', [ + 'grade' => $this->classRepository->findGrade($gradeId), + ]); + } + + /** + * Grade Class view. + * + * @param $gradeId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGradeClassView($gradeId, $classId) + { + $this->authorize('view_class_details'); + + return view('classes::view_class_details', [ + 'class' => $this->classRepository->findClass($classId, $gradeId), + 'grade' => $this->classRepository->findGrade($gradeId), + ]); + } + + /** + * Saves the Grade details. + * + * @param UpdateGradeRequest $request + * @param $gradeId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postGradeDetailsEdit(UpdateGradeRequest $request, $gradeId) + { + $this->authorize('add_edit_grade'); + + $this->classRepository->updateGrade($request->all(), $gradeId); + + return $this->printJson(true, [], trans('classes::grade.grade_updated')); + } + + /** + * Returns the edit details for Grade. + * + * @param $gradeId + * + * @throws \Exception + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGradeDetailsEdit($gradeId) + { + $this->authorize('add_edit_grade'); + + return view('classes::edit_grade_details', [ + 'grade' => $this->classRepository->findGrade($gradeId), + 'grade_form_validator' => $this->jsValidator(UpdateGradeRequest::class), + ]); + } + + /** + * Saves a new Grade. + * + * @param CreateGradeRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postGradeNew(CreateGradeRequest $request) + { + $this->authorize('add_edit_grade'); + + $grade = $this->classRepository->createGrade($request->all()); + + return $this->printRedirect(route('grade.classes.edit', $grade->id)); + } + + /** + * Render new Grade form. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * @throws \Exception + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGradeNew() + { + $this->authorize('add_edit_grade'); + + return view('classes::edit_grade_details', [ + 'grade' => null, + 'grade_form_validator' => $this->jsValidator(CreateGradeRequest::class), + ]); + } + + /** + * Render Grades list. + * + * @param Request $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGradeList(Request $request) + { + $this->authorize('list_grades'); + + return view('classes::grades_list', [ + 'grades' => $this->classRepository->getGrades()->with('classes') + ->paginate(), + ]); + } + + /** + * Returns the Classes for the Grade. + * + * @param Request $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function getGradeClasses(Request $request) + { + $this->authorize('list_classes'); + + return $this->printJson(true, $this->classRepository + ->findGrade($request::get('grade_id'))->classes->pluck('name', 'id')); + } + + public function __construct(ClassRepository $classRepository) + { + $this->classRepository = $classRepository; + } +} diff --git a/App/Modules/Classes/Http/Requests/CreateBatchRequest.php b/App/Modules/Classes/Http/Requests/CreateBatchRequest.php new file mode 100644 index 0000000..89dff61 --- /dev/null +++ b/App/Modules/Classes/Http/Requests/CreateBatchRequest.php @@ -0,0 +1,22 @@ + 'required', + ]; + } + + public function attributes() + { + return [ + 'name' => trans('classes::batch.name'), + ]; + } +} diff --git a/App/Modules/Classes/Http/Requests/CreateClassRequest.php b/App/Modules/Classes/Http/Requests/CreateClassRequest.php new file mode 100644 index 0000000..1803a11 --- /dev/null +++ b/App/Modules/Classes/Http/Requests/CreateClassRequest.php @@ -0,0 +1,22 @@ + 'required', + ]; + } + + public function attributes() + { + return [ + 'name' => trans('classes::class.name'), + ]; + } +} diff --git a/App/Modules/Classes/Http/Requests/CreateGradeRequest.php b/App/Modules/Classes/Http/Requests/CreateGradeRequest.php new file mode 100644 index 0000000..f858f88 --- /dev/null +++ b/App/Modules/Classes/Http/Requests/CreateGradeRequest.php @@ -0,0 +1,22 @@ + 'required', + ]; + } + + public function attributes() + { + return [ + 'name' => trans('classes::grade.name'), + ]; + } +} diff --git a/App/Modules/Classes/Http/Requests/CreateTermRequest.php b/App/Modules/Classes/Http/Requests/CreateTermRequest.php new file mode 100644 index 0000000..22f5cfc --- /dev/null +++ b/App/Modules/Classes/Http/Requests/CreateTermRequest.php @@ -0,0 +1,26 @@ + 'required', + 'start_date' => 'required', + 'end_date' => 'required', + ]; + } + + public function attributes() + { + return [ + 'name' => trans('classes::term.name'), + 'start_date' => trans('classes::batch.start_date'), + 'end_date' => trans('classes::batch.end_date'), + ]; + } +} diff --git a/App/Modules/Classes/Http/Requests/UpdateBatchRequest.php b/App/Modules/Classes/Http/Requests/UpdateBatchRequest.php new file mode 100644 index 0000000..c4eceab --- /dev/null +++ b/App/Modules/Classes/Http/Requests/UpdateBatchRequest.php @@ -0,0 +1,22 @@ +rules(); + } + + public function attributes() + { + $createRequest = new CreateBatchRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Classes/Http/Requests/UpdateClassRequest.php b/App/Modules/Classes/Http/Requests/UpdateClassRequest.php new file mode 100644 index 0000000..73ac32d --- /dev/null +++ b/App/Modules/Classes/Http/Requests/UpdateClassRequest.php @@ -0,0 +1,22 @@ +rules(); + } + + public function attributes() + { + $createRequest = new CreateClassRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Classes/Http/Requests/UpdateGradeRequest.php b/App/Modules/Classes/Http/Requests/UpdateGradeRequest.php new file mode 100644 index 0000000..c809262 --- /dev/null +++ b/App/Modules/Classes/Http/Requests/UpdateGradeRequest.php @@ -0,0 +1,22 @@ +rules(); + } + + public function attributes() + { + $createRequest = new CreateGradeRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Classes/Http/Requests/UpdateTermRequest.php b/App/Modules/Classes/Http/Requests/UpdateTermRequest.php new file mode 100644 index 0000000..28c32b5 --- /dev/null +++ b/App/Modules/Classes/Http/Requests/UpdateTermRequest.php @@ -0,0 +1,22 @@ +rules(); + } + + public function attributes() + { + $createRequest = new CreateTermRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Classes/Http/menus.php b/App/Modules/Classes/Http/menus.php new file mode 100644 index 0000000..49def18 --- /dev/null +++ b/App/Modules/Classes/Http/menus.php @@ -0,0 +1,13 @@ +setParent($parent) + ->setPermission('list_batches') + ->setPath('batches.list'); + + Menu::create('grades.list', trans('classes::menu.grades')) + ->setParent($parent) + ->setPermission('list_grades') + ->setPath('grades.list'); +})->setOrder(10); diff --git a/App/Modules/Classes/Http/routes.php b/App/Modules/Classes/Http/routes.php new file mode 100644 index 0000000..440f35b --- /dev/null +++ b/App/Modules/Classes/Http/routes.php @@ -0,0 +1,63 @@ + 'dashboard', 'middleware' => 'auth'], function () { + Route::group(['prefix' => 'batches'], function () { + Route::get('/list', 'BatchController@getBatchList')->name('batches.list'); + }); + + Route::group(['prefix' => 'batch'], function () { + Route::get('/grades', 'BatchController@getBatchGrades')->middleware('ajax')->name('batch.grades.search'); + + Route::get('/new', 'BatchController@getBatchNew')->name('batch.new'); + Route::post('/new', 'BatchController@postBatchNew'); + + Route::get('/{id}/details/view', 'BatchController@getBatchDetailsView')->name('batch.details.view'); + Route::get('/{id}/details/edit', 'BatchController@getBatchDetailsEdit')->name('batch.details.edit'); + Route::post('/{id}/details/edit', 'BatchController@postBatchDetailsEdit'); + + Route::get('/{id}/terms/view', 'BatchController@getBatchTermsView')->name('batch.terms.view'); + Route::get('/{id}/terms/edit', 'BatchController@getBatchTermsEdit')->name('batch.terms.edit'); + + Route::get('/{id}/term/new', 'BatchController@getBatchTermNew')->name('batch.term.new'); + Route::post('/{id}/term/new', 'BatchController@postBatchTermNew'); + + Route::get('/{id}/term/{tid}/edit', 'BatchController@getBatchTermEdit')->name('batch.term.edit'); + Route::post('/{id}/term/{tid}/edit', 'BatchController@postBatchTermEdit'); + + Route::delete('/{id}/term/{tid}/delete', 'BatchController@getBatchTermDelete')->name('batch.term.delete'); + + Route::get('/{id}/grades/view', 'BatchController@getBatchGradesView')->name('batch.grades.view'); + Route::get('/{id}/grades/edit', 'BatchController@getBatchGradesEdit')->name('batch.grades.edit'); + Route::post('/{id}/grades/edit', 'BatchController@postBatchGradesEdit'); + }); + + Route::group(['prefix' => 'grades'], function () { + Route::get('/list', 'GradeController@getGradeList')->name('grades.list'); + }); + + Route::group(['prefix' => 'grade'], function () { + Route::get('/new', 'GradeController@getGradeNew')->name('grade.new'); + Route::post('/new', 'GradeController@postGradeNew'); + + Route::get('/{id}/details/view', 'GradeController@getGradeDetailsView')->name('grade.details.view'); + Route::get('/{id}/details/edit', 'GradeController@getGradeDetailsEdit')->name('grade.details.edit'); + Route::post('/{id}/details/edit', 'GradeController@postGradeDetailsEdit'); + + Route::delete('/{id}/delete', 'GradeController@getDelete')->name('grade.delete'); + + Route::get('/{id}/classes/view', 'GradeController@getGradeClassesView')->name('grade.classes.view'); + Route::get('/{id}/classes/edit', 'GradeController@getGradeClassesEdit')->name('grade.classes.edit'); + + Route::get('/{id}/class/new', 'GradeController@getGradeClassNew')->name('grade.class.new'); + Route::post('/{id}/class/new', 'GradeController@postGradeClassNew'); + + Route::get('/{id}/class/{cid}/edit', 'GradeController@getGradeClassEdit')->name('grade.class.edit'); + Route::post('/{id}/class/{cid}/edit', 'GradeController@postGradeClassEdit'); + + Route::get('/{id}/class/{cid}/view', 'GradeController@getGradeClassView')->name('grade.class.details.view'); + + Route::delete('/{id}/class/{cid}/delete', 'GradeController@getGradeClassDelete')->name('grade.class.delete'); + + Route::get('/classes', 'GradeController@getGradeClasses')->middleware('ajax')->name('grade.classes.search'); + }); +}); diff --git a/App/Modules/Classes/Models/Batch.php b/App/Modules/Classes/Models/Batch.php new file mode 100644 index 0000000..079ec66 --- /dev/null +++ b/App/Modules/Classes/Models/Batch.php @@ -0,0 +1,47 @@ +hasMany(Term::class)->orderBy('start_date'); + } + + /** + * Returns the relative Grades for this Batch. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ + public function grades() + { + return $this->belongsToMany(Grade::class); + } + + /** + * Set the scope to active Batches. + * + * @return mixed + */ + public function scopeActive() + { + return $this->whereNull('deleted_at'); + } +} diff --git a/App/Modules/Classes/Models/Clasis.php b/App/Modules/Classes/Models/Clasis.php new file mode 100644 index 0000000..8c6078a --- /dev/null +++ b/App/Modules/Classes/Models/Clasis.php @@ -0,0 +1,22 @@ +belongsToMany(Student::class, 'class_student', 'id', 'student_id'); + } + + public function grade() + { + return $this->belongsTo(Grade::class); + } +} diff --git a/App/Modules/Classes/Models/Grade.php b/App/Modules/Classes/Models/Grade.php new file mode 100644 index 0000000..6a4e905 --- /dev/null +++ b/App/Modules/Classes/Models/Grade.php @@ -0,0 +1,22 @@ +hasMany(Clasis::class); + } + + public function batches() + { + return $this->belongsToMany(Batch::class); + } +} diff --git a/App/Modules/Classes/Models/Term.php b/App/Modules/Classes/Models/Term.php new file mode 100644 index 0000000..e780021 --- /dev/null +++ b/App/Modules/Classes/Models/Term.php @@ -0,0 +1,49 @@ +belongsTo(Batch::class); + } + + /** + * Boot the model with event binding for updating + * start and end dates fot the Batch. + */ + public static function boot() + { + $changeEvent = function ($model) { + if ($model->batch && $model->batch->terms->count()) { + $model->batch->start_date = $model->batch->terms->first()->start_date; + $model->batch->end_date = $model->batch->terms->last()->end_date; + + $model->batch->save(); + } + }; + + static::updated($changeEvent); + static::created($changeEvent); + static::deleted($changeEvent); + + parent::boot(); + } +} diff --git a/App/Modules/Classes/Models/factories/Batch.php b/App/Modules/Classes/Models/factories/Batch.php new file mode 100644 index 0000000..a3db87e --- /dev/null +++ b/App/Modules/Classes/Models/factories/Batch.php @@ -0,0 +1,10 @@ +define(Collejo\App\Modules\Classes\Models\Batch::class, function (Faker\Generator $faker) { + return [ + 'name' => 'batch '.$faker->date, + ]; +}); diff --git a/App/Modules/Classes/Models/factories/Clasis.php b/App/Modules/Classes/Models/factories/Clasis.php new file mode 100644 index 0000000..147c814 --- /dev/null +++ b/App/Modules/Classes/Models/factories/Clasis.php @@ -0,0 +1,10 @@ +define(Collejo\App\Modules\Classes\Models\Clasis::class, function (Faker\Generator $faker) { + return [ + 'name' => $faker->firstName, + ]; +}); diff --git a/App/Modules/Classes/Models/factories/Grade.php b/App/Modules/Classes/Models/factories/Grade.php new file mode 100644 index 0000000..c8e43b7 --- /dev/null +++ b/App/Modules/Classes/Models/factories/Grade.php @@ -0,0 +1,10 @@ +define(Collejo\App\Modules\Classes\Models\Grade::class, function (Faker\Generator $faker) { + return [ + 'name' => $faker->firstName, + ]; +}); diff --git a/App/Modules/Classes/Models/factories/Term.php b/App/Modules/Classes/Models/factories/Term.php new file mode 100644 index 0000000..8aa3c4e --- /dev/null +++ b/App/Modules/Classes/Models/factories/Term.php @@ -0,0 +1,12 @@ +define(Collejo\App\Modules\Classes\Models\Term::class, function (Faker\Generator $faker) { + return [ + 'name' => $faker->name, + 'start_date' => $faker->dateTimeThisYear, + 'end_date' => $faker->dateTimeThisYear, + ]; +}); diff --git a/App/Modules/Classes/Presenters/BatchBasicDetailsPresenter.php b/App/Modules/Classes/Presenters/BatchBasicDetailsPresenter.php new file mode 100644 index 0000000..d385c7a --- /dev/null +++ b/App/Modules/Classes/Presenters/BatchBasicDetailsPresenter.php @@ -0,0 +1,16 @@ + GradeBasicDetailsPresenter::class, + ]; + + protected $hidden = [ + 'created_by', + 'updated_by', + 'created_at', + 'updated_at', + 'deleted_at', + ]; +} diff --git a/App/Modules/Classes/Presenters/GradeBasicDetailsPresenter.php b/App/Modules/Classes/Presenters/GradeBasicDetailsPresenter.php new file mode 100644 index 0000000..0e44690 --- /dev/null +++ b/App/Modules/Classes/Presenters/GradeBasicDetailsPresenter.php @@ -0,0 +1,16 @@ +app->bind(ClassRepositoryContract::class, ClassRepository::class); + $this->app->bind(BatchListCriteria::class); + } + + /** + * Returns an array of permissions for the current module. + * + * @return array + */ + public function getPermissions() + { + return [ + 'view_batch_details' => ['add_edit_batch', 'list_batches'], + 'list_batches' => ['transfer_batch', 'graduate_batch'], + 'view_grade_details' => ['add_edit_grade', 'list_grades', 'view_class_details'], + 'view_class_details' => ['add_edit_class', 'list_classes', 'list_class_students'], + ]; + } +} diff --git a/App/Modules/Classes/Repositories/ClassRepository.php b/App/Modules/Classes/Repositories/ClassRepository.php new file mode 100644 index 0000000..f9d4bdd --- /dev/null +++ b/App/Modules/Classes/Repositories/ClassRepository.php @@ -0,0 +1,274 @@ +findClass($classId, $gradeId)->delete(); + } + + /** + * Update the given Grade with attributes. + * + * @param array $attributes + * @param $id + * + * @return mixed + */ + public function updateGrade(array $attributes, $id) + { + $this->findGrade($id)->update($attributes); + + return $this->findGrade($id); + } + + /** + * Find Grade by id. + * + * @param $id + * + * @return mixed + */ + public function findGrade($id) + { + return Grade::findOrFail($id); + } + + /** + * Create new Grade with given attributes. + * + * @param array $attributes + * + * @return mixed + */ + public function createGrade(array $attributes) + { + return Grade::create($attributes); + } + + /** + * Returns a collection of Grades. + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getGrades() + { + return $this->search(Grade::class); + } + + /** + * Update a Class with given attributes for the given grade id. + * + * @param array $attributes + * @param $classId + * @param $gradeId + * + * @return mixed + */ + public function updateClass(array $attributes, $classId, $gradeId) + { + $this->findClass($classId, $gradeId)->update($attributes); + + return $this->findClass($classId, $gradeId); + } + + /** + * Creates a new Class with given attributes for the given grade id. + * + * @param array $attributes + * @param $gradeId + * + * @return mixed + */ + public function createClass(array $attributes, $gradeId) + { + $grade = $this->findGrade($gradeId); + + DB::transaction(function () use ($attributes, $grade, &$class) { + $class = Clasis::create($attributes); + + $class->grade()->associate($grade)->save(); + }); + + return $class; + } + + /** + * Find a class by id for the given grade id. + * + * @param $classId + * @param $gradeId + * + * @return mixed + */ + public function findClass($classId, $gradeId) + { + return Clasis::where(['grade_id' => $gradeId, 'id' => $classId])->firstOrFail(); + } + + /** + * Returns a collection of Classes. + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getClasses() + { + return $this->search(Clasis::class); + } + + /** + * Update a Batch with given attributes. + * + * @param array $attributes + * @param $batchId + * + * @return mixed + */ + public function updateBatch(array $attributes, $batchId) + { + $this->findBatch($batchId)->update($attributes); + + return $this->findBatch($batchId); + } + + /** + * Deletes a Term by id for the given batch id. + * + * @param $termId + * @param $batchId + */ + public function deleteTerm($termId, $batchId) + { + $this->findTerm($termId, $batchId)->delete(); + } + + /** + * Update a term with attributes for the term id for batch id. + * + * @param array $attributes + * @param $termId + * @param $batchId + * + * @return mixed + */ + public function updateTerm(array $attributes, $termId, $batchId) + { + $this->findTerm($termId, $batchId)->update($attributes); + + return $this->findTerm($termId, $batchId); + } + + /** + * Find a Term by id. + * + * @param $termId + * @param $batchId + * + * @return mixed + */ + public function findTerm($termId, $batchId) + { + return Term::where(['batch_id' => $batchId, 'id' => $termId])->firstOrFail(); + } + + /** + * Assign an array of grade ids to the given Batch. + * + * @param array $gradeIds + * @param $batchId + */ + public function assignGradesToBatch(array $gradeIds, $batchId) + { + $this->findBatch($batchId)->grades()->sync($this->createPivotIds($gradeIds)); + } + + /** + * Create a new Term with given attributes. + * + * @param array $attributes + * @param $batchId + * + * @return mixed + */ + public function createTerm(array $attributes, $batchId) + { + $batch = $this->findBatch($batchId); + + $attributes['start_date'] = toUTC($attributes['start_date']); + $attributes['end_date'] = toUTC($attributes['end_date']); + + DB::transaction(function () use ($attributes, $batch, &$term) { + $term = Term::create($attributes); + + $term->batch()->associate($batch)->save(); + }); + + return $term; + } + + /** + * Return a collection of active Batches. + * + * @return mixed + */ + public function activeBatches() + { + return Batch::active(); + } + + /** + * Find a Batch by id. + * + * @param $id + * @param $with + * + * @return mixed + */ + public function findBatch($id, $with = null) + { + if ($with) { + return Batch::with($with)->findOrFail($id); + } + + return Batch::findOrFail($id); + } + + /** + * Create a new Batch with given attributes. + * + * @param array $attributes + * + * @return mixed + */ + public function createBatch(array $attributes) + { + return Batch::create($attributes); + } + + /** + * Return a collection of Batches. + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getBatches(BatchListCriteria $criteria) + { + return $this->search($criteria); + } +} diff --git a/App/Modules/Classes/Seeder/BatchesAndGradesSeeder.php b/App/Modules/Classes/Seeder/BatchesAndGradesSeeder.php new file mode 100644 index 0000000..ed64fef --- /dev/null +++ b/App/Modules/Classes/Seeder/BatchesAndGradesSeeder.php @@ -0,0 +1,63 @@ + $v) { + $years[$k] = $this->faker->dateTimeBetween('-10 years', 'now'); + } + // Create 12 grades + foreach (range(1, 12) as $num) { + $grade = factory(Grade::class)->create(['name' => 'Grade '.$num]); + foreach (range(1, 5) as $class) { + factory(Clasis::class)->create(['name' => $num.'-'.$class, 'grade_id' => $grade->id]); + } + } + // Create batches + foreach ($years as $y) { + factory(Batch::class)->create(['name' => $this->course().' - '.$y->format('Y').' Batch']); + } + + // Assign grades and create terms + Batch::all()->each(function ($batch) { + $batch->grades()->sync($this->createPivotIds($this->faker->randomElements(Grade::all()->pluck('id')->all(), 5))); + + foreach (['Winter', 'Summer', 'Fall'] as $term) { + $batch->terms()->save(factory(Term::class)->make([ + 'name' => $term, + ])); + } + }); + } + + private function course() + { + return $this->faker->randomElement([ + 'International Business', + 'Marketing', + 'Accounting for a Small Business', + 'Geotechnologies', + 'International Law', + 'The Environment and Resource Management', + 'History and Politics', + 'International Languages', + 'Computer Programming', + 'Literature', + ]); + } +} diff --git a/App/Modules/Classes/Tests/Unit/BatchTest.php b/App/Modules/Classes/Tests/Unit/BatchTest.php new file mode 100644 index 0000000..ee0d34c --- /dev/null +++ b/App/Modules/Classes/Tests/Unit/BatchTest.php @@ -0,0 +1,61 @@ +create(); + + $batches = $this->classRepository + ->getBatches(app()->make(BatchListCriteria::class))->get(); + + $this->assertCount(5, $batches); + } + + /** + * Test creating a Batch. + */ + public function testBatchCreate() + { + $batch = factory(Batch::class)->make(); + + $model = $this->classRepository->createBatch($batch->toArray()); + + $this->assertArrayValuesEquals($model, $batch); + } + + /** + * Test updating a Batch. + */ + public function testBatchUpdate() + { + $batch = factory(Batch::class)->create(); + $batchNew = factory(Batch::class)->make(); + + $model = $this->classRepository->updateBatch($batchNew->toArray(), $batch->id); + + $this->assertArrayValuesEquals($model, $batchNew); + } + + public function setup() + { + parent::setup(); + + $this->classRepository = $this->app->make(ClassRepository::class); + } +} diff --git a/App/Modules/Classes/Tests/Unit/ClassTest.php b/App/Modules/Classes/Tests/Unit/ClassTest.php new file mode 100644 index 0000000..ab920aa --- /dev/null +++ b/App/Modules/Classes/Tests/Unit/ClassTest.php @@ -0,0 +1,51 @@ +make(); + $grade = factory(Grade::class)->create(); + + $model = $this->classRepository->createClass($class->toArray(), $grade->id); + + $this->assertArrayValuesEquals($model, $class); + } + + /** + * Test updating a Class. + */ + public function testClassUpdate() + { + $grade = factory(Grade::class)->create(); + $class = factory(Clasis::class)->create(['grade_id' => $grade->id]); + + $classNew = factory(Clasis::class)->make(); + + $model = $this->classRepository->updateClass($classNew->toArray(), $class->id, $class->grade->id); + + $this->assertArrayValuesEquals($model, $classNew); + } + + public function setup() + { + parent::setup(); + + $this->classRepository = $this->app->make(ClassRepository::class); + } +} diff --git a/App/Modules/Classes/Tests/Unit/GradeTest.php b/App/Modules/Classes/Tests/Unit/GradeTest.php new file mode 100644 index 0000000..e73215d --- /dev/null +++ b/App/Modules/Classes/Tests/Unit/GradeTest.php @@ -0,0 +1,48 @@ +make(); + + $model = $this->classRepository->createGrade($grade->toArray()); + + $this->assertArrayValuesEquals($model, $grade); + } + + /** + * Test updating a Grade. + */ + public function testGradeUpdate() + { + $grade = factory(Grade::class)->create(); + + $gradeNew = factory(Grade::class)->make(); + + $model = $this->classRepository->updateGrade($gradeNew->toArray(), $grade->id); + + $this->assertArrayValuesEquals($model, $gradeNew); + } + + public function setup() + { + parent::setup(); + + $this->classRepository = $this->app->make(ClassRepository::class); + } +} diff --git a/App/Modules/Classes/Tests/Unit/TermTest.php b/App/Modules/Classes/Tests/Unit/TermTest.php new file mode 100644 index 0000000..b53475d --- /dev/null +++ b/App/Modules/Classes/Tests/Unit/TermTest.php @@ -0,0 +1,51 @@ +create(); + $term = factory(Term::class)->make(); + + $model = $this->classRepository->createTerm($term->toArray(), $batch->id); + + $this->assertArrayValuesEquals($model, $term); + } + + /** + * Test updating a Term. + */ + public function testTermUpdate() + { + $batch = factory(Batch::class)->create(); + + $term = factory(Term::class)->create(['batch_id' => $batch->id]); + $termNew = factory(Term::class)->make(); + + $model = $this->classRepository->updateTerm($termNew->toArray(), $term->id, $batch->id); + + $this->assertArrayValuesEquals($model, $termNew); + } + + public function setup() + { + parent::setup(); + + $this->classRepository = $this->app->make(ClassRepository::class); + } +} diff --git a/src/migrations/0_0_0_000140_create_batches_table.php b/App/Modules/Classes/migrations/0_0_0_000140_create_batches_table.php similarity index 94% rename from src/migrations/0_0_0_000140_create_batches_table.php rename to App/Modules/Classes/migrations/0_0_0_000140_create_batches_table.php index e55c051..c8f1939 100644 --- a/src/migrations/0_0_0_000140_create_batches_table.php +++ b/App/Modules/Classes/migrations/0_0_0_000140_create_batches_table.php @@ -1,7 +1,7 @@ dateTime('start_date')->after('name'); + $table->dateTime('end_date')->after('start_date'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('batches', function (Blueprint $table) { + $table->dropColumn('start_date'); + $table->dropColumn('end_date'); + }); + } +} diff --git a/src/migrations/0_0_0_000150_create_terms_table.php b/App/Modules/Classes/migrations/0_0_0_000150_create_terms_table.php similarity index 90% rename from src/migrations/0_0_0_000150_create_terms_table.php rename to App/Modules/Classes/migrations/0_0_0_000150_create_terms_table.php index ed861c6..bfc28e3 100644 --- a/src/migrations/0_0_0_000150_create_terms_table.php +++ b/App/Modules/Classes/migrations/0_0_0_000150_create_terms_table.php @@ -1,7 +1,7 @@ string('id', 45)->primary(); - $table->string('batch_id', 45); + $table->string('batch_id', 45)->nullable(); $table->string('name', 45); $table->timestamp('start_date'); $table->timestamp('end_date'); diff --git a/App/Modules/Classes/migrations/0_0_0_000151_alter_terms_table_start_end_date.php b/App/Modules/Classes/migrations/0_0_0_000151_alter_terms_table_start_end_date.php new file mode 100644 index 0000000..0e910bb --- /dev/null +++ b/App/Modules/Classes/migrations/0_0_0_000151_alter_terms_table_start_end_date.php @@ -0,0 +1,33 @@ +dateTime('start_date')->change(); + $table->dateTime('end_date')->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + /* + * Since mysql Doctrine\DBAL does not support timestamps + * we can't reverse the migration + */ + } +} diff --git a/src/migrations/0_0_0_000160_create_grades_table.php b/App/Modules/Classes/migrations/0_0_0_000160_create_grades_table.php similarity index 94% rename from src/migrations/0_0_0_000160_create_grades_table.php rename to App/Modules/Classes/migrations/0_0_0_000160_create_grades_table.php index 57a873f..40a9540 100644 --- a/src/migrations/0_0_0_000160_create_grades_table.php +++ b/App/Modules/Classes/migrations/0_0_0_000160_create_grades_table.php @@ -1,7 +1,7 @@ string('id', 45)->primary(); - $table->string('batch_id', 45); - $table->string('grade_id', 45); + $table->string('batch_id', 45)->nullable(); + $table->string('grade_id', 45)->nullable(); $table->string('created_by')->nullable(); $table->timestamp('created_at'); }); diff --git a/src/migrations/0_0_0_000180_create_classes_table.php b/App/Modules/Classes/migrations/0_0_0_000180_create_classes_table.php similarity index 90% rename from src/migrations/0_0_0_000180_create_classes_table.php rename to App/Modules/Classes/migrations/0_0_0_000180_create_classes_table.php index 8bef908..c54b652 100644 --- a/src/migrations/0_0_0_000180_create_classes_table.php +++ b/App/Modules/Classes/migrations/0_0_0_000180_create_classes_table.php @@ -1,7 +1,7 @@ string('id', 45)->primary(); $table->string('name', 10); - $table->string('grade_id', 45); + $table->string('grade_id', 45)->nullable(); $table->string('created_by')->nullable(); $table->string('updated_by')->nullable(); $table->timestamps(); diff --git a/App/Modules/Classes/resources/assets/js/batchesList.js b/App/Modules/Classes/resources/assets/js/batchesList.js new file mode 100644 index 0000000..613875c --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/batchesList.js @@ -0,0 +1,5 @@ +Vue.component('batches-list', require('./components/BatchesList')); + +new Vue({ + el: '#batchesList' +}); \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/components/BatchesList.vue b/App/Modules/Classes/resources/assets/js/components/BatchesList.vue new file mode 100644 index 0000000..b79680f --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/components/BatchesList.vue @@ -0,0 +1,76 @@ + + + \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/components/EditBatchDetails.vue b/App/Modules/Classes/resources/assets/js/components/EditBatchDetails.vue new file mode 100644 index 0000000..e389337 --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/components/EditBatchDetails.vue @@ -0,0 +1,33 @@ + + + \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/components/EditBatchGrades.vue b/App/Modules/Classes/resources/assets/js/components/EditBatchGrades.vue new file mode 100644 index 0000000..cff8edd --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/components/EditBatchGrades.vue @@ -0,0 +1,75 @@ + + + \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/components/EditBatchTerms.vue b/App/Modules/Classes/resources/assets/js/components/EditBatchTerms.vue new file mode 100644 index 0000000..97540b0 --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/components/EditBatchTerms.vue @@ -0,0 +1,164 @@ + + + \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/components/EditClass.vue b/App/Modules/Classes/resources/assets/js/components/EditClass.vue new file mode 100644 index 0000000..cd2041a --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/components/EditClass.vue @@ -0,0 +1,34 @@ + + + diff --git a/App/Modules/Classes/resources/assets/js/components/EditGradeClasses.vue b/App/Modules/Classes/resources/assets/js/components/EditGradeClasses.vue new file mode 100644 index 0000000..dcb4990 --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/components/EditGradeClasses.vue @@ -0,0 +1,177 @@ + + + \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/components/EditGradeDetails.vue b/App/Modules/Classes/resources/assets/js/components/EditGradeDetails.vue new file mode 100644 index 0000000..7f9675a --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/components/EditGradeDetails.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/components/EditTerm.vue b/App/Modules/Classes/resources/assets/js/components/EditTerm.vue new file mode 100644 index 0000000..4454576 --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/components/EditTerm.vue @@ -0,0 +1,37 @@ + + + diff --git a/App/Modules/Classes/resources/assets/js/components/GradesList.vue b/App/Modules/Classes/resources/assets/js/components/GradesList.vue new file mode 100644 index 0000000..f07184c --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/components/GradesList.vue @@ -0,0 +1,47 @@ + + + \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/components/ViewBatchTerms.vue b/App/Modules/Classes/resources/assets/js/components/ViewBatchTerms.vue new file mode 100644 index 0000000..cd986a7 --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/components/ViewBatchTerms.vue @@ -0,0 +1,45 @@ + + + \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/editBatchDetails.js b/App/Modules/Classes/resources/assets/js/editBatchDetails.js new file mode 100644 index 0000000..55e61e5 --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/editBatchDetails.js @@ -0,0 +1,5 @@ +Vue.component('edit-batch-details', require('./components/EditBatchDetails')); + +new Vue({ + el: '#editBatchDetails' +}); \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/editBatchGrades.js b/App/Modules/Classes/resources/assets/js/editBatchGrades.js new file mode 100644 index 0000000..b6d6c0b --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/editBatchGrades.js @@ -0,0 +1,5 @@ +Vue.component('edit-batch-grades', require('./components/EditBatchGrades')); + +new Vue({ + el: '#editBatchGrades' +}); diff --git a/App/Modules/Classes/resources/assets/js/editBatchTerms.js b/App/Modules/Classes/resources/assets/js/editBatchTerms.js new file mode 100644 index 0000000..fef35f6 --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/editBatchTerms.js @@ -0,0 +1,5 @@ +Vue.component('edit-batch-terms', require('./components/EditBatchTerms')); + +new Vue({ + el: '#editBatchTerms' +}); \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/editGradeClasses.js b/App/Modules/Classes/resources/assets/js/editGradeClasses.js new file mode 100644 index 0000000..e5a4d87 --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/editGradeClasses.js @@ -0,0 +1,5 @@ +Vue.component('edit-grade-classes', require('./components/EditGradeClasses')); + +new Vue({ + el: '#editGradeClasses' +}); \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/editGradeDetails.js b/App/Modules/Classes/resources/assets/js/editGradeDetails.js new file mode 100644 index 0000000..f543088 --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/editGradeDetails.js @@ -0,0 +1,5 @@ +Vue.component('edit-grade-details', require('./components/EditGradeDetails')); + +new Vue({ + el: '#editGradeDetails' +}); \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/gradesList.js b/App/Modules/Classes/resources/assets/js/gradesList.js new file mode 100644 index 0000000..3602e6d --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/gradesList.js @@ -0,0 +1,5 @@ +Vue.component('grades-list', require('./components/GradesList')); + +new Vue({ + el: '#gradesList' +}); \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/js/viewBatchTerms.js b/App/Modules/Classes/resources/assets/js/viewBatchTerms.js new file mode 100644 index 0000000..b8002e8 --- /dev/null +++ b/App/Modules/Classes/resources/assets/js/viewBatchTerms.js @@ -0,0 +1,5 @@ +Vue.component('view-batch-terms', require('./components/ViewBatchTerms')); + +new Vue({ + el: '#viewBatchTerms' +}); \ No newline at end of file diff --git a/App/Modules/Classes/resources/assets/sass/module.scss b/App/Modules/Classes/resources/assets/sass/module.scss new file mode 100644 index 0000000..5bc16bf --- /dev/null +++ b/App/Modules/Classes/resources/assets/sass/module.scss @@ -0,0 +1,49 @@ +@import "../../../../Base/resources/assets/sass/variables"; + +.terms-list{ + ul{ + .term-layer{ + + padding: 0; + + .block,.date{ + float: left; + border-right: thin solid #dadada; + } + + .block{ + .term,.vacation{ + min-height: 60px; + } + + .vacation{ + + padding: 0 !important; + margin:0 !important; + } + + .term{ + padding: 10px; + background-color: rgba(0, 123, 255, 0.5); + border-left: 2px solid #71a6de; + border-right: 2px solid #71a6de; + } + } + + .date{ + padding: 5px; + height: 30px; + overflow: hidden; + min-height: 1em; + + .year{ + position: relative; + } + } + } + } + + .table-responsive{ + margin-top: $box-padding * 2; + } +} \ No newline at end of file diff --git a/App/Modules/Classes/resources/lang/en/batch.php b/App/Modules/Classes/resources/lang/en/batch.php new file mode 100644 index 0000000..fb5ca01 --- /dev/null +++ b/App/Modules/Classes/resources/lang/en/batch.php @@ -0,0 +1,26 @@ + 'Batches', + 'batch_details' => 'Batch Details', + 'batch_terms' => trans('base::entities.term.plural'), + 'batch_grades' => trans('base::entities.grade.singular'), + 'create_batch' => 'Create Batch', + 'new_batch' => 'New Batch', + 'edit_batch' => 'Edit Batch', + 'name' => 'Batch Name', + 'name_placeholder' => 'New Batch', + 'grades' => trans('base::entities.grade.plural'), + 'assign_grades' => 'Assign '.trans('base::entities.grade.plural'), + 'view_students' => 'View Students', + 'view_terms' => 'View Terms', + 'view_grades' => 'View Grades', + + 'batch_start' => 'Batch Start', + 'batch_end' => 'Batch End', + + 'empty_list' => 'There are no Batches in the system', + 'no_grades_defined' => 'No '.trans('base::entities.grade.plural').' or Batches defined.', + 'no_grades_defined_help' => 'First you need to define '.trans('base::entities.grade.plural').' for your institution. After creating '.trans('base::entities.grade.plural').' you can create Batches and they will be listed here.', + 'batch_updated' => 'Batch updated', +]; diff --git a/App/Modules/Classes/resources/lang/en/class.php b/App/Modules/Classes/resources/lang/en/class.php new file mode 100644 index 0000000..bdd5770 --- /dev/null +++ b/App/Modules/Classes/resources/lang/en/class.php @@ -0,0 +1,14 @@ + 'Classes', + 'new_class' => 'New Class', + 'new_class_placeholder' => 'New Class', + 'name' => 'Name', + 'empty_list' => 'This '.trans('base::entities.grade.singular').' does not have any Classes defined.', + 'class_created' => 'Class created.', + 'class_deleted' => 'Class deleted.', + 'class_updated' => 'Class updated.', + + 'class_details' => 'Class Details', +]; diff --git a/App/Modules/Classes/resources/lang/en/grade.php b/App/Modules/Classes/resources/lang/en/grade.php new file mode 100644 index 0000000..47e5794 --- /dev/null +++ b/App/Modules/Classes/resources/lang/en/grade.php @@ -0,0 +1,17 @@ + trans('base::entities.grade.plural'), + 'grades' => trans('base::entities.grade.plural'), + 'edit_grade' => 'Edit '.trans('base::entities.grade.singular'), + 'new_grade' => 'New '.trans('base::entities.grade.singular'), + 'create_grade' => 'Create '.trans('base::entities.grade.singular').'', + 'empty_list' => 'There are no '.trans('base::entities.grade.plural').' in the system.', + 'grade_updated' => trans('base::entities.grade.singular').' updated.', + + 'grade_details' => trans('base::entities.grade.singular').' Details', + 'name_placeholder' => trans('base::entities.grade.singular').' x', + 'name' => 'Name', + 'classes' => 'Classes', + 'create_classes' => 'Create Classes', +]; diff --git a/App/Modules/Classes/resources/lang/en/menu.php b/App/Modules/Classes/resources/lang/en/menu.php new file mode 100644 index 0000000..7449e39 --- /dev/null +++ b/App/Modules/Classes/resources/lang/en/menu.php @@ -0,0 +1,7 @@ + 'Classes', + 'batches' => 'Batches', + 'grades' => 'Grades', +]; diff --git a/App/Modules/Classes/resources/lang/en/term.php b/App/Modules/Classes/resources/lang/en/term.php new file mode 100644 index 0000000..656efc2 --- /dev/null +++ b/App/Modules/Classes/resources/lang/en/term.php @@ -0,0 +1,16 @@ + trans('base::entities.term.plural'), + 'new_term' => 'New '.trans('base::entities.term.singular'), + 'new_term_placeholder' => 'New '.trans('base::entities.term.singular'), + 'name' => 'Title', + 'start_date' => 'Start Date', + 'end_date' => 'End Date', + 'empty_list' => 'This Batch does not have any '.trans('base::entities.term.plural').' defined.', + 'term_created' => trans('base::entities.term.singular').' created', + 'term_deleted' => trans('base::entities.term.singular').' deleted', + 'term_updated' => trans('base::entities.term.singular').' updated', + + 'terms_updated' => trans('base::entities.term.plural').' updated', +]; diff --git a/App/Modules/Classes/resources/views/batches_list.blade.php b/App/Modules/Classes/resources/views/batches_list.blade.php new file mode 100644 index 0000000..067a17f --- /dev/null +++ b/App/Modules/Classes/resources/views/batches_list.blade.php @@ -0,0 +1,38 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('classes::batch.batches')) + +@section('count', $batches->count()) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('add_edit_batch') + + {{ trans('classes::batch.new_batch') }} + + @endcan + +@endsection + +@section('table') + +
+ count()) + :batches="{{$batches->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/edit_batch_details.blade.php b/App/Modules/Classes/resources/views/edit_batch_details.blade.php new file mode 100644 index 0000000..b8246c7 --- /dev/null +++ b/App/Modules/Classes/resources/views/edit_batch_details.blade.php @@ -0,0 +1,49 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $batch ? trans('classes::batch.edit_batch') : trans('classes::batch.new_batch')) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + @if($batch) + + + + @endif + +@endsection + +@section('tabs') + + @include('classes::partials.edit_batch_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/edit_batch_grades.blade.php b/App/Modules/Classes/resources/views/edit_batch_grades.blade.php new file mode 100644 index 0000000..802ca41 --- /dev/null +++ b/App/Modules/Classes/resources/views/edit_batch_grades.blade.php @@ -0,0 +1,41 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', trans('classes::batch.edit_batch')) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('classes::partials.edit_batch_tabs') + +@endsection + +@section('tab') + +
+ +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/edit_batch_terms.blade.php b/App/Modules/Classes/resources/views/edit_batch_terms.blade.php new file mode 100644 index 0000000..9d9b7c3 --- /dev/null +++ b/App/Modules/Classes/resources/views/edit_batch_terms.blade.php @@ -0,0 +1,47 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $batch ? trans('classes::batch.edit_batch') : trans('classes::batch.new_batch')) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + @if($batch) + + + + @endif + +@endsection + +@section('tabs') + + @include('classes::partials.edit_batch_tabs') + +@endsection + +@section('tab') + +
+ +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/edit_grade_classes.blade.php b/App/Modules/Classes/resources/views/edit_grade_classes.blade.php new file mode 100644 index 0000000..4acf29e --- /dev/null +++ b/App/Modules/Classes/resources/views/edit_grade_classes.blade.php @@ -0,0 +1,41 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', trans('classes::grade.edit_grade')) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('classes::partials.edit_grade_tabs') + +@endsection + +@section('tab') + +
+ +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/edit_grade_details.blade.php b/App/Modules/Classes/resources/views/edit_grade_details.blade.php new file mode 100644 index 0000000..a5f6338 --- /dev/null +++ b/App/Modules/Classes/resources/views/edit_grade_details.blade.php @@ -0,0 +1,51 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $grade ? trans('classes::grade.edit_grade') : trans('classes::grade.new_grade')) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + +@if($grade) + + + +@endif + +@endsection + +@section('tabs') + + @include('classes::partials.edit_grade_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/grades_list.blade.php b/App/Modules/Classes/resources/views/grades_list.blade.php new file mode 100644 index 0000000..10aaaa8 --- /dev/null +++ b/App/Modules/Classes/resources/views/grades_list.blade.php @@ -0,0 +1,38 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('classes::grade.grades')) + +@section('count', $grades->count()) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('add_edit_grade') + + {{ trans('classes::grade.new_grade') }} + + @endcan + +@endsection + +@section('table') + +
+ count()) + :grades="{{$grades->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/partials/edit_batch_tabs.blade.php b/App/Modules/Classes/resources/views/partials/edit_batch_tabs.blade.php new file mode 100644 index 0000000..7dabea2 --- /dev/null +++ b/App/Modules/Classes/resources/views/partials/edit_batch_tabs.blade.php @@ -0,0 +1,32 @@ + diff --git a/App/Modules/Classes/resources/views/partials/edit_grade_tabs.blade.php b/App/Modules/Classes/resources/views/partials/edit_grade_tabs.blade.php new file mode 100644 index 0000000..20c2f15 --- /dev/null +++ b/App/Modules/Classes/resources/views/partials/edit_grade_tabs.blade.php @@ -0,0 +1,25 @@ + diff --git a/App/Modules/Classes/resources/views/partials/view_batch_tabs.blade.php b/App/Modules/Classes/resources/views/partials/view_batch_tabs.blade.php new file mode 100644 index 0000000..49c2f20 --- /dev/null +++ b/App/Modules/Classes/resources/views/partials/view_batch_tabs.blade.php @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/partials/view_class_tabs.blade.php b/App/Modules/Classes/resources/views/partials/view_class_tabs.blade.php new file mode 100644 index 0000000..09ef7fe --- /dev/null +++ b/App/Modules/Classes/resources/views/partials/view_class_tabs.blade.php @@ -0,0 +1,8 @@ + diff --git a/App/Modules/Classes/resources/views/partials/view_grade_tabs.blade.php b/App/Modules/Classes/resources/views/partials/view_grade_tabs.blade.php new file mode 100644 index 0000000..5035ffa --- /dev/null +++ b/App/Modules/Classes/resources/views/partials/view_grade_tabs.blade.php @@ -0,0 +1,12 @@ + diff --git a/App/Modules/Classes/resources/views/view_batch_details.blade.php b/App/Modules/Classes/resources/views/view_batch_details.blade.php new file mode 100644 index 0000000..5d8940d --- /dev/null +++ b/App/Modules/Classes/resources/views/view_batch_details.blade.php @@ -0,0 +1,31 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $batch->name) + +@section('tools') + + @can('add_edit_batch') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('classes::partials.view_batch_tabs') + +@endsection + +@section('tab') + +
+
+
{{ trans('classes::batch.name') }}
+
{{ $batch->name }}
+
+
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/view_batch_grades.blade.php b/App/Modules/Classes/resources/views/view_batch_grades.blade.php new file mode 100644 index 0000000..ab63b60 --- /dev/null +++ b/App/Modules/Classes/resources/views/view_batch_grades.blade.php @@ -0,0 +1,37 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $batch->name) + +@section('tools') + + @can('add_edit_batch') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('classes::partials.view_batch_tabs') + +@endsection + +@section('tab') + +
+ + @foreach($batch->grades as $grade) + +
+ +
+ + @endforeach + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/view_batch_terms.blade.php b/App/Modules/Classes/resources/views/view_batch_terms.blade.php new file mode 100644 index 0000000..ef4794e --- /dev/null +++ b/App/Modules/Classes/resources/views/view_batch_terms.blade.php @@ -0,0 +1,40 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $batch->name) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('add_edit_batch') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('classes::partials.view_batch_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/view_class_details.blade.php b/App/Modules/Classes/resources/views/view_class_details.blade.php new file mode 100644 index 0000000..3ce8bca --- /dev/null +++ b/App/Modules/Classes/resources/views/view_class_details.blade.php @@ -0,0 +1,32 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $class->name) + +@section('breadcrumbs') + +@endsection + +@section('tabs') + + @include('classes::partials.view_class_tabs') + +@endsection + +@section('tab') + +
+
+
{{ trans('classes::class.name') }}
+
{{ $class->name }}
+
+
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/view_grade_classes.blade.php b/App/Modules/Classes/resources/views/view_grade_classes.blade.php new file mode 100644 index 0000000..aa8d1e0 --- /dev/null +++ b/App/Modules/Classes/resources/views/view_grade_classes.blade.php @@ -0,0 +1,38 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $grade->name) + +@section('tools') + + @can('add_edit_class') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('classes::partials.view_grade_tabs') + +@endsection + +@section('tab') + +
+ + @foreach($grade->classes as $class) + +
+
{{ $class->name }}
+
+ +
+
+ + @endforeach + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Classes/resources/views/view_grade_details.blade.php b/App/Modules/Classes/resources/views/view_grade_details.blade.php new file mode 100644 index 0000000..41551b6 --- /dev/null +++ b/App/Modules/Classes/resources/views/view_grade_details.blade.php @@ -0,0 +1,29 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $grade->name) + +@section('tools') + + @can('add_edit_batch') + {{ trans('base::common.edit') }} + @endcan + +@endsection + +@section('tabs') + + @include('classes::partials.view_grade_tabs') + +@endsection + +@section('tab') + +
+
+
{{ trans('classes::grade.name') }}
+
{{ $grade->name }}
+
+
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Dashboard/Http/Controllers/DashController.php b/App/Modules/Dashboard/Http/Controllers/DashController.php new file mode 100644 index 0000000..9ed890b --- /dev/null +++ b/App/Modules/Dashboard/Http/Controllers/DashController.php @@ -0,0 +1,20 @@ +render(); + } +} diff --git a/App/Modules/Dashboard/Http/routes.php b/App/Modules/Dashboard/Http/routes.php new file mode 100644 index 0000000..2046c90 --- /dev/null +++ b/App/Modules/Dashboard/Http/routes.php @@ -0,0 +1,5 @@ + 'dashboard', 'middleware' => 'auth'], function () { + Route::get('/', 'DashController@getIndex')->name('dash'); +}); diff --git a/App/Modules/Dashboard/Providers/DashboardModuleServiceProvider.php b/App/Modules/Dashboard/Providers/DashboardModuleServiceProvider.php new file mode 100644 index 0000000..6a5031c --- /dev/null +++ b/App/Modules/Dashboard/Providers/DashboardModuleServiceProvider.php @@ -0,0 +1,12 @@ +runDatabaseMigrations(); + + $user = factory(User::class)->create(); + + Auth::login($user, true); + + $response = $this->get(route('dash')); + + $this->assertAuthenticated(); + + $response->assertStatus(200); + } +} diff --git a/App/Modules/Dashboard/resources/assets/js/components/Navbar.vue b/App/Modules/Dashboard/resources/assets/js/components/Navbar.vue new file mode 100644 index 0000000..b9f4fe5 --- /dev/null +++ b/App/Modules/Dashboard/resources/assets/js/components/Navbar.vue @@ -0,0 +1,71 @@ + + + \ No newline at end of file diff --git a/App/Modules/Dashboard/resources/assets/js/components/Toolbar.vue b/App/Modules/Dashboard/resources/assets/js/components/Toolbar.vue new file mode 100644 index 0000000..8359254 --- /dev/null +++ b/App/Modules/Dashboard/resources/assets/js/components/Toolbar.vue @@ -0,0 +1,111 @@ + + + \ No newline at end of file diff --git a/App/Modules/Dashboard/resources/assets/js/navbar.js b/App/Modules/Dashboard/resources/assets/js/navbar.js new file mode 100644 index 0000000..2c5f136 --- /dev/null +++ b/App/Modules/Dashboard/resources/assets/js/navbar.js @@ -0,0 +1,5 @@ +Vue.component('navbar', require('./components/Navbar')); + +new Vue({ + el: '#navbar' +}); \ No newline at end of file diff --git a/App/Modules/Dashboard/resources/assets/js/toolbar.js b/App/Modules/Dashboard/resources/assets/js/toolbar.js new file mode 100644 index 0000000..2d2de35 --- /dev/null +++ b/App/Modules/Dashboard/resources/assets/js/toolbar.js @@ -0,0 +1,5 @@ +Vue.component('toolbar', require('./components/Toolbar')); + +new Vue({ + el: '#toolbar' +}); \ No newline at end of file diff --git a/App/Modules/Dashboard/resources/assets/sass/module.scss b/App/Modules/Dashboard/resources/assets/sass/module.scss new file mode 100644 index 0000000..9816841 --- /dev/null +++ b/App/Modules/Dashboard/resources/assets/sass/module.scss @@ -0,0 +1,242 @@ +@import "../../../../Base/resources/assets/sass/variables"; +@import "~bootstrap/scss/mixins"; +@import "~bootstrap/scss/card"; + +#navbar{ + min-height: 3.438rem; +} + +.nav-loader{ + .logo { + /*-webkit-animation-name: spin; + -webkit-animation-duration: 2800ms; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: ease;*/ + + height: 30px; + width: 30px; + background-size: contain; + } + + /*@-webkit-keyframes spin { + from { + transform:rotate(0deg); + } + to { + transform:rotate(720deg); + } + }*/ + + .navbar-brand{ + background: none; + padding-left: 5px; + } + + .preloader{ + padding: 15px 40px; + margin: -10px 0; + + &.rounded-circle{ + padding: 15px 15px; + } + } +} + +.toolbar-loader{ + padding: 12px 0; + + .title{ + padding: 20px 110px; + } + + .button{ + padding: 20px 20px; + float: right; + margin-left: 15px; + } + + .button-mini{ + padding: 20px 80px; + float: right; + } +} + +#toolbar{ + min-height: 2.375rem; +} + +body{ + background: $gray-200; + font-family: $font-family-sans-serif; +} + +.navbar { + + .navbar-brand { + font-family: $font-family-brand; + } + + .nav-item .fa { + font-size: 1.4em; + margin-right: .5rem; + position: relative; + top: .2rem; + } + + .hyper-search-form { + margin-right: 1rem; + } +} + +.dash-content{ + + min-height: 60vh; + + h2{ + margin: $box-padding 0; + color: $gray-600; + + .badge-count{ + font-size:50%; + position: relative; + top: -5px; + } + } + + .criteria-panel{ + .card:after, .card:before { + bottom: 100%; + right: .4rem; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + } + + .card:after { + border-color: rgba(255, 255, 255, 0); + border-bottom-color: #ffffff; + border-width: 0.63rem; + margin-left: -1.875rem; + } + + .card:before { + border-color: rgba(199, 199, 199, 0); + border-bottom-color: #c7c7c7; + border-width: 0.63rem; + margin-left: -1.88rem; + } + + .filter-title{ + float:left; + padding: 0.4375rem 0.4375rem 0 0; + } + + .float-right{ + .filter-title{ + padding: 0.4375rem 0 0 0; + } + } + + .input-group{ + float:left; + + .filter-input-label{ + padding-right: $box-padding; + span{ + position: absolute; + left: 0; + top: -14px; + font-size: 12px; + } + .form-control, .custom-select{ + position: relative; + left: 0; + top: 10px; + } + } + } + } + + .breadcrumb { + margin: (0) (-$box-padding); + } + + .tab-card{ + + .nav{ + margin: 0.625rem; + } + } + + .tabs-view-tabs { + + margin-bottom: $box-padding; + + .nav-link.active { + @extend .card; + color: $text-color; + } + + } + + .table-btn{ + margin-right: $box-padding; + } + + .multi-select-form{ + .custom-checkbox{ + margin-bottom: 2rem; + } + } + + @media (min-width: 768px) { + + .tabs-view-tabs { + margin-top: $box-padding * 2; + + .nav-pills { + position: relative; + z-index: 1; + margin-right: -$box-padding * 2 - $border-width; + + .nav-link.active { + border-right: none; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + } + } + } + + .tab-content, .table-view-table { + @extend .card; + min-height:70vh; + } + + .tab-content { + padding: $box-padding; + } +} + +.placeholder{ + background: -webkit-repeating-linear-gradient(135deg, #fff, #fff 25%, #F7F7F7 25%, #F7F7F7 50%, #fff 50%) top left fixed; + background-size: $box-padding * 2 $box-padding * 2; + text-align: center; + padding: $box-padding * 2 $box-padding; + margin: 0 -$box-padding; + color: $text-color; +} + +.placeholder-row{ + padding: $box-padding; + .placeholder { + margin: 0; + } +} + +footer { + margin: 0.625rem 0 0.625rem 0; +} \ No newline at end of file diff --git a/App/Modules/Dashboard/resources/lang/en/dash.php b/App/Modules/Dashboard/resources/lang/en/dash.php new file mode 100644 index 0000000..1bc2ade --- /dev/null +++ b/App/Modules/Dashboard/resources/lang/en/dash.php @@ -0,0 +1,8 @@ + 'Dashboard', + 'total_records' => 'Total records', + 'filter_results' => 'Filter', + 'reset_filters' => 'Reset', +]; diff --git a/src/resources/views/dash/dash.blade.php b/App/Modules/Dashboard/resources/views/dash.blade.php similarity index 58% rename from src/resources/views/dash/dash.blade.php rename to App/Modules/Dashboard/resources/views/dash.blade.php index c74c8dd..8fce07c 100644 --- a/src/resources/views/dash/dash.blade.php +++ b/App/Modules/Dashboard/resources/views/dash.blade.php @@ -1,6 +1,6 @@ -@extends('collejo::layouts.dash') +@extends('dashboard::layouts.dash') -@section('title', 'Dashboard') +@section('title', trans('dashboard::dash.dashboard')) @section('content') @@ -10,11 +10,11 @@
- {{ Widget::renderByLocation('dash.col1') }} + {{-- Widget::renderByLocation('dash.col1') --}}
- {{ Widget::renderByLocation('dash.col2') }} + {{-- Widget::renderByLocation('dash.col2') --}}
diff --git a/src/resources/views/dash/landings/action_required.blade.php b/App/Modules/Dashboard/resources/views/landings/action_required.blade.php similarity index 54% rename from src/resources/views/dash/landings/action_required.blade.php rename to App/Modules/Dashboard/resources/views/landings/action_required.blade.php index fddc589..6a124c4 100644 --- a/src/resources/views/dash/landings/action_required.blade.php +++ b/App/Modules/Dashboard/resources/views/landings/action_required.blade.php @@ -1,10 +1,10 @@ -@extends('collejo::layouts.dash') +@extends('dashboard::layouts.dash') -@section('title', trans('common.action_required')) +@section('title', trans('base::common.action_required')) @section('content') -
+

{{ $message }}

diff --git a/App/Modules/Dashboard/resources/views/layouts/dash.blade.php b/App/Modules/Dashboard/resources/views/layouts/dash.blade.php new file mode 100644 index 0000000..90def0d --- /dev/null +++ b/App/Modules/Dashboard/resources/views/layouts/dash.blade.php @@ -0,0 +1,29 @@ + + + + @section('styles') + @parent + + @endsection + + @include('base::layouts.partials.head') + + + + @include('dashboard::menu.menubar') + +
+ + @yield('content') + +
+ + @section('scripts') + @parent + + @endsection + + @include('base::layouts.partials.footer') + + + diff --git a/App/Modules/Dashboard/resources/views/layouts/partials/toolbar.blade.php b/App/Modules/Dashboard/resources/views/layouts/partials/toolbar.blade.php new file mode 100644 index 0000000..be52889 --- /dev/null +++ b/App/Modules/Dashboard/resources/views/layouts/partials/toolbar.blade.php @@ -0,0 +1,38 @@ +@section('scripts') + @parent + +@endsection + +
+ + @hasSection('tools') + + @endif + + + +
+
+
+
+
+ +
+
\ No newline at end of file diff --git a/App/Modules/Dashboard/resources/views/layouts/tab_view.blade.php b/App/Modules/Dashboard/resources/views/layouts/tab_view.blade.php new file mode 100644 index 0000000..ce7054f --- /dev/null +++ b/App/Modules/Dashboard/resources/views/layouts/tab_view.blade.php @@ -0,0 +1,37 @@ +@extends('dashboard::layouts.dash') + +@section('content') + +
+ + @include('dashboard::layouts.partials.toolbar') + + @hasSection('breadcrumbs') + + @yield('breadcrumbs') + + @endif + +
+ +
+ + @yield('tabs') + +
+
+ +
+ +
+ + @yield('tab') + +
+
+
+
+ +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Dashboard/resources/views/layouts/table_view.blade.php b/App/Modules/Dashboard/resources/views/layouts/table_view.blade.php new file mode 100644 index 0000000..72e94db --- /dev/null +++ b/App/Modules/Dashboard/resources/views/layouts/table_view.blade.php @@ -0,0 +1,29 @@ +@extends('dashboard::layouts.dash') + +@section('content') + +
+ + @include('dashboard::layouts.partials.toolbar') + + @hasSection('breadcrumbs') + + @yield('breadcrumbs') + + @endif + +
+ +
+ +
+ @yield('table') +
+ +
+
+ + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Dashboard/resources/views/menu/menubar.blade.php b/App/Modules/Dashboard/resources/views/menu/menubar.blade.php new file mode 100644 index 0000000..d56494a --- /dev/null +++ b/App/Modules/Dashboard/resources/views/menu/menubar.blade.php @@ -0,0 +1,43 @@ + diff --git a/App/Modules/Employees/Contracts/EmployeeRepository.php b/App/Modules/Employees/Contracts/EmployeeRepository.php new file mode 100644 index 0000000..64aec09 --- /dev/null +++ b/App/Modules/Employees/Contracts/EmployeeRepository.php @@ -0,0 +1,46 @@ + 'CONCAT(users.first_name, \' \', users.last_name)', + ]; + + protected $joins = [ + ['users', 'employees.user_id', 'users.id'], + ]; + + protected $form = [ + 'employee_department' => [ + 'type' => 'select', + 'itemsCallback' => 'employeeDepartments', + ], + 'employee_position' => [ + 'type' => 'select', + 'itemsCallback' => 'employeePositions', + ], + ]; + + protected $eagerLoads = ['department']; + + public function callbackEmployeeDepartments() + { + return app()->make(EmployeeRepository::class)->getEmployeeDepartments()->get(); + } + + public function callbackEmployeePositions() + { + return app()->make(EmployeeRepository::class)->getEmployeePositions()->get(); + } +} diff --git a/App/Modules/Employees/Http/Controllers/EmployeeCategoryController.php b/App/Modules/Employees/Http/Controllers/EmployeeCategoryController.php new file mode 100644 index 0000000..6f90012 --- /dev/null +++ b/App/Modules/Employees/Http/Controllers/EmployeeCategoryController.php @@ -0,0 +1,110 @@ +authorize('add_edit_employee_category'); + + return view('employees::edit_employee_category_details', [ + 'employee_category' => null, + 'category_form_validator' => $this->jsValidator(UpdateEmployeeCategoryRequest::class), + ]); + } + + /** + * Get employee category form. + * + * @param CreateEmployeeCategoryRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postEmployeeCategoryNew(CreateEmployeeCategoryRequest $request) + { + $this->authorize('add_edit_employee_category'); + + $employeeCategory = $this->employeeRepository->createEmployeeCategory($request->all()); + + return $this->printRedirect(route('employee_category.details.edit', $employeeCategory->id), + trans('employees::employee_category.employee_category_created')); + } + + /** + * Get employee category form. + * + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeCategoryEdit($id) + { + $this->authorize('add_edit_employee_category'); + + return view('employees::edit_employee_category_details', [ + 'employee_category' => $this->employeeRepository->findEmployeeCategory($id), + 'category_form_validator' => $this->jsValidator(UpdateEmployeeCategoryRequest::class), + ]); + } + + /** + * Save employee category. + * + * @param UpdateEmployeeCategoryRequest $request + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postEmployeeCategoryEdit(UpdateEmployeeCategoryRequest $request, $id) + { + $this->authorize('add_edit_employee_category'); + + $this->employeeRepository->updateEmployeeCategory($request->all(), $id); + + return $this->printJson(true, [], trans('employees::employee_category.employee_category_updated')); + } + + /** + * List employee categories. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeCategoryList() + { + $this->authorize('list_employee_categories'); + + return view('employees::employee_category_list', [ + 'employee_categories' => $this->employeeRepository + ->getEmployeeCategories() + ->paginate(config('collejo.pagination.perpage')), + ]); + } + + public function __construct(EmployeeRepository $employeeRepository) + { + $this->employeeRepository = $employeeRepository; + } +} diff --git a/App/Modules/Employees/Http/Controllers/EmployeeController.php b/App/Modules/Employees/Http/Controllers/EmployeeController.php new file mode 100644 index 0000000..bf1ea4e --- /dev/null +++ b/App/Modules/Employees/Http/Controllers/EmployeeController.php @@ -0,0 +1,209 @@ +authorize('view_employee_general_details'); + + return view('employees::view_employee_details', [ + 'employee' => $this->employeeRepository->findEmployee($employeeId), + ]); + } + + /** + * Get employee account view. + * + * @param $employeeId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeAccountView($employeeId) + { + $this->authorize('view_user_account_info'); + + $this->middleware('reauth'); + + $employee = $this->employeeRepository->findEmployee($employeeId); + + return view('employees::view_employee_account', [ + 'employee' => $employee, + 'user' => present($employee->user, UserAccountPresenter::class), + ]); + } + + /** + * Get account edit form. + * + * @param $employeeId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * @throws \Exception + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeAccountEdit($employeeId) + { + $this->authorize('edit_user_account_info'); + + $this->middleware('reauth'); + + $employee = $this->employeeRepository->findEmployee($employeeId); + + return view('employees::edit_employee_account', [ + 'employee' => $employee, + 'user' => present($employee->user, UserAccountPresenter::class), + 'user_form_validator' => $this->jsValidator(UpdateUserAccountRequest::class), + ]); + } + + /** + * Post account edit form. + * + * @param UpdateUserAccountRequest $request + * @param $employeeId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postEmployeeAccountEdit(UpdateUserAccountRequest $request, $employeeId) + { + $this->authorize('edit_user_account_info'); + + $this->middleware('reauth'); + + $this->employeeRepository->updateEmployee($request->all(), $employeeId); + + return $this->printJson(true, [], trans('employees::employee.employee_updated')); + } + + /** + * Get new employee form. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * @throws \Exception + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeNew() + { + $this->authorize('create_employee'); + + return view('employees::edit_employee_details', [ + 'employee' => null, + 'employee_positions' => $this->employeeRepository->getEmployeePositions()->get(), + 'employee_departments' => $this->employeeRepository->getEmployeeDepartments()->get(), + 'employee_grades' => $this->employeeRepository->getEmployeeGrades()->get(), + 'employee_form_validator' => $this->jsValidator(CreateEmployeeDetailsRequest::class), + ]); + } + + /** + * Post create employee form. + * + * @param CreateEmployeeDetailsRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postEmployeeNew(CreateEmployeeDetailsRequest $request) + { + $this->authorize('create_employee'); + + $employee = $this->employeeRepository->createEmployee($request->all()); + + return $this->printRedirect(route('employee.details.edit', $employee->id), trans('employees::employee.employee_created')); + } + + /** + * Get save employee form. + * + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeDetailsEdit($id) + { + $this->authorize('edit_employee_general_details'); + + return view('employees::edit_employee_details', [ + 'employee' => present($this->employeeRepository->findEmployee($id), EmployeeDetailsPresenter::class), + 'employee_positions' => $this->employeeRepository->getEmployeePositions()->get(), + 'employee_departments' => $this->employeeRepository->getEmployeeDepartments()->get(), + 'employee_grades' => $this->employeeRepository->getEmployeeGrades()->get(), + 'employee_form_validator' => $this->jsValidator(UpdateEmployeeDetailsRequest::class), + ]); + } + + /** + * Save employee details. + * + * @param UpdateEmployeeDetailsRequest $request + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postEmployeeDetailsEdit(UpdateEmployeeDetailsRequest $request, $id) + { + $this->authorize('edit_employee_general_details'); + + $employee = $this->employeeRepository->updateEmployee($request->all(), $id); + + return $this->printJson(true, [], trans('employees::employee.employee_updated')); + } + + /** + * Returns the employees list. + * + * @param EmployeeListCriteria $criteria + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeList(EmployeeListCriteria $criteria) + { + $this->authorize('list_employees'); + + return view('employees::employee_list', [ + 'criteria' => $criteria, + 'employees' => present($this->employeeRepository->getEmployees($criteria)->paginate(), EmployeeListPresenter::class), + ]); + } + + public function __construct(EmployeeRepository $employeeRepository) + { + $this->employeeRepository = $employeeRepository; + } +} diff --git a/App/Modules/Employees/Http/Controllers/EmployeeDepartmentController.php b/App/Modules/Employees/Http/Controllers/EmployeeDepartmentController.php new file mode 100644 index 0000000..a582bca --- /dev/null +++ b/App/Modules/Employees/Http/Controllers/EmployeeDepartmentController.php @@ -0,0 +1,110 @@ +authorize('add_edit_employee_department'); + + return view('employees::edit_employee_department_details', [ + 'employee_department' => null, + 'department_form_validator' => $this->jsValidator(CreateEmployeeDepartmentRequest::class), + ]); + } + + /** + * Save new employee department. + * + * @param CreateEmployeeDepartmentRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postEmployeeDepartmentNew(CreateEmployeeDepartmentRequest $request) + { + $this->authorize('add_edit_employee_department'); + + $employeeDepartment = $this->employeeRepository->createEmployeeDepartment($request->all()); + + return $this->printRedirect(route('employee_department.details.edit', $employeeDepartment->id), + trans('employees::employee_department.employee_department_created')); + } + + /** + * Get employee department edit form. + * + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeDepartmentEdit($id) + { + $this->authorize('add_edit_employee_department'); + + return view('employees::edit_employee_department_details', [ + 'employee_department' => $this->employeeRepository->findEmployeeDepartment($id), + 'department_form_validator' => $this->jsValidator(UpdateEmployeeDepartmentRequest::class), + ]); + } + + /** + * Save employee department form. + * + * @param UpdateEmployeeDepartmentRequest $request + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postEmployeeDepartmentEdit(UpdateEmployeeDepartmentRequest $request, $id) + { + $this->authorize('add_edit_employee_department'); + + $this->employeeRepository->updateEmployeeDepartment($request->all(), $id); + + return $this->printJson(true, [], trans('employees::employee_department.employee_department_updated')); + } + + /** + * Get employee departments list. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeDepartmentList() + { + $this->authorize('list_employee_departments'); + + return view('employees::employee_department_list', [ + 'employee_departments' => $this->employeeRepository + ->getEmployeeDepartments() + ->paginate(config('collejo.pagination.perpage')), + ]); + } + + public function __construct(EmployeeRepository $employeeRepository) + { + $this->employeeRepository = $employeeRepository; + } +} diff --git a/App/Modules/Employees/Http/Controllers/EmployeeGradeController.php b/App/Modules/Employees/Http/Controllers/EmployeeGradeController.php new file mode 100644 index 0000000..48375c6 --- /dev/null +++ b/App/Modules/Employees/Http/Controllers/EmployeeGradeController.php @@ -0,0 +1,110 @@ +authorize('add_edit_employee_grade'); + + return view('employees::edit_employee_grade_details', [ + 'employee_grade' => null, + 'grade_form_validator' => $this->jsValidator(CreateEmployeeGradeRequest::class), + ]); + } + + /** + * Save new employee grade. + * + * @param CreateEmployeeGradeRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postEmployeeGradeNew(CreateEmployeeGradeRequest $request) + { + $this->authorize('add_edit_employee_grade'); + + $employeeGrade = $this->employeeRepository->createEmployeeGrade($request->all()); + + return $this->printRedirect(route('employee_grade.details.edit', $employeeGrade->id), + trans('employees::employee_grade.employee_grade_created')); + } + + /** + * Get employee grade edit form. + * + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeGradeEdit($id) + { + $this->authorize('add_edit_employee_grade'); + + return view('employees::edit_employee_grade_details', [ + 'employee_grade' => $this->employeeRepository->findEmployeeGrade($id), + 'grade_form_validator' => $this->jsValidator(UpdateEmployeeGradeRequest::class), + ]); + } + + /** + * Save employee grade. + * + * @param UpdateEmployeeGradeRequest $request + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postEmployeeGradeEdit(UpdateEmployeeGradeRequest $request, $id) + { + $this->authorize('add_edit_employee_grade'); + + $this->employeeRepository->updateEmployeeGrade($request->all(), $id); + + return $this->printJson(true, [], trans('employees::employee_grade.employee_grade_updated')); + } + + /** + * Get list of employee grades. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeeGradeList() + { + $this->authorize('list_employee_grades'); + + return view('employees::employee_grade_list', [ + 'employee_grades' => $this->employeeRepository + ->getEmployeeGrades() + ->paginate(config('collejo.pagination.perpage')), + ]); + } + + public function __construct(EmployeeRepository $employeeRepository) + { + $this->employeeRepository = $employeeRepository; + } +} diff --git a/App/Modules/Employees/Http/Controllers/EmployeePositionController.php b/App/Modules/Employees/Http/Controllers/EmployeePositionController.php new file mode 100644 index 0000000..fc2892c --- /dev/null +++ b/App/Modules/Employees/Http/Controllers/EmployeePositionController.php @@ -0,0 +1,114 @@ +authorize('add_edit_employee_position'); + + return view('employees::edit_employee_position_details', [ + 'employee_position' => null, + 'position_form_validator' => $this->jsValidator(CreateEmployeePositionRequest::class), + 'employee_categories' => $this->employeeRepository->getEmployeeCategories()->get(), + ]); + } + + /** + * Save new employee position. + * + * @param CreateEmployeePositionRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return mixed + */ + public function postEmployeePositionNew(CreateEmployeePositionRequest $request) + { + $this->authorize('add_edit_employee_position'); + + $employeePosition = $this->employeeRepository->createEmployeePosition($request->all()); + + return $this->printRedirect(route('employee_position.details.edit', $employeePosition->id), + trans('employees::employee_position.employee_position_created')); + } + + /** + * Get employee position form. + * + * @param $id + * + * @throws \Exception + * + * @return mixed + */ + public function getEmployeePositionEdit($id) + { + $this->authorize('add_edit_employee_position'); + + return view('employees::edit_employee_position_details', [ + 'employee_position' => $this->employeeRepository->findEmployeePosition($id), + 'position_form_validator' => $this->jsValidator(CreateEmployeePositionRequest::class), + 'employee_categories' => $this->employeeRepository->getEmployeeCategories()->get(), + ]); + } + + /** + * Post employee position data. + * + * @param UpdateEmployeePositionRequest $request + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return mixed + */ + public function postEmployeePositionEdit(UpdateEmployeePositionRequest $request, $id) + { + $this->authorize('add_edit_employee_position'); + + $this->employeeRepository->updateEmployeePosition($request->all(), $id); + + return $this->printJson(true, [], trans('employees::employee_position.employee_position_updated')); + } + + /** + * Get a list of employee positions. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getEmployeePositionList() + { + $this->authorize('add_edit_employee_position'); + + return view('employees::employee_position_list', [ + 'employee_positions' => $this->employeeRepository + ->getEmployeePositions() + ->with('employeeCategory') + ->paginate(config('collejo.pagination.perpage')), + ]); + } + + public function __construct(EmployeeRepository $employeeRepository) + { + $this->employeeRepository = $employeeRepository; + } +} diff --git a/App/Modules/Employees/Http/Requests/CreateEmployeeCategoryRequest.php b/App/Modules/Employees/Http/Requests/CreateEmployeeCategoryRequest.php new file mode 100644 index 0000000..1f8dbed --- /dev/null +++ b/App/Modules/Employees/Http/Requests/CreateEmployeeCategoryRequest.php @@ -0,0 +1,24 @@ + 'required|unique:employee_categories', + 'code' => 'unique:employee_categories|max:5', + ]; + } + + public function attributes() + { + return [ + 'name' => trans('employees::employee_category.name'), + 'code' => trans('employees::employee_category.code'), + ]; + } +} diff --git a/App/Modules/Employees/Http/Requests/CreateEmployeeDepartmentRequest.php b/App/Modules/Employees/Http/Requests/CreateEmployeeDepartmentRequest.php new file mode 100644 index 0000000..061dbd2 --- /dev/null +++ b/App/Modules/Employees/Http/Requests/CreateEmployeeDepartmentRequest.php @@ -0,0 +1,24 @@ + 'required|unique:employee_departments', + 'code' => 'unique:employee_departments|max:5', + ]; + } + + public function attributes() + { + return [ + 'name' => trans('employees::employee_department.name'), + 'code' => trans('employees::employee_department.code'), + ]; + } +} diff --git a/App/Modules/Employees/Http/Requests/CreateEmployeeDetailsRequest.php b/App/Modules/Employees/Http/Requests/CreateEmployeeDetailsRequest.php new file mode 100644 index 0000000..ef2d695 --- /dev/null +++ b/App/Modules/Employees/Http/Requests/CreateEmployeeDetailsRequest.php @@ -0,0 +1,36 @@ + 'required|unique:employees', + 'first_name' => 'required', + 'last_name' => 'required', + 'joined_on' => 'required', + 'employee_position_id' => 'required', + 'employee_department_id' => 'required', + 'employee_grade_id' => 'required', + 'date_of_birth' => 'required', + ]; + } + + public function attributes() + { + return [ + 'employee_number' => 'Employee Number', + 'first_name' => 'First Name', + 'last_name' => 'Last Name', + 'joined_on' => 'Joined Date', + 'employee_position_id' => 'Employee Position', + 'employee_department_id' => 'Employee Department', + 'employee_grade_id' => 'Employee Grade', + 'date_of_birth' => 'Date of Birth', + ]; + } +} diff --git a/App/Modules/Employees/Http/Requests/CreateEmployeeGradeRequest.php b/App/Modules/Employees/Http/Requests/CreateEmployeeGradeRequest.php new file mode 100644 index 0000000..1ba7ffb --- /dev/null +++ b/App/Modules/Employees/Http/Requests/CreateEmployeeGradeRequest.php @@ -0,0 +1,30 @@ + 'required|unique:employee_grades', + 'code' => 'unique:employee_grades|max:5', + 'priority' => 'numeric', + 'max_sessions_per_day' => 'numeric', + 'max_sessions_per_week' => 'numeric', + ]; + } + + public function attributes() + { + return [ + 'name' => trans('students::employee_grade.name'), + 'code' => trans('students::employee_grade.code'), + 'priority' => trans('students::employee_grade.priority'), + 'max_sessions_per_day' => trans('students::employee_grade.max_sessions_per_day'), + 'max_sessions_per_week' => trans('students::employee_grade.max_sessions_per_week'), + ]; + } +} diff --git a/App/Modules/Employees/Http/Requests/CreateEmployeePositionRequest.php b/App/Modules/Employees/Http/Requests/CreateEmployeePositionRequest.php new file mode 100644 index 0000000..9f4824c --- /dev/null +++ b/App/Modules/Employees/Http/Requests/CreateEmployeePositionRequest.php @@ -0,0 +1,22 @@ + 'required|unique:employee_positions', + ]; + } + + public function attributes() + { + return [ + 'name' => trans('employees::employee_position.name'), + ]; + } +} diff --git a/App/Modules/Employees/Http/Requests/UpdateEmployeeCategoryRequest.php b/App/Modules/Employees/Http/Requests/UpdateEmployeeCategoryRequest.php new file mode 100644 index 0000000..d7469ee --- /dev/null +++ b/App/Modules/Employees/Http/Requests/UpdateEmployeeCategoryRequest.php @@ -0,0 +1,25 @@ +rules(), [ + 'name' => 'required|unique:employee_categories,name,'.$this->json('id'), + 'code' => 'max:5|unique:employee_categories,code,'.$this->json('id'), + ]); + } + + public function attributes() + { + $createRequest = new CreateEmployeeCategoryRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Employees/Http/Requests/UpdateEmployeeDepartmentRequest.php b/App/Modules/Employees/Http/Requests/UpdateEmployeeDepartmentRequest.php new file mode 100644 index 0000000..dd700be --- /dev/null +++ b/App/Modules/Employees/Http/Requests/UpdateEmployeeDepartmentRequest.php @@ -0,0 +1,25 @@ +rules(), [ + 'name' => 'required|unique:employee_departments,name,'.$this->json('id'), + 'code' => 'max:5|unique:employee_departments,code,'.$this->json('id'), + ]); + } + + public function attributes() + { + $createRequest = new CreateEmployeeDepartmentRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Employees/Http/Requests/UpdateEmployeeDetailsRequest.php b/App/Modules/Employees/Http/Requests/UpdateEmployeeDetailsRequest.php new file mode 100644 index 0000000..b7e2427 --- /dev/null +++ b/App/Modules/Employees/Http/Requests/UpdateEmployeeDetailsRequest.php @@ -0,0 +1,24 @@ +rules(), [ + 'employee_number' => 'required|unique:employees,employee_number,'.$this->json('id'), + ]); + } + + public function attributes() + { + $createRequest = new CreateEmployeeDetailsRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Employees/Http/Requests/UpdateEmployeeGradeRequest.php b/App/Modules/Employees/Http/Requests/UpdateEmployeeGradeRequest.php new file mode 100644 index 0000000..fb3efaf --- /dev/null +++ b/App/Modules/Employees/Http/Requests/UpdateEmployeeGradeRequest.php @@ -0,0 +1,25 @@ +rules(), [ + 'name' => 'required|unique:employee_grades,name,'.$this->json('id'), + 'code' => 'max:5|unique:employee_grades,code,'.$this->json('id'), + ]); + } + + public function attributes() + { + $createRequest = new CreateEmployeeGradeRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Employees/Http/Requests/UpdateEmployeePositionRequest.php b/App/Modules/Employees/Http/Requests/UpdateEmployeePositionRequest.php new file mode 100644 index 0000000..828c1ad --- /dev/null +++ b/App/Modules/Employees/Http/Requests/UpdateEmployeePositionRequest.php @@ -0,0 +1,24 @@ +rules(), [ + 'name' => 'required|unique:employee_positions,name,'.$this->json('id'), + ]); + } + + public function attributes() + { + $createRequest = new CreateEmployeePositionRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Employees/Http/menus.php b/App/Modules/Employees/Http/menus.php new file mode 100644 index 0000000..6b92133 --- /dev/null +++ b/App/Modules/Employees/Http/menus.php @@ -0,0 +1,31 @@ +setParent($parent) + ->setPermission('list_employees'); + + Menu::create('employee.new', trans('employees::menu.employee_new')) + ->setParent($parent) + ->setPermission('create_employee'); + })->setParent($parent); + + Menu::group(function ($parent) { + Menu::create('employee_categories.list', trans('employees::menu.categories')) + ->setParent($parent) + ->setPermission('list_employee_categories'); + + Menu::create('employee_positions.list', trans('employees::menu.positions')) + ->setParent($parent) + ->setPermission('list_employee_positions'); + + Menu::create('employee_grades.list', trans('employees::menu.grades')) + ->setParent($parent) + ->setPermission('list_employee_grades'); + + Menu::create('employee_departments.list', trans('employees::menu.departments')) + ->setParent($parent) + ->setPermission('list_employee_departments'); + })->setParent($parent); +})->setOrder(30); diff --git a/App/Modules/Employees/Http/routes.php b/App/Modules/Employees/Http/routes.php new file mode 100644 index 0000000..a9409d6 --- /dev/null +++ b/App/Modules/Employees/Http/routes.php @@ -0,0 +1,80 @@ + 'dashboard', 'middleware' => 'auth'], function () { + Route::group(['prefix' => 'employees'], function () { + Route::get('/list', 'EmployeeController@getEmployeeList')->name('employees.list'); + }); + + Route::group(['prefix' => 'employee'], function () { + Route::get('/new', 'EmployeeController@getEmployeeNew')->name('employee.new'); + Route::post('/new', 'EmployeeController@postEmployeeNew'); + + Route::get('/{id}/details/view', 'EmployeeController@getEmployeeDetailsView')->name('employee.details.view'); + Route::get('/{id}/details/edit', 'EmployeeController@getEmployeeDetailsEdit')->name('employee.details.edit'); + Route::post('/{id}/details/edit', 'EmployeeController@postEmployeeDetailsEdit'); + + Route::get('/{id}/contacts/view', 'EmployeeController@getEmployeeAddressesView')->name('employee.addresses.view'); + Route::get('/{id}/contacts/edit', 'EmployeeController@getEmployeeAddressesEdit')->name('employee.addresses.edit'); + + Route::get('/{id}/contact/new', 'EmployeeController@getEmployeeAddressNew')->name('employee.address.new'); + Route::post('/{id}/contact/new', 'EmployeeController@postEmployeeAddressNew'); + + Route::get('/{id}/contact/{cid}/edit', 'EmployeeController@getEmployeeAddressEdit')->name('employee.address.edit'); + Route::post('/{id}/contact/{cid}/edit', 'EmployeeController@postEmployeeAddressEdit'); + + Route::get('/{id}/contact/{cid}/delete', 'EmployeeController@getEmployeeAddressDelete')->name('employee.address.delete'); + + Route::get('/{id}/account/view', 'EmployeeController@getEmployeeAccountView')->name('employee.account.view'); + + Route::get('/{id}/account/edit', 'EmployeeController@getEmployeeAccountEdit')->name('employee.account.edit'); + Route::post('/{id}/account/edit', 'EmployeeController@postEmployeeAccountEdit'); + }); + + Route::group(['prefix' => 'employee_categories'], function () { + Route::get('/list', 'EmployeeCategoryController@getEmployeeCategoryList')->name('employee_categories.list'); + }); + + Route::group(['prefix' => 'employee_category'], function () { + Route::get('/new', 'EmployeeCategoryController@getEmployeeCategoryNew')->name('employee_category.new'); + Route::post('/new', 'EmployeeCategoryController@postEmployeeCategoryNew'); + + Route::get('/{id}/edit', 'EmployeeCategoryController@getEmployeeCategoryEdit')->name('employee_category.details.edit'); + Route::post('/{id}/edit', 'EmployeeCategoryController@postEmployeeCategoryEdit'); + }); + + Route::group(['prefix' => 'employee_departments'], function () { + Route::get('/list', 'EmployeeDepartmentController@getEmployeeDepartmentList')->name('employee_departments.list'); + }); + + Route::group(['prefix' => 'employee_department'], function () { + Route::get('/new', 'EmployeeDepartmentController@getEmployeeDepartmentNew')->name('employee_department.new'); + Route::post('/new', 'EmployeeDepartmentController@postEmployeeDepartmentNew'); + + Route::get('/{id}/edit', 'EmployeeDepartmentController@getEmployeeDepartmentEdit')->name('employee_department.details.edit'); + Route::post('/{id}/edit', 'EmployeeDepartmentController@postEmployeeDepartmentEdit'); + }); + + Route::group(['prefix' => 'employee_grades'], function () { + Route::get('/list', 'EmployeeGradeController@getEmployeeGradeList')->name('employee_grades.list'); + }); + + Route::group(['prefix' => 'employee_grade'], function () { + Route::get('/new', 'EmployeeGradeController@getEmployeeGradeNew')->name('employee_grade.new'); + Route::post('/new', 'EmployeeGradeController@postEmployeeGradeNew'); + + Route::get('/{id}/edit', 'EmployeeGradeController@getEmployeeGradeEdit')->name('employee_grade.details.edit'); + Route::post('/{id}/edit', 'EmployeeGradeController@postEmployeeGradeEdit'); + }); + + Route::group(['prefix' => 'employee_positions'], function () { + Route::get('/list', 'EmployeePositionController@getEmployeePositionList')->name('employee_positions.list'); + }); + + Route::group(['prefix' => 'employee_position'], function () { + Route::get('/new', 'EmployeePositionController@getEmployeePositionNew')->name('employee_position.new'); + Route::post('/new', 'EmployeePositionController@postEmployeePositionNew'); + + Route::get('/{id}/edit', 'EmployeePositionController@getEmployeePositionEdit')->name('employee_position.details.edit'); + Route::post('/{id}/edit', 'EmployeePositionController@postEmployeePositionEdit'); + }); +}); diff --git a/App/Modules/Employees/Models/Employee.php b/App/Modules/Employees/Models/Employee.php new file mode 100644 index 0000000..080684f --- /dev/null +++ b/App/Modules/Employees/Models/Employee.php @@ -0,0 +1,48 @@ +belongsTo(EmployeeDepartment::class); + } + + public function employeePosition() + { + return $this->belongsTo(EmployeePosition::class); + } + + public function employeeGrade() + { + return $this->belongsTo(EmployeeGrade::class); + } + + public function picture() + { + return $this->hasOne(Media::class, 'id', 'image_id'); + } +} diff --git a/App/Modules/Employees/Models/EmployeeCategory.php b/App/Modules/Employees/Models/EmployeeCategory.php new file mode 100644 index 0000000..9b2564b --- /dev/null +++ b/App/Modules/Employees/Models/EmployeeCategory.php @@ -0,0 +1,22 @@ +hasMany(Employee::class); + } + + public function employeePositions() + { + return $this->hasMany(EmployeePosition::class); + } +} diff --git a/src/Models/EmployeeDepartment.php b/App/Modules/Employees/Models/EmployeeDepartment.php similarity index 55% rename from src/Models/EmployeeDepartment.php rename to App/Modules/Employees/Models/EmployeeDepartment.php index 94bd3ac..3619cfd 100644 --- a/src/Models/EmployeeDepartment.php +++ b/App/Modules/Employees/Models/EmployeeDepartment.php @@ -1,20 +1,17 @@ hasMany(Employee::class); + return $this->hasMany(Employee::class); } - } diff --git a/src/Models/EmployeeGrade.php b/App/Modules/Employees/Models/EmployeeGrade.php similarity index 61% rename from src/Models/EmployeeGrade.php rename to App/Modules/Employees/Models/EmployeeGrade.php index 1b998a9..b247e4c 100644 --- a/src/Models/EmployeeGrade.php +++ b/App/Modules/Employees/Models/EmployeeGrade.php @@ -1,20 +1,17 @@ hasMany(Employee::class); + return $this->hasMany(Employee::class); } - } diff --git a/App/Modules/Employees/Models/EmployeePosition.php b/App/Modules/Employees/Models/EmployeePosition.php new file mode 100644 index 0000000..507519e --- /dev/null +++ b/App/Modules/Employees/Models/EmployeePosition.php @@ -0,0 +1,24 @@ +belongsTo(EmployeeCategory::class); + } + + public function employees() + { + return $this->hasManyThrough(EmployeeCategory::class, 'employeeCategory'); + } +} diff --git a/App/Modules/Employees/Models/factories/Employee.php b/App/Modules/Employees/Models/factories/Employee.php new file mode 100644 index 0000000..4be6e3f --- /dev/null +++ b/App/Modules/Employees/Models/factories/Employee.php @@ -0,0 +1,11 @@ +define(Collejo\App\Modules\Employees\Models\Employee::class, function (Faker\Generator $faker) { + return [ + 'employee_number' => $faker->numerify('S-##########'), + 'joined_on' => $faker->date, + ]; +}); diff --git a/App/Modules/Employees/Models/factories/EmployeeCategory.php b/App/Modules/Employees/Models/factories/EmployeeCategory.php new file mode 100644 index 0000000..25e869e --- /dev/null +++ b/App/Modules/Employees/Models/factories/EmployeeCategory.php @@ -0,0 +1,11 @@ +define(Collejo\App\Modules\Employees\Models\EmployeeCategory::class, function (Faker\Generator $faker) { + return [ + 'code' => $faker->firstName, + 'name' => $faker->name, + ]; +}); diff --git a/App/Modules/Employees/Models/factories/EmployeeDepartment.php b/App/Modules/Employees/Models/factories/EmployeeDepartment.php new file mode 100644 index 0000000..ae7d54c --- /dev/null +++ b/App/Modules/Employees/Models/factories/EmployeeDepartment.php @@ -0,0 +1,11 @@ +define(Collejo\App\Modules\Employees\Models\EmployeeDepartment::class, function (Faker\Generator $faker) { + return [ + 'code' => $faker->name, + 'name' => $faker->name, + ]; +}); diff --git a/App/Modules/Employees/Models/factories/EmployeeGrade.php b/App/Modules/Employees/Models/factories/EmployeeGrade.php new file mode 100644 index 0000000..e687d7c --- /dev/null +++ b/App/Modules/Employees/Models/factories/EmployeeGrade.php @@ -0,0 +1,14 @@ +define(Collejo\App\Modules\Employees\Models\EmployeeGrade::class, function (Faker\Generator $faker) { + return [ + 'name' => $faker->name, + 'code' => $faker->name, + 'priority' => 1, + 'max_sessions_per_day' => 1, + 'max_sessions_per_week' => 3, + ]; +}); diff --git a/App/Modules/Employees/Models/factories/EmployeePosition.php b/App/Modules/Employees/Models/factories/EmployeePosition.php new file mode 100644 index 0000000..4739109 --- /dev/null +++ b/App/Modules/Employees/Models/factories/EmployeePosition.php @@ -0,0 +1,10 @@ +define(Collejo\App\Modules\Employees\Models\EmployeePosition::class, function (Faker\Generator $faker) { + return [ + 'name' => $faker->name, + ]; +}); diff --git a/App/Modules/Employees/Presenters/EmployeeCategoryPresenter.php b/App/Modules/Employees/Presenters/EmployeeCategoryPresenter.php new file mode 100644 index 0000000..f09af77 --- /dev/null +++ b/App/Modules/Employees/Presenters/EmployeeCategoryPresenter.php @@ -0,0 +1,16 @@ + MediaBasicInformationPresenter::class, + 'user' => UserBasicInformationPresenter::class, + 'employee_department' => EmployeeDepartmentPresenter::class, + 'employee_position' => EmployeePositionPresenter::class, + 'employee_grade' => EmployeeGradePresenter::class, + ]; + + protected $appends = [ + 'name', + 'first_name', + 'last_name', + 'date_of_birth', + ]; + + protected $hidden = [ + 'user_id', + 'created_by', + 'updated_by', + 'created_at', + 'updated_at', + 'deleted_at', + ]; +} diff --git a/App/Modules/Employees/Presenters/EmployeeGradePresenter.php b/App/Modules/Employees/Presenters/EmployeeGradePresenter.php new file mode 100644 index 0000000..a75229f --- /dev/null +++ b/App/Modules/Employees/Presenters/EmployeeGradePresenter.php @@ -0,0 +1,16 @@ + UserBasicInformationPresenter::class, + 'employee_department' => EmployeeDepartmentPresenter::class, + 'employee_position' => EmployeePositionPresenter::class, + 'employee_grade' => EmployeeGradePresenter::class, + ]; + + protected $hidden = [ + 'user_id', + 'image_id', + 'created_by', + 'updated_by', + 'created_at', + 'updated_at', + 'deleted_at', + ]; +} diff --git a/App/Modules/Employees/Presenters/EmployeePositionPresenter.php b/App/Modules/Employees/Presenters/EmployeePositionPresenter.php new file mode 100644 index 0000000..68eac5a --- /dev/null +++ b/App/Modules/Employees/Presenters/EmployeePositionPresenter.php @@ -0,0 +1,20 @@ + EmployeeCategoryPresenter::class, + ]; + + protected $hidden = [ + 'created_by', + 'updated_by', + 'created_at', + 'updated_at', + 'deleted_at', + ]; +} diff --git a/App/Modules/Employees/Providers/EmployeesModuleServiceProvider.php b/App/Modules/Employees/Providers/EmployeesModuleServiceProvider.php new file mode 100644 index 0000000..907ac1e --- /dev/null +++ b/App/Modules/Employees/Providers/EmployeesModuleServiceProvider.php @@ -0,0 +1,42 @@ +app->bind(EmployeeRepositoryContract::class, EmployeeRepository::class); + $this->app->bind(EmployeeListCriteria::class); + } + + /** + * Returns an array of permissions for the current module. + * + * @return array + */ + public function getPermissions() + { + return [ + 'view_employee_general_details' => ['edit_employee_general_details', 'view_employee_class_details', 'view_employee_contact_details', 'view_employee_recruitment_details', 'list_employees'], + 'view_employee_class_details' => ['assign_employee_to_class'], + 'view_employee_contact_details' => ['edit_employee_contact_details'], + 'view_employee_recruitment_details' => ['edit_employee_recruitment_details'], + 'list_employees' => ['create_employee'], + 'list_employee_positions' => ['add_edit_employee_position'], + 'add_edit_employee_position' => ['list_employee_categories', 'add_edit_employee_category'], + 'list_employee_grades' => ['add_edit_employee_grade'], + 'list_employee_departments' => ['add_edit_employee_department'], + ]; + } +} diff --git a/App/Modules/Employees/Repositories/EmployeeRepository.php b/App/Modules/Employees/Repositories/EmployeeRepository.php new file mode 100644 index 0000000..63a34d6 --- /dev/null +++ b/App/Modules/Employees/Repositories/EmployeeRepository.php @@ -0,0 +1,310 @@ +findEmployeePosition($employeePositionId)->update($attributes); + + return $this->findEmployeePosition($employeePositionId); + } + + /** + * Create employee positions by the given attributes. + * + * @param array $attributes + * + * @return mixed + */ + public function createEmployeePosition(array $attributes) + { + return EmployeePosition::create($attributes); + } + + /** + * Get employee positions by the given criteria. + * + * @param $employeePositionId + * + * @return mixed + */ + public function findEmployeePosition($employeePositionId) + { + return EmployeePosition::findOrFail($employeePositionId); + } + + /** + * Get employee positions. + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getEmployeePositions() + { + return $this->search(EmployeePosition::class); + } + + /** + * Update employee grade by the given id and attributes. + * + * @param array $attributes + * @param $employeeGradeId + * + * @return mixed + */ + public function updateEmployeeGrade(array $attributes, $employeeGradeId) + { + $this->findEmployeeGrade($employeeGradeId)->update($attributes); + + return $this->findEmployeeGrade($employeeGradeId); + } + + /** + * Create employee grade by the given attributes. + * + * @param array $attributes + * + * @return mixed + */ + public function createEmployeeGrade(array $attributes) + { + return EmployeeGrade::create($attributes); + } + + /** + * Get employee grade by id. + * + * @param $employeeGradeId + * + * @return mixed + */ + public function findEmployeeGrade($employeeGradeId) + { + return EmployeeGrade::findOrFail($employeeGradeId); + } + + /** + * Get employee grades by the given criteria. + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getEmployeeGrades() + { + return $this->search(EmployeeGrade::class); + } + + /** + * Update employee department by the given id and attributes. + * + * @param array $attributes + * @param $employeeDepartmentId + * + * @return mixed + */ + public function updateEmployeeDepartment(array $attributes, $employeeDepartmentId) + { + $this->findEmployeeDepartment($employeeDepartmentId)->update($attributes); + + return $this->findEmployeeDepartment($employeeDepartmentId); + } + + /** + * Create an employee department by the given attributes. + * + * @param array $attributes + * + * @return mixed + */ + public function createEmployeeDepartment(array $attributes) + { + return EmployeeDepartment::create($attributes); + } + + /** + * Get employee by the given id. + * + * @param $employeeDepartmentId + * + * @return mixed + */ + public function findEmployeeDepartment($employeeDepartmentId) + { + return EmployeeDepartment::findOrFail($employeeDepartmentId); + } + + /** + * Get employee departments. + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getEmployeeDepartments() + { + return $this->search(EmployeeDepartment::class); + } + + /** + * Update employee category by the given id and attributes. + * + * @param array $attributes + * @param $employeeCategoryId + * + * @return mixed + */ + public function updateEmployeeCategory(array $attributes, $employeeCategoryId) + { + $this->findEmployeeCategory($employeeCategoryId)->update($attributes); + + return $this->findEmployeeCategory($employeeCategoryId); + } + + /** + * Create employee category. + * + * @param array $attributes + * + * @return mixed + */ + public function createEmployeeCategory(array $attributes) + { + return EmployeeCategory::create($attributes); + } + + /** + * Get employee category by id. + * + * @param $employeeCategoryId + * + * @return mixed + */ + public function findEmployeeCategory($employeeCategoryId) + { + return EmployeeCategory::findOrFail($employeeCategoryId); + } + + /** + * Get employee categories by the given criteria. + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getEmployeeCategories() + { + return $this->search(EmployeeCategory::class); + } + + /** + * Get employees with the given criteria. + * + * @param $criteria + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getEmployees($criteria) + { + return $this->search($criteria); + } + + /** + * Get employee by id. + * + * @param $id + * + * @return mixed + */ + public function findEmployee($id) + { + return Employee::findOrFail($id); + } + + /** + * Update an employee with the given id and attributes. + * + * @param array $attributes + * @param $employeeId + * + * @return mixed + */ + public function updateEmployee(array $attributes, $employeeId) + { + $employee = $this->findEmployee($employeeId); + + if (isset($attributes['joined_on'])) { + $attributes['joined_on'] = toUTC($attributes['joined_on']); + } + + if (!isset($attributes['image_id'])) { + $attributes['image_id'] = null; + } + + $employeeAttributes = $this->parseFillable($attributes, Employee::class); + + DB::transaction(function () use ($attributes, $employeeAttributes, &$employee, $employeeId) { + $employee->update($employeeAttributes); + + $user = $this->userRepository->update($attributes, $employee->user->id); + }); + + return $employee; + } + + /** + * Create an employee with the given attributes. + * + * @param array $attributes + * + * @return null + */ + public function createEmployee(array $attributes) + { + $employee = null; + + $attributes['joined_on'] = toUTC($attributes['joined_on']); + + if (!isset($attributes['image_id'])) { + $attributes['image_id'] = null; + } + + $attributes['employee_category_id'] = $this->findEmployeePosition($attributes['employee_position_id'])->employeeCategory->id; + + $employeeAttributes = $this->parseFillable($attributes, Employee::class); + + DB::transaction(function () use ($attributes, $employeeAttributes, &$employee) { + $user = $this->userRepository->create($attributes); + + $employee = Employee::make($employeeAttributes); + + $employee->user()->associate($user)->save(); + + $this->userRepository->addRoleToUser($user, $this->userRepository->getRoleByName('employee')); + }); + + return $employee; + } + + public function boot() + { + parent::boot(); + + $this->userRepository = app()->make(UserRepository::class); + } +} diff --git a/App/Modules/Employees/Seeder/EmployeeDataSeeder.php b/App/Modules/Employees/Seeder/EmployeeDataSeeder.php new file mode 100644 index 0000000..c2eabfd --- /dev/null +++ b/App/Modules/Employees/Seeder/EmployeeDataSeeder.php @@ -0,0 +1,89 @@ +create([ + 'name' => $category, + 'code' => substr(strtoupper($category), 0, 3), + ]); + + // Create employee positions + foreach ([ + 'Principal', + 'Assistant Teacher', + 'Teacher', + 'Instructor', + 'Lab assistant', + 'Accountant', + ] as $position) { + factory(EmployeePosition::class)->create([ + 'name' => $position, + 'employee_category_id' => $categoryModel->id, + ]); + } + } + + // Create employee departments + foreach ([ + 'Accounting', + 'Human Resources', + 'Academic', + 'Management', + ] as $department) { + factory(EmployeeDepartment::class)->create([ + 'name' => $department, + 'code' => substr(strtoupper($department), 0, 3), + ]); + } + + // Create employee grades + foreach ([ + 'A', + 'B', + 'X', + 'C', + ] as $grade) { + factory(EmployeeGrade::class)->create([ + 'name' => $grade, + 'code' => substr(strtoupper($grade), 0, 3), + ]); + } + + factory(User::class, 20)->create()->each(function ($user) { + $employee = factory(Employee::class)->make(); + + $employee->employeeDepartment()->associate($this->faker->randomElement(EmployeeDepartment::all())); + $employee->employeePosition()->associate($this->faker->randomElement(EmployeePosition::all())); + $employee->employeeGrade()->associate($this->faker->randomElement(EmployeeGrade::all())); + + $employee->user()->associate($user)->save(); + }); + } +} diff --git a/App/Modules/Employees/Tests/Unit/EmployeeTest.php b/App/Modules/Employees/Tests/Unit/EmployeeTest.php new file mode 100644 index 0000000..72e7464 --- /dev/null +++ b/App/Modules/Employees/Tests/Unit/EmployeeTest.php @@ -0,0 +1,94 @@ +create(); + $employeePosition = factory(EmployeePosition::class)->create([ + 'employee_category_id' => $employeeCategory->id, + ]); + factory(Employee::class, 5)->create([ + 'employee_position_id' => $employeePosition->id, + ]); + + $employees = $this->employeeRepository + ->getEmployees(app()->make(EmployeeListCriteria::class))->get(); + + $this->assertCount(5, $employees); + } + + /** + * Test creating a Employee. + */ + public function testEmployeeCreate() + { + $employeeCategory = factory(EmployeeCategory::class)->create(); + $employeePosition = factory(EmployeePosition::class)->create([ + 'employee_category_id' => $employeeCategory->id, + ]); + $employee = factory(Employee::class)->make([ + 'employee_position_id' => $employeePosition->id, + ]); + $user = factory(User::class)->make(); + + $inputData = array_merge($employee->toArray(), $user->toArray()); + + $model = $this->employeeRepository->createEmployee($inputData); + + $this->assertArrayValuesEquals($model, $employee); + } + + /** + * Test updating a Employee. + */ + public function testEmployeeUpdate() + { + $user = factory(User::class)->create(); + + $employeeCategory = factory(EmployeeCategory::class)->create(); + $employeePosition = factory(EmployeePosition::class)->create([ + 'employee_category_id' => $employeeCategory->id, + ]); + + $employee = factory(Employee::class)->create([ + 'employee_position_id' => $employeePosition->id, + ]); + + $employee->user()->associate($user)->save(); + + $employeeNew = factory(Employee::class)->make(); + $userNew = factory(User::class)->make(); + + $inputData = array_merge($employeeNew->toArray(), $userNew->toArray()); + + $model = $this->employeeRepository->updateEmployee($inputData, $employee->id); + + $this->assertArrayValuesEquals($model, $employeeNew); + } + + public function setup() + { + parent::setup(); + + $this->employeeRepository = $this->app->make(EmployeeRepository::class); + } +} diff --git a/src/migrations/0_0_0_000200_create_employee_grades_table.php b/App/Modules/Employees/migrations/0_0_0_000200_create_employee_grades_table.php similarity index 100% rename from src/migrations/0_0_0_000200_create_employee_grades_table.php rename to App/Modules/Employees/migrations/0_0_0_000200_create_employee_grades_table.php index ccf47a5..ee32c4d 100644 --- a/src/migrations/0_0_0_000200_create_employee_grades_table.php +++ b/App/Modules/Employees/migrations/0_0_0_000200_create_employee_grades_table.php @@ -1,7 +1,7 @@ string('id', 45)->primary(); - $table->string('user_id', 45)->unique(); + $table->string('user_id', 45)->unique()->nullable(); $table->string('employee_number', 45)->unique(); $table->timestamp('joined_on'); $table->string('employee_position_id', 45); diff --git a/src/migrations/0_0_0_000250_create_class_employee_table.php b/App/Modules/Employees/migrations/0_0_0_000250_create_class_employee_table.php similarity index 100% rename from src/migrations/0_0_0_000250_create_class_employee_table.php rename to App/Modules/Employees/migrations/0_0_0_000250_create_class_employee_table.php index 603ac1b..0cdd6d2 100644 --- a/src/migrations/0_0_0_000250_create_class_employee_table.php +++ b/App/Modules/Employees/migrations/0_0_0_000250_create_class_employee_table.php @@ -1,7 +1,7 @@ + + +
+ + + + + +
+ +
+ {{ trans('base::common.save') }} +
+ +
+ + + \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/components/EditEmployeeDepartmentDetails.vue b/App/Modules/Employees/resources/assets/js/components/EditEmployeeDepartmentDetails.vue new file mode 100644 index 0000000..42c0f53 --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/components/EditEmployeeDepartmentDetails.vue @@ -0,0 +1,40 @@ + + + \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/components/EditEmployeeDetails.vue b/App/Modules/Employees/resources/assets/js/components/EditEmployeeDetails.vue new file mode 100644 index 0000000..ae2d773 --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/components/EditEmployeeDetails.vue @@ -0,0 +1,88 @@ + + + \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/components/EditEmployeeGradeDetails.vue b/App/Modules/Employees/resources/assets/js/components/EditEmployeeGradeDetails.vue new file mode 100644 index 0000000..9de486b --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/components/EditEmployeeGradeDetails.vue @@ -0,0 +1,57 @@ + + + \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/components/EditEmployeePositionDetails.vue b/App/Modules/Employees/resources/assets/js/components/EditEmployeePositionDetails.vue new file mode 100644 index 0000000..fcbb61c --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/components/EditEmployeePositionDetails.vue @@ -0,0 +1,45 @@ + + + \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/components/EmployeeCategoriesList.vue b/App/Modules/Employees/resources/assets/js/components/EmployeeCategoriesList.vue new file mode 100644 index 0000000..3a769f0 --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/components/EmployeeCategoriesList.vue @@ -0,0 +1,56 @@ + + + \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/components/EmployeeDepartmentsList.vue b/App/Modules/Employees/resources/assets/js/components/EmployeeDepartmentsList.vue new file mode 100644 index 0000000..af07762 --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/components/EmployeeDepartmentsList.vue @@ -0,0 +1,56 @@ + + + \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/components/EmployeeGradesList.vue b/App/Modules/Employees/resources/assets/js/components/EmployeeGradesList.vue new file mode 100644 index 0000000..f33da52 --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/components/EmployeeGradesList.vue @@ -0,0 +1,68 @@ + + + \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/components/EmployeePositionsList.vue b/App/Modules/Employees/resources/assets/js/components/EmployeePositionsList.vue new file mode 100644 index 0000000..bdaa3ed --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/components/EmployeePositionsList.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/components/EmployeesList.vue b/App/Modules/Employees/resources/assets/js/components/EmployeesList.vue new file mode 100644 index 0000000..0d3616b --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/components/EmployeesList.vue @@ -0,0 +1,83 @@ + + + \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/editEmployeeCategoryDetails.js b/App/Modules/Employees/resources/assets/js/editEmployeeCategoryDetails.js new file mode 100644 index 0000000..b2ca81a --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/editEmployeeCategoryDetails.js @@ -0,0 +1,5 @@ +Vue.component('edit-employee-category-details', require('./components/EditEmployeeCategoryDetails')); + +new Vue({ + el: '#editEmployeeCategoryDetails' +}); \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/editEmployeeDepartmentDetails.js b/App/Modules/Employees/resources/assets/js/editEmployeeDepartmentDetails.js new file mode 100644 index 0000000..73d14bf --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/editEmployeeDepartmentDetails.js @@ -0,0 +1,5 @@ +Vue.component('edit-employee-department-details', require('./components/EditEmployeeDepartmentDetails')); + +new Vue({ + el: '#editEmployeeDepartmentDetails' +}); \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/editEmployeeDetails.js b/App/Modules/Employees/resources/assets/js/editEmployeeDetails.js new file mode 100644 index 0000000..8564609 --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/editEmployeeDetails.js @@ -0,0 +1,5 @@ +Vue.component('edit-employee-details', require('./components/EditEmployeeDetails')); + +new Vue({ + el: '#editEmployeeDetails' +}); \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/editEmployeeGradeDetails.js b/App/Modules/Employees/resources/assets/js/editEmployeeGradeDetails.js new file mode 100644 index 0000000..28e0592 --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/editEmployeeGradeDetails.js @@ -0,0 +1,5 @@ +Vue.component('edit-employee-grade-details', require('./components/EditEmployeeGradeDetails')); + +new Vue({ + el: '#editEmployeeGradeDetails' +}); \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/editEmployeePositionDetails.js b/App/Modules/Employees/resources/assets/js/editEmployeePositionDetails.js new file mode 100644 index 0000000..95901b8 --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/editEmployeePositionDetails.js @@ -0,0 +1,5 @@ +Vue.component('edit-employee-position-details', require('./components/EditEmployeePositionDetails')); + +new Vue({ + el: '#editEmployeePositionDetails' +}); \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/employeeCategoriesList.js b/App/Modules/Employees/resources/assets/js/employeeCategoriesList.js new file mode 100644 index 0000000..e48700f --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/employeeCategoriesList.js @@ -0,0 +1,5 @@ +Vue.component('employee-categories-list', require('./components/EmployeeCategoriesList')); + +new Vue({ + el: '#employeeCategoriesList' +}); \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/employeeDepartmentsList.js b/App/Modules/Employees/resources/assets/js/employeeDepartmentsList.js new file mode 100644 index 0000000..04b3d6e --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/employeeDepartmentsList.js @@ -0,0 +1,5 @@ +Vue.component('employee-departments-list', require('./components/EmployeeDepartmentsList')); + +new Vue({ + el: '#employeeDepartmentsList' +}); \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/employeeGradesList.js b/App/Modules/Employees/resources/assets/js/employeeGradesList.js new file mode 100644 index 0000000..5b6905d --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/employeeGradesList.js @@ -0,0 +1,5 @@ +Vue.component('employee-grades-list', require('./components/EmployeeGradesList')); + +new Vue({ + el: '#employeeGradesList' +}); \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/employeePositionsList.js b/App/Modules/Employees/resources/assets/js/employeePositionsList.js new file mode 100644 index 0000000..ccebb45 --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/employeePositionsList.js @@ -0,0 +1,5 @@ +Vue.component('employee-positions-list', require('./components/EmployeePositionsList')); + +new Vue({ + el: '#employeePositionsList' +}); \ No newline at end of file diff --git a/App/Modules/Employees/resources/assets/js/employeesList.js b/App/Modules/Employees/resources/assets/js/employeesList.js new file mode 100644 index 0000000..e736ca4 --- /dev/null +++ b/App/Modules/Employees/resources/assets/js/employeesList.js @@ -0,0 +1,5 @@ +Vue.component('employees-list', require('./components/EmployeesList')); + +new Vue({ + el: '#employeesList' +}); \ No newline at end of file diff --git a/App/Modules/Employees/resources/lang/en/employee.php b/App/Modules/Employees/resources/lang/en/employee.php new file mode 100644 index 0000000..8d11bf2 --- /dev/null +++ b/App/Modules/Employees/resources/lang/en/employee.php @@ -0,0 +1,32 @@ + 'New Employee', + 'edit_employee' => 'Edit Employee', + 'employees_list' => 'Employees', + + 'employee_details' => 'Employee Details', + 'contact_details' => 'Contact Details', + 'account_details' => 'Account Details', + + 'employees' => 'Employees', + + 'employee_image' => 'Picture', + + 'employee_number' => 'Employee Number', + 'name' => 'Name', + 'email' => 'Email', + 'password' => 'Password', + 'first_name' => 'First Name', + 'last_name' => 'Last Name', + 'joined_on' => 'Joined Date', + + 'employee_category' => 'Employee Category', + 'employee_position' => 'Employee Position', + 'employee_grade' => 'Employee Grade', + 'employee_department' => 'Employee Department', + 'date_of_birth' => 'Date of Birth', + + 'empty_list' => 'There are no Employees in the system for the given criteria.', + 'employee_updated' => 'Employee updated', +]; diff --git a/App/Modules/Employees/resources/lang/en/employee_category.php b/App/Modules/Employees/resources/lang/en/employee_category.php new file mode 100644 index 0000000..42c54e0 --- /dev/null +++ b/App/Modules/Employees/resources/lang/en/employee_category.php @@ -0,0 +1,16 @@ + 'Employee Categories', + 'edit_employee_category' => 'Edit Employee Category', + 'new_employee_category' => 'New Employee Category', + 'employee_category_details' => 'Employee Category Details', + + 'name' => 'Name', + 'code' => 'Code', + + 'employee_category_created' => 'Employee Category created.', + 'employee_category_updated' => 'Employee Category updated.', + + 'empty_list' => 'There are no Employee Categories in the system.', +]; diff --git a/App/Modules/Employees/resources/lang/en/employee_department.php b/App/Modules/Employees/resources/lang/en/employee_department.php new file mode 100644 index 0000000..1921c40 --- /dev/null +++ b/App/Modules/Employees/resources/lang/en/employee_department.php @@ -0,0 +1,17 @@ + 'Employee Grades', + 'employee_departments' => 'Employee Departments', + 'edit_employee_department' => 'Edit Employee Department', + 'new_employee_department' => 'New Employee Department', + 'employee_department_details' => 'Employee Department Details', + + 'name' => 'Name', + 'code' => 'Code', + + 'employee_department_created' => 'Employee Department created.', + 'employee_department_updated' => 'Employee Department updated.', + + 'empty_list' => 'There are no Employee Departments in the system.', +]; diff --git a/App/Modules/Employees/resources/lang/en/employee_grade.php b/App/Modules/Employees/resources/lang/en/employee_grade.php new file mode 100644 index 0000000..304aaaf --- /dev/null +++ b/App/Modules/Employees/resources/lang/en/employee_grade.php @@ -0,0 +1,19 @@ + 'Employee Grades', + 'edit_employee_grade' => 'Edit Employee Grade', + 'new_employee_grade' => 'New Employee Grade', + 'employee_grade_details' => 'Employee Grade Details', + + 'name' => 'Name', + 'code' => 'Code', + 'priority' => 'Priority', + 'max_sessions_per_day' => 'Max Sessions Per Day', + 'max_sessions_per_week' => 'Max Sessions Per Week', + + 'employee_grade_updated' => 'Employee Grade updated.', + 'employee_grade_created' => 'Employee Grade created.', + + 'empty_list' => 'There are no Employee Grades in the system.', +]; diff --git a/App/Modules/Employees/resources/lang/en/employee_position.php b/App/Modules/Employees/resources/lang/en/employee_position.php new file mode 100644 index 0000000..1023800 --- /dev/null +++ b/App/Modules/Employees/resources/lang/en/employee_position.php @@ -0,0 +1,17 @@ + 'Employee Positions', + 'employee_position_details' => 'Employee Position Details', + + 'edit_employee_position' => 'Edit Employee Position', + 'new_employee_position' => 'New Employee Position', + + 'name' => 'Name', + 'employee_category' => 'Employee Category', + + 'employee_position_created' => 'Employee Position created.', + 'employee_position_updated' => 'Employee Position updated.', + + 'empty_list' => 'There are no Employee Positions in the system.', +]; diff --git a/App/Modules/Employees/resources/lang/en/menu.php b/App/Modules/Employees/resources/lang/en/menu.php new file mode 100644 index 0000000..3a9fc68 --- /dev/null +++ b/App/Modules/Employees/resources/lang/en/menu.php @@ -0,0 +1,15 @@ + 'Employees', + 'employee_list' => 'All Employees', + 'employee_new' => 'New Employee', + + 'categories' => 'Categories', + + 'departments' => 'Departments', + + 'grades' => 'Grades', + + 'positions' => 'Positions', +]; diff --git a/App/Modules/Employees/resources/views/edit_employee_account.blade.php b/App/Modules/Employees/resources/views/edit_employee_account.blade.php new file mode 100644 index 0000000..7a72fb7 --- /dev/null +++ b/App/Modules/Employees/resources/views/edit_employee_account.blade.php @@ -0,0 +1,42 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', trans('employees::employee.edit_employee')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('employees::partials.edit_employee_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/edit_employee_category_details.blade.php b/App/Modules/Employees/resources/views/edit_employee_category_details.blade.php new file mode 100644 index 0000000..8af2129 --- /dev/null +++ b/App/Modules/Employees/resources/views/edit_employee_category_details.blade.php @@ -0,0 +1,39 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $employee_category ? trans('employees::employee_category.edit_employee_category') : trans('employees::employee_category.new_employee_category')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('employees::partials.edit_employee_category_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/edit_employee_department_details.blade.php b/App/Modules/Employees/resources/views/edit_employee_department_details.blade.php new file mode 100644 index 0000000..a246886 --- /dev/null +++ b/App/Modules/Employees/resources/views/edit_employee_department_details.blade.php @@ -0,0 +1,39 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $employee_department ? trans('employees::employee_department.edit_employee_department') : trans('employees::employee_department.new_employee_department')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('employees::partials.edit_employee_department_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/edit_employee_details.blade.php b/App/Modules/Employees/resources/views/edit_employee_details.blade.php new file mode 100644 index 0000000..2e186d6 --- /dev/null +++ b/App/Modules/Employees/resources/views/edit_employee_details.blade.php @@ -0,0 +1,53 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $employee ? trans('employees::employee.edit_employee') : trans('employees::employee.new_employee')) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('employees::partials.edit_employee_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/edit_employee_grade_details.blade.php b/App/Modules/Employees/resources/views/edit_employee_grade_details.blade.php new file mode 100644 index 0000000..af2fc51 --- /dev/null +++ b/App/Modules/Employees/resources/views/edit_employee_grade_details.blade.php @@ -0,0 +1,39 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $employee_grade ? trans('employees::employee_grade.edit_employee_grade') : trans('employees::employee_grade.new_employee_grade')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('employees::partials.edit_employee_grade_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/edit_employee_position_details.blade.php b/App/Modules/Employees/resources/views/edit_employee_position_details.blade.php new file mode 100644 index 0000000..138ea66 --- /dev/null +++ b/App/Modules/Employees/resources/views/edit_employee_position_details.blade.php @@ -0,0 +1,40 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $employee_position ? trans('employees::employee_position.edit_employee_position') : trans('employees::employee_position.new_employee_position')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('employees::partials.edit_employee_position_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/employee_category_list.blade.php b/App/Modules/Employees/resources/views/employee_category_list.blade.php new file mode 100644 index 0000000..b03a165 --- /dev/null +++ b/App/Modules/Employees/resources/views/employee_category_list.blade.php @@ -0,0 +1,34 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('employees::employee_category.employee_categories')) + +@section('total', $employee_categories->total()) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('add_edit_employee_category') + + + {{ trans('employees::employee_category.new_employee_category') }} + + + @endcan + +@endsection + +@section('table') + +
+ count()) + :employee-categories="{{$employee_categories->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/employee_department_list.blade.php b/App/Modules/Employees/resources/views/employee_department_list.blade.php new file mode 100644 index 0000000..4b7c21f --- /dev/null +++ b/App/Modules/Employees/resources/views/employee_department_list.blade.php @@ -0,0 +1,34 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('employees::employee_department.employee_departments')) + +@section('total', $employee_departments->total()) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('add_edit_employee_department') + + + {{ trans('employees::employee_department.new_employee_department') }} + + + @endcan + +@endsection + +@section('table') + +
+ count()) + :employee-departments="{{$employee_departments->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/employee_grade_list.blade.php b/App/Modules/Employees/resources/views/employee_grade_list.blade.php new file mode 100644 index 0000000..c74c720 --- /dev/null +++ b/App/Modules/Employees/resources/views/employee_grade_list.blade.php @@ -0,0 +1,34 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('employees::employee_grade.employee_grades')) + +@section('total', $employee_grades->total()) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('add_edit_employee_grade') + + + {{ trans('employees::employee_grade.new_employee_grade') }} + + + @endcan + +@endsection + +@section('table') + +
+ count()) + :employee-grades="{{$employee_grades->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/employee_list.blade.php b/App/Modules/Employees/resources/views/employee_list.blade.php new file mode 100644 index 0000000..7695485 --- /dev/null +++ b/App/Modules/Employees/resources/views/employee_list.blade.php @@ -0,0 +1,34 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('employees::employee.employees')) + +@section('total', $employees->total()) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('create_employee') + + + {{ trans('employees::employee.new_employee') }} + + + @endcan + +@endsection + +@section('table') + +
+ count()) + :employees="{{$employees->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/employee_position_list.blade.php b/App/Modules/Employees/resources/views/employee_position_list.blade.php new file mode 100644 index 0000000..d02ba43 --- /dev/null +++ b/App/Modules/Employees/resources/views/employee_position_list.blade.php @@ -0,0 +1,34 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('employees::employee_position.employee_positions')) + +@section('total', $employee_positions->total()) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('add_edit_employee_position') + + + {{ trans('employees::employee_position.new_employee_position') }} + + + @endcan + +@endsection + +@section('table') + +
+ count()) + :employee-positions="{{$employee_positions->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/partials/edit_employee_category_tabs.blade.php b/App/Modules/Employees/resources/views/partials/edit_employee_category_tabs.blade.php new file mode 100644 index 0000000..29d2cc0 --- /dev/null +++ b/App/Modules/Employees/resources/views/partials/edit_employee_category_tabs.blade.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/partials/edit_employee_department_tabs.blade.php b/App/Modules/Employees/resources/views/partials/edit_employee_department_tabs.blade.php new file mode 100644 index 0000000..4f8d222 --- /dev/null +++ b/App/Modules/Employees/resources/views/partials/edit_employee_department_tabs.blade.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/partials/edit_employee_grade_tabs.blade.php b/App/Modules/Employees/resources/views/partials/edit_employee_grade_tabs.blade.php new file mode 100644 index 0000000..d5c64c1 --- /dev/null +++ b/App/Modules/Employees/resources/views/partials/edit_employee_grade_tabs.blade.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/partials/edit_employee_position_tabs.blade.php b/App/Modules/Employees/resources/views/partials/edit_employee_position_tabs.blade.php new file mode 100644 index 0000000..c67e140 --- /dev/null +++ b/App/Modules/Employees/resources/views/partials/edit_employee_position_tabs.blade.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/partials/edit_employee_tabs.blade.php b/App/Modules/Employees/resources/views/partials/edit_employee_tabs.blade.php new file mode 100644 index 0000000..b4788be --- /dev/null +++ b/App/Modules/Employees/resources/views/partials/edit_employee_tabs.blade.php @@ -0,0 +1,32 @@ + \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/partials/view_employee_tabs.blade.php b/App/Modules/Employees/resources/views/partials/view_employee_tabs.blade.php new file mode 100644 index 0000000..70728f4 --- /dev/null +++ b/App/Modules/Employees/resources/views/partials/view_employee_tabs.blade.php @@ -0,0 +1,19 @@ + diff --git a/App/Modules/Employees/resources/views/view_employee_account.blade.php b/App/Modules/Employees/resources/views/view_employee_account.blade.php new file mode 100644 index 0000000..3c6ad07 --- /dev/null +++ b/App/Modules/Employees/resources/views/view_employee_account.blade.php @@ -0,0 +1,33 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $employee->user->name) + +@section('tools') + + @can('edit_user_account_info') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('employees::partials.view_employee_tabs') + +@endsection + +@section('tab') + +
+
+ +
{{ trans('acl::user.email') }}
+
{{ $employee->user->email }}
+ +
+
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Employees/resources/views/view_employee_details.blade.php b/App/Modules/Employees/resources/views/view_employee_details.blade.php new file mode 100644 index 0000000..c1c17ef --- /dev/null +++ b/App/Modules/Employees/resources/views/view_employee_details.blade.php @@ -0,0 +1,65 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $employee->name) + +@section('tools') + + @can('edit_employee_general_details') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('employees::partials.view_employee_tabs') + +@endsection + +@section('tab') + +
+
+ @if($employee->picture) + + @else + + @endif +
+
+
{{ trans('employees::employee.employee_number') }}
+
{{ $employee->employee_number }}
+
+
+
{{ trans('employees::employee.joined_on') }}
+
{{ dateFormat(dateToUserTz($employee->joined_on)) }}
+
+
+
{{ trans('employees::employee.name') }}
+
{{ $employee->name }}
+
+
+
{{ trans('employees::employee.date_of_birth') }}
+
{{ $employee->date_of_birth }}
+
+
+
{{ trans('employees::employee.employee_category') }}
+
{{ $employee->employeePosition->employeeCategory->name }}
+
+
+
{{ trans('employees::employee.employee_position') }}
+
{{ $employee->employeePosition->name }}
+
+
+
{{ trans('employees::employee.employee_department') }}
+
{{ $employee->employeeDepartment->name }}
+
+
+
{{ trans('employees::employee.employee_grade') }}
+
{{ $employee->employeeGrade->name }}
+
+
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Media/Contracts/MediaRepositoryContract.php b/App/Modules/Media/Contracts/MediaRepositoryContract.php new file mode 100644 index 0000000..e2f1338 --- /dev/null +++ b/App/Modules/Media/Contracts/MediaRepositoryContract.php @@ -0,0 +1,12 @@ +config = $config; + } + + /** + * Get bucket properties. + * + * @param $method + * @param $args + * + * @return mixed + */ + public function __call($method, $args) + { + if (isset($this->config[snake_case($method)])) { + return $this->config[snake_case($method)]; + } + } +} diff --git a/App/Modules/Media/Http/Controllers/MediaController.php b/App/Modules/Media/Http/Controllers/MediaController.php new file mode 100644 index 0000000..a0c235d --- /dev/null +++ b/App/Modules/Media/Http/Controllers/MediaController.php @@ -0,0 +1,64 @@ +mediaRepository->upload($request::file('file'), $request::get('bucket')); + + return $this->printJson(true, [ + 'media' => $media, + ]); + } + + throw new Exception('a file must be uploaded'); + } + + /** + * Retrieves a file by path + * If the file is an image retrieve the resized version of it. + * + * @param $bucketName + * @param $fileName + * + * @return mixed + */ + public function getMedia($bucketName, $fileName) + { + $parts = explode('.', $fileName); + $parts = explode('_', $parts[0]); + + if (!count($parts)) { + abort(404); + } + + $id = $parts[0]; + $size = isset($parts[1]) ? $parts[1] : 'original'; + + return $this->mediaRepository->getMedia($id, $bucketName, $size); + } + + public function __construct(MediaRepository $mediaRepository) + { + $this->mediaRepository = $mediaRepository; + } +} diff --git a/App/Modules/Media/Http/routes.php b/App/Modules/Media/Http/routes.php new file mode 100644 index 0000000..898cdce --- /dev/null +++ b/App/Modules/Media/Http/routes.php @@ -0,0 +1,6 @@ + 'media', 'middleware' => 'auth'], function () { + Route::post('upload', 'MediaController@postUpload')->name('media.upload'); + Route::get('{bucket}/{id}', 'MediaController@getMedia')->name('media.get'); +}); diff --git a/App/Modules/Media/Models/Media.php b/App/Modules/Media/Models/Media.php new file mode 100644 index 0000000..83ce321 --- /dev/null +++ b/App/Modules/Media/Models/Media.php @@ -0,0 +1,44 @@ +bucket.'/'.$this->id.(!is_null($size) ? '_'.$size : '').'.'.$this->ext; + } + + /** + * For images get the small version url. + * + * @return string + */ + public function getSmallUrlAttribute() + { + return $this->url('small'); + } + + /** + * Get the filename with extension. + * + * @return string + */ + public function getFileNameAttribute() + { + return $this->id.'.'.$this->ext; + } +} diff --git a/App/Modules/Media/Presenters/MediaBasicInformationPresenter.php b/App/Modules/Media/Presenters/MediaBasicInformationPresenter.php new file mode 100644 index 0000000..a00bb8c --- /dev/null +++ b/App/Modules/Media/Presenters/MediaBasicInformationPresenter.php @@ -0,0 +1,22 @@ +app->bind(MediaRepositoryContract::class, MediaRepository::class); + } + + /** + * Returns an array of permissions for the current module. + * + * @return array + */ + public function getPermissions() + { + return []; + } +} diff --git a/App/Modules/Media/Repositories/MediaRepository.php b/App/Modules/Media/Repositories/MediaRepository.php new file mode 100644 index 0000000..91db51f --- /dev/null +++ b/App/Modules/Media/Repositories/MediaRepository.php @@ -0,0 +1,96 @@ +isValid()) { + throw new DisplayableException(trans('media::uploader.invalid_file')); + } + + $bucket = Bucket::find($bucketName); + + if (!in_array($file->getMimeType(), $bucket->mimeTypes())) { + throw new DisplayableException(trans('media::uploader.invalid_file_type')); + } + + if ($file->getSize() > $bucket->maxSize()) { + throw new DisplayableException(trans('media::uploader.invalid_file_size')); + } + + $disk = Storage::disk($bucket->disk()); + + $media = Media::create([ + 'mime' => $file->getMimeType(), + 'bucket' => $bucketName, + 'ext' => $file->guessExtension(), + ]); + + $disk->put($bucket->path().'/original/'.$media->fileName, File::get($file)); + + if (is_array($bucket->resize())) { + foreach ($bucket->resize() as $name => $size) { + $temp = tempnam(storage_path('tmp'), 'tmp'); + + Image::make(File::get($file))->fit($size[0], $size[1])->save($temp); + + $disk->put($bucket->path().'/'.$name.'/'.$media->fileName, File::get($temp)); + + unlink($temp); + } + } + + return $media; + } + + /** + * Gets media file by id and bucket name. + * + * @param $id + * @param $bucketName + * @param $size + * + * @throws Exception + */ + public static function getMedia($id, $bucketName, $size) + { + $media = Media::where(['id' => $id, 'bucket' => $bucketName])->first(); + + if (is_null($media)) { + return abort(404); + } + + $bucket = Bucket::find($bucketName); + + $disk = Storage::disk($bucket->disk()); + + if ($disk->exists($bucket->path().'/'.$size.'/'.$media->fileName)) { + return response($disk->get($bucket->path().'/'.$size.'/'.$media->fileName))->header('Content-type', $media->mime); + } + + abort(404); + } +} diff --git a/src/migrations/0_0_0_000050_create_media_table.php b/App/Modules/Media/migrations/0_0_0_000050_create_media_table.php similarity index 94% rename from src/migrations/0_0_0_000050_create_media_table.php rename to App/Modules/Media/migrations/0_0_0_000050_create_media_table.php index 0f41482..4af0e12 100644 --- a/src/migrations/0_0_0_000050_create_media_table.php +++ b/App/Modules/Media/migrations/0_0_0_000050_create_media_table.php @@ -1,7 +1,7 @@ + + +
+ + + + + + + + +
+ +
+ + + diff --git a/App/Modules/Media/resources/assets/js/uploader.js b/App/Modules/Media/resources/assets/js/uploader.js new file mode 100644 index 0000000..1382640 --- /dev/null +++ b/App/Modules/Media/resources/assets/js/uploader.js @@ -0,0 +1 @@ +Vue.component('media-uploader', require('./components/MediaUploader')); diff --git a/App/Modules/Media/resources/assets/sass/uploader.scss b/App/Modules/Media/resources/assets/sass/uploader.scss new file mode 100644 index 0000000..ba2b9a3 --- /dev/null +++ b/App/Modules/Media/resources/assets/sass/uploader.scss @@ -0,0 +1,44 @@ +@import "~@fortawesome/fontawesome-free/scss/fontawesome.scss"; +@import "~@fortawesome/fontawesome-free/scss/solid.scss"; +@import "~@fortawesome/fontawesome-free/scss/brands.scss"; + +.media-uploader{ + + $size : 200px; + position: relative; + + width: $size; + height: $size; + + .b-form-file, .form-control-file{ + height: $size; + width: $size; + } + + .form-control-file{ + opacity: 0; + } + + .progress{ + width: $size - 20px; + margin: 10px; + position: absolute; + top: $size - 40px; + } + + .image{ + position: absolute; + top: 0; + + &.iconVisible{ + opacity: .5; + } + } + + .fa{ + position: absolute; + top: 80px; + left: 75px; + opacity: .5; + } +} \ No newline at end of file diff --git a/App/Modules/Media/resources/lang/en/menu.php b/App/Modules/Media/resources/lang/en/menu.php new file mode 100644 index 0000000..03e5a14 --- /dev/null +++ b/App/Modules/Media/resources/lang/en/menu.php @@ -0,0 +1,5 @@ + 'Files and storage', +]; diff --git a/App/Modules/Media/resources/lang/en/uploader.php b/App/Modules/Media/resources/lang/en/uploader.php new file mode 100644 index 0000000..e417bce --- /dev/null +++ b/App/Modules/Media/resources/lang/en/uploader.php @@ -0,0 +1,9 @@ + 'Choose a file...', + + 'invalid_file' => 'Invalid file', + 'invalid_file_type' => 'Invalid file type', + 'invalid_file_size' => 'Uploaded file size exceeds the maximum allowed', +]; diff --git a/App/Modules/Students/Contracts/GuardianRepository.php b/App/Modules/Students/Contracts/GuardianRepository.php new file mode 100644 index 0000000..5fe8d8b --- /dev/null +++ b/App/Modules/Students/Contracts/GuardianRepository.php @@ -0,0 +1,14 @@ + 'CONCAT(users.first_name, \' \', users.last_name)', + ]; + + protected $joins = [ + ['users', 'guardians.user_id', 'users.id'], + ]; + + protected $form = [ + 'ssn' => [ + 'type' => 'text', + 'label' => 'SSN', + ], + ]; +} diff --git a/App/Modules/Students/Criteria/StudentListCriteria.php b/App/Modules/Students/Criteria/StudentListCriteria.php new file mode 100644 index 0000000..3da90cd --- /dev/null +++ b/App/Modules/Students/Criteria/StudentListCriteria.php @@ -0,0 +1,64 @@ + 'CONCAT(users.first_name, \' \', users.last_name)', + 'batch_id' => 'batches.id', + 'class_id' => 'classes.id', + ]; + + protected $joins = [ + ['users', 'students.user_id', 'users.id'], + ['class_student', 'students.id', 'class_student.student_id'], + ['batches', 'class_student.batch_id', 'batches.id'], + ['classes', 'class_student.class_id', 'classes.id'], + ]; + + protected $form = [ + 'student_category' => [ + 'type' => 'select', + 'itemsCallback' => 'studentCategories', + ], + 'batch' => [ + 'type' => 'select', + 'itemsCallback' => 'batches', + ], + 'class' => [ + 'type' => 'select', + 'itemsCallback' => 'classes', + ], + ]; + + public function callbackStudentCategories() + { + return app()->make(StudentRepository::class)->getStudentCategories()->get(); + } + + public function callbackBatches() + { + return app()->make(ClassRepository::class)->activeBatches()->get(); + } + + public function callbackClasses() + { + return app()->make(ClassRepository::class)->getClasses()->get(); + } +} diff --git a/App/Modules/Students/Http/Controllers/GuardianController.php b/App/Modules/Students/Http/Controllers/GuardianController.php new file mode 100644 index 0000000..84fd68f --- /dev/null +++ b/App/Modules/Students/Http/Controllers/GuardianController.php @@ -0,0 +1,205 @@ +authorize('view_user_account_info'); + + $this->middleware('reauth'); + + $guardian = $this->guardianRepository->findGuardian($guardianId); + + return view('students::view_guardian_account', [ + 'user' => $guardian->user, + 'guardian' => $guardian, + ]); + } + + /** + * Get account edit form. + * + * @param $guardianId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * @throws \Exception + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGuardianAccountEdit($guardianId) + { + $this->authorize('edit_user_account_info'); + + $this->middleware('reauth'); + + $guardian = $this->guardianRepository->findGuardian($guardianId); + + return view('students::edit_guardian_account', [ + 'guardian' => $guardian, + 'user' => present($guardian->user, UserAccountPresenter::class), + 'user_form_validator' => $this->jsValidator(UpdateUserAccountRequest::class), + ]); + } + + /** + * Post account edit form. + * + * @param UpdateUserAccountRequest $request + * @param $guardianId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postGuardianAccountEdit(UpdateUserAccountRequest $request, $guardianId) + { + $this->authorize('edit_user_account_info'); + + $this->middleware('reauth'); + + $this->guardianRepository->updateGuardian($request->all(), $guardianId); + + return $this->printJson(true, [], trans('students::guardian.guardian_updated')); + } + + /** + * Get create guardian form. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * @throws \Exception + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGuardianNew() + { + $this->authorize('create_guardian'); + + return view('students::edit_guardian_details', [ + 'guardian' => null, + 'guardian_details_form_validator' => $this->jsValidator(CreateGuardianRequest::class), + ]); + } + + /** + * Save new guardian data. + * + * @param CreateGuardianRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postGuardianNew(CreateGuardianRequest $request) + { + $this->authorize('create_guardian'); + + $guardian = $this->guardianRepository->createGuardian($request->all()); + + return $this->printRedirect(route('guardian.details.edit', $guardian->id), + trans('students::guardian.guardian_created')); + } + + /** + * Get guardian details view. + * + * @param $guardianId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGuardianDetailView($guardianId) + { + $this->authorize('list_guardians'); + + return view('students::view_guardian_details', [ + 'guardian' => present($this->guardianRepository->findGuardian($guardianId), + GuardianDetailsPresenter::class), + ]); + } + + /** + * Get guardian details edit form. + * + * @param $guardianId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * @throws \Exception + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGuardianDetailEdit($guardianId) + { + $this->authorize('edit_guardian'); + + return view('students::edit_guardian_details', [ + 'guardian' => present($this->guardianRepository->findGuardian($guardianId), GuardianDetailsPresenter::class), + 'guardian_details_form_validator' => $this->jsValidator(UpdateGuardianRequest::class), + ]); + } + + /** + * Save guardian details form. + * + * @param UpdateGuardianRequest $request + * @param $guardianId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postGuardianDetailEdit(UpdateGuardianRequest $request, $guardianId) + { + $this->authorize('edit_guardian'); + + $this->guardianRepository->updateGuardian($request->all(), $guardianId); + + return $this->printJson(true, [], trans('students::guardian.guardian_updated')); + } + + /** + * @param GuardiansListCriteria $criteria + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getGuardiansList(GuardiansListCriteria $criteria) + { + $this->authorize('list_guardians'); + + return view('students::guardians_list', [ + 'criteria' => $criteria, + 'guardians' => present($this->guardianRepository->getGuardians($criteria)->with('user', 'students') + ->paginate(config('collejo.pagination.perpage')), GuardianListPresenter::class), + ]); + } + + public function __construct(GuardianRepository $guardianRepository) + { + $this->guardianRepository = $guardianRepository; + } +} diff --git a/App/Modules/Students/Http/Controllers/StudentCategoryController.php b/App/Modules/Students/Http/Controllers/StudentCategoryController.php new file mode 100644 index 0000000..0d75a93 --- /dev/null +++ b/App/Modules/Students/Http/Controllers/StudentCategoryController.php @@ -0,0 +1,107 @@ +authorize('add_edit_student_category'); + + return $this->printModal(view('students::modals.edit_student_category', [ + 'student_category' => null, + 'category_form_validator' => $this->jsValidator(CreateStudentCategoryRequest::class), + ])); + } + + /** + * Save new Student Category. + * + * @param CreateStudentCategoryRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return mixed + */ + public function postStudentCategoryNew(CreateStudentCategoryRequest $request) + { + $this->authorize('add_edit_student_category'); + + return $this->printPartial(view('students::partials.student_category', [ + 'student_category' => $this->studentRepository->createStudentCategory($request->all()), + ]), trans('students::student_category.student_category_created')); + } + + /** + * Edit Student Category. + * + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return mixed + */ + public function getStudentCategoryEdit($id) + { + $this->authorize('add_edit_student_category'); + + return $this->printModal(view('students::modals.edit_student_category', [ + 'student_category' => $this->studentRepository->findStudentCategory($id), + 'category_form_validator' => $this->jsValidator(UpdateStudentCategoryRequest::class), + ])); + } + + /** + * Save Student Category. + * + * @param UpdateStudentCategoryRequest $request + * @param $id + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return mixed + */ + public function postStudentCategoryEdit(UpdateStudentCategoryRequest $request, $id) + { + $this->authorize('add_edit_student_category'); + + return $this->printPartial(view('students::partials.student_category', [ + 'student_category' => $this->studentRepository->updateStudentCategory($request->all(), $id), + ]), trans('students::student_category.student_category_updated')); + } + + /** + * Get Student Categories list. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getStudentCategoriesList() + { + $this->authorize('list_student_categories'); + + return view('students::student_categories_list', [ + 'student_categories' => $this->studentRepository->getStudentCategories()->paginate(), + ]); + } + + public function __construct(StudentRepository $studentRepository) + { + $this->studentRepository = $studentRepository; + } +} diff --git a/App/Modules/Students/Http/Controllers/StudentController.php b/App/Modules/Students/Http/Controllers/StudentController.php new file mode 100644 index 0000000..108ca37 --- /dev/null +++ b/App/Modules/Students/Http/Controllers/StudentController.php @@ -0,0 +1,277 @@ +authorize('assign_student_to_class'); + + $student = $this->studentRepository->findStudent($studentId); + + return view('students::assign_student_class', [ + 'student' => present($student, StudentDetailsPresenter::class), + 'classes' => present($student->classes, StudentClassDetailsPresenter::class), + 'student_class_form_validator' => $this->jsValidator(AssignStudentClassRequest::class), + ]); + } + + /** Get Student account edit form + * + * @param $studentId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * @throws \Exception + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getStudentAccountEdit($studentId) + { + $this->authorize('edit_user_account_info'); + + $this->middleware('reauth'); + + $student = $this->studentRepository->findStudent($studentId); + + return view('students::edit_student_account', [ + 'student' => $student, + 'user' => present($student->user, UserAccountPresenter::class), + 'user_form_validator' => $this->jsValidator(UpdateUserAccountRequest::class), + ]); + } + + /** + * Get Student account view. + * + * @param $studentId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getStudentAccountView($studentId) + { + $this->authorize('view_user_account_info'); + + $this->middleware('reauth'); + + $student = $this->studentRepository->findStudent($studentId); + + return view('students::view_student_account', [ + 'user' => $student->user, + 'student' => $student, + ]); + } + + /** + * Post account edit form. + * + * @param UpdateUserAccountRequest $request + * @param $studentId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postStudentAccountEdit(UpdateUserAccountRequest $request, $studentId) + { + $this->authorize('edit_user_account_info'); + + $this->middleware('reauth'); + + $this->studentRepository->updateStudent($request->all(), $studentId); + + return $this->printJson(true, [], trans('students::student.student_updated')); + } + + /** + * Get Student Guardians view. + * + * @param $studentId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getStudentGuardiansView($studentId) + { + $student = $this->studentRepository->findStudent($studentId); + + $this->authorize('view_student_guardian_details', $student); + + return view('students::view_student_guardians_details', [ + 'student' => $student, + ]); + } + + /** + * Get Student Classes view. + * + * @param $studentId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getStudentClassesView($studentId) + { + $student = $this->studentRepository->findStudent($studentId); + + $this->authorize('view_student_class_details', $student); + + return view('students::view_student_classes_details', [ + 'student' => present($student, StudentDetailsPresenter::class), + 'classes' => present($student->classes, StudentClassDetailsPresenter::class), + ]); + } + + /** + * Get Student details edit form. + * + * @param $studentId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * @throws \Exception + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getStudentDetailEdit($studentId) + { + $this->authorize('edit_student_general_details'); + + return view('students::edit_student_details', [ + 'student' => present($this->studentRepository->findStudent($studentId), StudentDetailsPresenter::class), + 'student_categories' => $this->studentRepository->getStudentCategories()->get(), + 'student_details_form_validator' => $this->jsValidator(UpdateStudentDetailsRequest::class), + ]); + } + + /** + * Save Student details. + * + * @param UpdateStudentDetailsRequest $request + * @param $studentId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postStudentDetailEdit(UpdateStudentDetailsRequest $request, $studentId) + { + $this->authorize('edit_student_general_details'); + + $this->studentRepository->updateStudent($request->all(), $studentId); + + return $this->printJson(true, [], trans('students::student.student_updated')); + } + + /** + * Get Student details view template. + * + * @param $studentId + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getStudentDetailView($studentId) + { + $student = $this->studentRepository->findStudent($studentId); + + $this->authorize('view_student_general_details', $student); + + return view('students::view_student_details', [ + 'student' => present($student, StudentDetailsPresenter::class), + ]); + } + + /** + * Save new Student data. + * + * @param CreateStudentRequest $request + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Http\JsonResponse + */ + public function postStudentNew(CreateStudentRequest $request) + { + $this->authorize('create_student'); + + $student = $this->studentRepository->createStudent($request->all()); + + return $this->printRedirect(route('student.details.edit', $student->id), + trans('students::student.student_created')); + } + + /** + * Create new Student. + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * @throws \Exception + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getStudentNew() + { + $this->authorize('create_student'); + + return view('students::edit_student_details', [ + 'student' => null, + 'student_categories' => $this->studentRepository->getStudentCategories()->get(), + 'student_details_form_validator' => $this->jsValidator(CreateStudentRequest::class), + ]); + } + + /** + * Render Grades list. + * + * @param StudentListCriteria $criteria + * + * @throws \Illuminate\Auth\Access\AuthorizationException + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function getStudentList(StudentListCriteria $criteria) + { + $this->authorize('list_students'); + + return view('students::students_list', [ + 'criteria' => $criteria, + 'students' => present($this->studentRepository->getStudents($criteria)->paginate(), StudentListPresenter::class), + ]); + } + + public function __construct(StudentRepository $studentRepository, ClassRepository $classRepository) + { + $this->studentRepository = $studentRepository; + $this->classRepository = $classRepository; + } +} diff --git a/App/Modules/Students/Http/Requests/AssignStudentClassRequest.php b/App/Modules/Students/Http/Requests/AssignStudentClassRequest.php new file mode 100644 index 0000000..c6e7997 --- /dev/null +++ b/App/Modules/Students/Http/Requests/AssignStudentClassRequest.php @@ -0,0 +1,17 @@ + 'required', + 'grade_id' => 'required', + 'class_id' => 'required', + ]; + } +} diff --git a/App/Modules/Students/Http/Requests/CreateGuardianRequest.php b/App/Modules/Students/Http/Requests/CreateGuardianRequest.php new file mode 100644 index 0000000..25ec41f --- /dev/null +++ b/App/Modules/Students/Http/Requests/CreateGuardianRequest.php @@ -0,0 +1,26 @@ + 'required', + 'last_name' => 'required', + 'ssn' => 'required|unique:guardians,ssn', + ]; + } + + public function attributes() + { + return [ + 'first_name' => trans('students::guardian.first_name'), + 'last_name' => trans('students::guardian.last_name'), + 'ssn' => trans('students::guardian.ssn'), + ]; + } +} diff --git a/App/Modules/Students/Http/Requests/CreateStudentCategoryRequest.php b/App/Modules/Students/Http/Requests/CreateStudentCategoryRequest.php new file mode 100644 index 0000000..5310525 --- /dev/null +++ b/App/Modules/Students/Http/Requests/CreateStudentCategoryRequest.php @@ -0,0 +1,24 @@ + 'required|unique:student_categories', + 'code' => 'unique:student_categories|max:5', + ]; + } + + public function attributes() + { + return [ + 'name' => trans('students::student_category.name'), + 'code' => trans('students::student_category.code'), + ]; + } +} diff --git a/App/Modules/Students/Http/Requests/CreateStudentRequest.php b/App/Modules/Students/Http/Requests/CreateStudentRequest.php new file mode 100644 index 0000000..8c386cb --- /dev/null +++ b/App/Modules/Students/Http/Requests/CreateStudentRequest.php @@ -0,0 +1,32 @@ + 'required|unique:students', + 'admitted_on' => 'required', + 'student_category_id' => 'required', + 'first_name' => 'required', + 'last_name' => 'required', + 'date_of_birth' => 'required', + ]; + } + + public function attributes() + { + return [ + 'admission_number' => trans('students::student.admission_number'), + 'admitted_on' => trans('students::student.admitted_on'), + 'student_category_id' => trans('students::student.student_category_id'), + 'first_name' => trans('students::student.first_name'), + 'last_name' => trans('students::student.last_name'), + 'date_of_birth' => trans('students::student.date_of_birth'), + ]; + } +} diff --git a/App/Modules/Students/Http/Requests/UpdateGuardianRequest.php b/App/Modules/Students/Http/Requests/UpdateGuardianRequest.php new file mode 100644 index 0000000..ba851ea --- /dev/null +++ b/App/Modules/Students/Http/Requests/UpdateGuardianRequest.php @@ -0,0 +1,24 @@ +rules(), [ + 'ssn' => 'required|unique:guardians,ssn,'.$this->json('id'), + ]); + } + + public function attributes() + { + $createRequest = new CreateGuardianRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Students/Http/Requests/UpdateStudentCategoryRequest.php b/App/Modules/Students/Http/Requests/UpdateStudentCategoryRequest.php new file mode 100644 index 0000000..e1f99f6 --- /dev/null +++ b/App/Modules/Students/Http/Requests/UpdateStudentCategoryRequest.php @@ -0,0 +1,25 @@ +rules(), [ + 'name' => 'required|unique:student_categories,name,'.$this->json('id'), + 'code' => 'required|max:5|unique:student_categories,code,'.$this->json('id'), + ]); + } + + public function attributes() + { + $createRequest = new CreateStudentCategoryRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Students/Http/Requests/UpdateStudentDetailsRequest.php b/App/Modules/Students/Http/Requests/UpdateStudentDetailsRequest.php new file mode 100644 index 0000000..9810845 --- /dev/null +++ b/App/Modules/Students/Http/Requests/UpdateStudentDetailsRequest.php @@ -0,0 +1,24 @@ +rules(), [ + 'admission_number' => 'required|unique:students,admission_number,'.$this->json('id'), + ]); + } + + public function attributes() + { + $createRequest = new CreateStudentRequest(); + + return $createRequest->attributes(); + } +} diff --git a/App/Modules/Students/Http/menus.php b/App/Modules/Students/Http/menus.php new file mode 100644 index 0000000..b7bcc89 --- /dev/null +++ b/App/Modules/Students/Http/menus.php @@ -0,0 +1,24 @@ +setParent($parent) + ->setPermission('list_students') + ->setPath('students.list'); + + Menu::create('student.new', trans('students::menu.student_new')) + ->setParent($parent) + ->setPermission('create_student'); + + Menu::group(function ($parent) { + Menu::create('guardians.list', trans('students::menu.guardians')) + ->setParent($parent) + ->setPermission('list_guardians'); + })->setParent($parent); + + Menu::group(function ($parent) { + Menu::create('student_categories.list', trans('students::menu.student_categories')) + ->setParent($parent) + ->setPermission('list_student_categories'); + })->setParent($parent); +})->setOrder(20); diff --git a/App/Modules/Students/Http/routes.php b/App/Modules/Students/Http/routes.php new file mode 100644 index 0000000..5bb11b7 --- /dev/null +++ b/App/Modules/Students/Http/routes.php @@ -0,0 +1,90 @@ + 'dashboard', 'middleware' => 'auth'], function () { + Route::group(['prefix' => 'students'], function () { + Route::get('/list', 'StudentController@getStudentList')->name('students.list'); + }); + + Route::group(['prefix' => 'student'], function () { + Route::get('/new', 'StudentController@getStudentNew')->name('student.new'); + Route::post('/new', 'StudentController@postStudentNew'); + + Route::get('/{id}/details/view', 'StudentController@getStudentDetailView')->name('student.details.view'); + + Route::get('/{id}/details/edit', 'StudentController@getStudentDetailEdit')->name('student.details.edit'); + Route::post('/{id}/details/edit', 'StudentController@postStudentDetailEdit'); + + Route::get('/{id}/guardians/view', 'StudentController@getStudentGuardiansView')->name('student.guardians.view'); + Route::get('/{id}/guardians/edit', 'StudentController@getStudentGuardiansEdit')->name('student.guardians.edit'); + Route::post('/{id}/guardians/edit', 'StudentController@postStudentGuardiansEdit'); + + Route::get('/{id}/contacts/view', 'StudentController@getStudentAddressesView')->name('student.addresses.view'); + Route::get('/{id}/contacts/edit', 'StudentController@getStudentAddressesEdit')->name('student.addresses.edit'); + + Route::get('/{id}/contact/new', 'StudentController@getStudentAddressNew')->name('student.address.new'); + Route::post('/{id}/contact/new', 'StudentController@postStudentAddressNew'); + + Route::get('/{id}/contact/{cid}/edit', 'StudentController@getStudentAddressEdit')->name('student.address.edit'); + Route::post('/{id}/contact/{cid}/edit', 'StudentController@postStudentAddressEdit'); + + Route::get('/{id}/contact/{cid}/delete', 'StudentController@getStudentAddressDelete')->name('student.address.delete'); + + Route::get('/{id}/classes/view', 'StudentController@getStudentClassesView')->name('student.classes.view'); + Route::get('/{id}/classes/edit', 'StudentController@getStudentClassesEdit')->name('student.classes.edit'); + + Route::get('/{id}/account/view', 'StudentController@getStudentAccountView')->name('student.account.view'); + + Route::get('/{id}/account/edit', 'StudentController@getStudentAccountEdit')->name('student.account.edit'); + Route::post('/{id}/account/edit', 'StudentController@postStudentAccountEdit'); + + Route::get('/{id}/assign_class', 'StudentController@getStudentClassAssign')->name('student.assign_class'); + Route::post('/{id}/assign_class', 'StudentController@postStudentClassAssign'); + + Route::get('/{id}/assign_guardian', 'StudentController@getStudentGuardianAssign')->name('student.assign_guardian'); + Route::post('/{id}/assign_guardian', 'StudentController@postStudentGuardianAssign'); + }); + + Route::group(['prefix' => 'student_categories'], function () { + Route::get('/list', 'StudentCategoryController@getStudentCategoriesList')->name('student_categories.list'); + }); + + Route::group(['prefix' => 'student_category'], function () { + Route::get('/new', 'StudentCategoryController@getStudentCategoryNew')->name('student_category.new'); + Route::post('/new', 'StudentCategoryController@postStudentCategoryNew'); + + Route::get('/{id}/edit', 'StudentCategoryController@getStudentCategoryEdit')->name('student_category.edit'); + Route::post('/{id}/edit', 'StudentCategoryController@postStudentCategoryEdit'); + }); + + Route::group(['prefix' => 'guardians'], function () { + Route::get('/search', 'GuardianController@getGuardiansSearch')->middleware('ajax')->name('guardians.search'); + + Route::get('/list', 'GuardianController@getGuardiansList')->name('guardians.list'); + }); + + Route::group(['prefix' => 'guardian'], function () { + Route::get('/new', 'GuardianController@getGuardianNew')->name('guardian.new'); + Route::post('/new', 'GuardianController@postGuardianNew'); + + Route::get('/{id}/details/view', 'GuardianController@getGuardianDetailView')->name('guardian.details.view'); + + Route::get('/{id}/details/edit', 'GuardianController@getGuardianDetailEdit')->name('guardian.details.edit'); + Route::post('/{id}/details/edit', 'GuardianController@postGuardianDetailEdit'); + + Route::get('/{id}/contacts/view', 'GuardianController@getGuardianAddressesView')->name('guardian.addresses.view'); + Route::get('/{id}/contacts/edit', 'GuardianController@getGuardianAddressesEdit')->name('guardian.addresses.edit'); + + Route::get('/{id}/contact/new', 'GuardianController@getGuardianAddressNew')->name('guardian.address.new'); + Route::post('/{id}/contact/new', 'GuardianController@postGuardianAddressNew'); + + Route::get('/{id}/contact/{cid}/edit', 'GuardianController@getGuardianAddressEdit')->name('guardian.address.edit'); + Route::post('/{id}/contact/{cid}/edit', 'GuardianController@postGuardianAddressEdit'); + + Route::get('/{id}/contact/{cid}/delete', 'GuardianController@getGuardianAddressDelete')->name('guardian.address.delete'); + + Route::get('/{id}/account/view', 'GuardianController@getGuardianAccountView')->name('guardian.account.view'); + + Route::get('/{id}/account/edit', 'GuardianController@getGuardianAccountEdit')->name('guardian.account.edit'); + Route::post('/{id}/account/edit', 'GuardianController@postGuardianAccountEdit'); + }); +}); diff --git a/App/Modules/Students/Models/Guardian.php b/App/Modules/Students/Models/Guardian.php new file mode 100644 index 0000000..7ebec4e --- /dev/null +++ b/App/Modules/Students/Models/Guardian.php @@ -0,0 +1,28 @@ +belongsToMany(Student::class, 'guardian_student', 'guardian_id', 'student_id'); + } +} diff --git a/src/Models/Student.php b/App/Modules/Students/Models/Student.php similarity index 51% rename from src/Models/Student.php rename to App/Modules/Students/Models/Student.php index df67fe3..cf9056b 100644 --- a/src/Models/Student.php +++ b/App/Modules/Students/Models/Student.php @@ -1,37 +1,50 @@ belongsToMany(Guardian::class, 'guardian_student', 'student_id', 'guardian_id'); } - + + /** + * Category of this Student. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ public function studentCategory() { - return $this->hasOne(StudentCategory::class); + return $this->belongsTo(StudentCategory::class); } + /** + * Returns the list of classes the Student was assigned to. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ public function classes() { return $this->belongsToMany(Clasis::class, 'class_student', 'student_id', 'class_id') @@ -39,11 +52,21 @@ public function classes() ->orderBy('pivot_created_at', 'desc'); } + /** + * Returns the current class for this student. + * + * @return mixed + */ private function currentClassRow() { return DB::table('class_student')->where('student_id', $this->id)->orderBy('created_at', 'DESC')->first(); } + /** + * Returns the Class. + * + * @return mixed + */ public function getClassAttribute() { if ($row = $this->currentClassRow()) { @@ -51,6 +74,11 @@ public function getClassAttribute() } } + /** + * Returns the Batch. + * + * @return mixed + */ public function getBatchAttribute() { if ($row = $this->currentClassRow()) { @@ -58,6 +86,11 @@ public function getBatchAttribute() } } + /** + * Returns the Grade. + * + * @return mixed + */ public function getGradeAttribute() { if ($class = $this->class) { @@ -65,10 +98,13 @@ public function getGradeAttribute() } } + /** + * Returns the picture of the Student. + * + * @return \Illuminate\Database\Eloquent\Relations\HasOne + */ public function picture() { return $this->hasOne(Media::class, 'id', 'image_id'); } } - - diff --git a/App/Modules/Students/Models/StudentCategory.php b/App/Modules/Students/Models/StudentCategory.php new file mode 100644 index 0000000..8bc9336 --- /dev/null +++ b/App/Modules/Students/Models/StudentCategory.php @@ -0,0 +1,22 @@ +hasMany(Student::class); + } +} diff --git a/App/Modules/Students/Models/factories/Guardian.php b/App/Modules/Students/Models/factories/Guardian.php new file mode 100644 index 0000000..0d5a969 --- /dev/null +++ b/App/Modules/Students/Models/factories/Guardian.php @@ -0,0 +1,10 @@ +define(Collejo\App\Modules\Students\Models\Guardian::class, function (Faker\Generator $faker) { + return [ + 'ssn' => 'G-'.$faker->randomNumber(8), + ]; +}); diff --git a/App/Modules/Students/Models/factories/Student.php b/App/Modules/Students/Models/factories/Student.php new file mode 100644 index 0000000..3e2ecb4 --- /dev/null +++ b/App/Modules/Students/Models/factories/Student.php @@ -0,0 +1,11 @@ +define(Collejo\App\Modules\Students\Models\Student::class, function (Faker\Generator $faker) { + return [ + 'admission_number' => $faker->numerify('S-##########'), + 'admitted_on' => $faker->date, + ]; +}); diff --git a/App/Modules/Students/Models/factories/StudentCategory.php b/App/Modules/Students/Models/factories/StudentCategory.php new file mode 100644 index 0000000..e87a6ac --- /dev/null +++ b/App/Modules/Students/Models/factories/StudentCategory.php @@ -0,0 +1,11 @@ +define(Collejo\App\Modules\Students\Models\StudentCategory::class, function (Faker\Generator $faker) { + return [ + 'code' => $faker->firstName, + 'name' => $faker->name, + ]; +}); diff --git a/App/Modules/Students/Presenters/GuardianDetailsPresenter.php b/App/Modules/Students/Presenters/GuardianDetailsPresenter.php new file mode 100644 index 0000000..9dd0679 --- /dev/null +++ b/App/Modules/Students/Presenters/GuardianDetailsPresenter.php @@ -0,0 +1,28 @@ + UserBasicInformationPresenter::class, + ]; + + protected $appends = [ + 'name', + 'first_name', + 'last_name', + ]; + + protected $hidden = [ + 'user_id', + 'created_by', + 'updated_by', + 'created_at', + 'updated_at', + 'deleted_at', + ]; +} diff --git a/App/Modules/Students/Presenters/GuardianListPresenter.php b/App/Modules/Students/Presenters/GuardianListPresenter.php new file mode 100644 index 0000000..8e5dcad --- /dev/null +++ b/App/Modules/Students/Presenters/GuardianListPresenter.php @@ -0,0 +1,26 @@ + UserBasicInformationPresenter::class, + ]; + + protected $appends = [ + 'name', + ]; + + protected $hidden = [ + 'user_id', + 'created_by', + 'updated_by', + 'created_at', + 'updated_at', + 'deleted_at', + ]; +} diff --git a/App/Modules/Students/Presenters/StudentCategoryPresenter.php b/App/Modules/Students/Presenters/StudentCategoryPresenter.php new file mode 100644 index 0000000..c728198 --- /dev/null +++ b/App/Modules/Students/Presenters/StudentCategoryPresenter.php @@ -0,0 +1,9 @@ + [Clasis::class, ClassBasicDetailsPresenter::class, 'class'], + 'batch_id' => [Batch::class, BatchBasicDetailsPresenter::class, 'batch'], + ]; +} diff --git a/App/Modules/Students/Presenters/StudentClassDetailsPresenter.php b/App/Modules/Students/Presenters/StudentClassDetailsPresenter.php new file mode 100644 index 0000000..91700ca --- /dev/null +++ b/App/Modules/Students/Presenters/StudentClassDetailsPresenter.php @@ -0,0 +1,20 @@ + StudentClassDetailsPivotDecorator::class, + ]; + + protected $hidden = [ + 'created_by', + 'updated_by', + 'created_at', + 'updated_at', + 'deleted_at', + ]; +} diff --git a/App/Modules/Students/Presenters/StudentDetailsPresenter.php b/App/Modules/Students/Presenters/StudentDetailsPresenter.php new file mode 100644 index 0000000..18a5f67 --- /dev/null +++ b/App/Modules/Students/Presenters/StudentDetailsPresenter.php @@ -0,0 +1,32 @@ + UserBasicInformationPresenter::class, + 'picture' => MediaBasicInformationPresenter::class, + 'student_category' => StudentCategoryPresenter::class, + ]; + + protected $appends = [ + 'name', + 'first_name', + 'last_name', + 'date_of_birth', + ]; + + protected $hidden = [ + 'user_id', + 'created_by', + 'updated_by', + 'created_at', + 'updated_at', + 'deleted_at', + ]; +} diff --git a/App/Modules/Students/Presenters/StudentListPresenter.php b/App/Modules/Students/Presenters/StudentListPresenter.php new file mode 100644 index 0000000..e65637f --- /dev/null +++ b/App/Modules/Students/Presenters/StudentListPresenter.php @@ -0,0 +1,28 @@ + UserBasicInformationPresenter::class, + ]; + + protected $appends = [ + 'name', + 'class', + ]; + + protected $hidden = [ + 'user_id', + 'image_id', + 'created_by', + 'updated_by', + 'created_at', + 'updated_at', + 'deleted_at', + ]; +} diff --git a/App/Modules/Students/Providers/StudentsModuleServiceProvider.php b/App/Modules/Students/Providers/StudentsModuleServiceProvider.php new file mode 100644 index 0000000..7dfa2a8 --- /dev/null +++ b/App/Modules/Students/Providers/StudentsModuleServiceProvider.php @@ -0,0 +1,48 @@ +app->bind(StudentRepositoryContract::class, StudentRepository::class); + $this->app->bind(StudentListCriteria::class); + + $this->app->bind(GuardianRepositoryContract::class, GuardianRepository::class); + $this->app->bind(GuardiansListCriteria::class); + } + + /** + * Returns an array of permissions for the current module. + * + * @return array + */ + public function getPermissions() + { + return [ + 'view_student_general_details' => ['list_students', 'view_student_class_details'], + 'view_student_class_details' => ['assign_student_to_class', 'view_student_class_history_details'], + 'view_student_guardian_details' => [], + 'edit_student_general_details' => ['create_student'], + 'view_student_contact_details' => ['edit_student_contact_details'], + 'list_students' => ['assign_guardian_to_student', 'list_guardians', 'list_student_categories'], + 'list_guardians' => ['assign_guardian_to_student', 'create_guardian', 'edit_guardian'], + 'view_guardian_contact_details' => ['edit_guardian', 'edit_guardian_contact_details'], + 'list_student_categories' => ['add_edit_student_category'], + ]; + } +} diff --git a/App/Modules/Students/Repositories/GuardianRepository.php b/App/Modules/Students/Repositories/GuardianRepository.php new file mode 100644 index 0000000..48aa3da --- /dev/null +++ b/App/Modules/Students/Repositories/GuardianRepository.php @@ -0,0 +1,92 @@ +parseFillable($attributes, Guardian::class); + + DB::transaction(function () use ($attributes, $guardianAttributes, &$guardian) { + $user = $this->userRepository->create($attributes); + + $guardian = Guardian::make($guardianAttributes); + + $guardian->user()->associate($user)->save(); + + $this->userRepository->addRoleToUser($user, $this->userRepository->getRoleByName('guardian')); + }); + + return $guardian; + } + + /** + * Update a guardian with the given id and attributes. + * + * @param array $attributes + * @param $guardianId + * + * @return mixed + */ + public function updateGuardian(array $attributes, $guardianId) + { + $guardian = $this->findGuardian($guardianId); + + $guardianAttributes = $this->parseFillable($attributes, Guardian::class); + + DB::transaction(function () use ($attributes, $guardianAttributes, &$guardian, $guardianId) { + $guardian->update($guardianAttributes); + + $user = $this->userRepository->update($attributes, $guardian->user->id); + }); + + return $guardian; + } + + /** + * Get guardian by id. + * + * @param $id + * + * @return mixed + */ + public function findGuardian($id) + { + return Guardian::findOrFail($id); + } + + /** + * Get guardians by the given criteria. + * + * @param $criteria + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getGuardians($criteria) + { + return $this->search($criteria); + } + + public function boot() + { + parent::boot(); + + $this->userRepository = app()->make(UserRepository::class); + } +} diff --git a/App/Modules/Students/Repositories/StudentRepository.php b/App/Modules/Students/Repositories/StudentRepository.php new file mode 100644 index 0000000..cbf0940 --- /dev/null +++ b/App/Modules/Students/Repositories/StudentRepository.php @@ -0,0 +1,153 @@ +search(StudentCategory::class); + } + + /** + * Returns or fails finding a Student by the id. + * + * @param $id + * + * @return mixed + */ + public function findStudent($id) + { + return Student::findOrFail($id); + } + + public function findStudentCategory($studentCategoryId) + { + return StudentCategory::findOrFail($studentCategoryId); + } + + public function assignStudentCategory($studentCategoryId, $studentId) + { + $this->findStudent($studentId)->studentCategory()->save($this->findStudentCategory($studentCategoryId)); + } + + public function assignToClass($batchId, $gradeId, $classId, $studentId, $graduate = false) + { + if (!$this->findStudent($studentId)->classes->contains($classId)) { + $student = $this->findStudent($studentId); + + if (!$graduate && $student->class) { + $student->classes()->detach($student->class->id); + } + + $student->classes() + ->attach($this->classRepository->findClass($classId, $gradeId), $this->includePivotMetaData([ + 'batch_id' => $this->classRepository->findBatch($batchId)->id, + ])); + } + } + + /** + * Updates the given Student and the User with the given attributes. + * + * @param array $attributes + * @param $studentId + * + * @return mixed + */ + public function updateStudent(array $attributes, $studentId) + { + $student = $this->findStudent($studentId); + + if (isset($attributes['admitted_on'])) { + $attributes['admitted_on'] = toUTC($attributes['admitted_on']); + } + + if (!isset($attributes['image_id'])) { + $attributes['image_id'] = null; + } + + $studentAttributes = $this->parseFillable($attributes, Student::class); + + DB::transaction(function () use ($attributes, $studentAttributes, &$student, $studentId) { + $student->update($studentAttributes); + + $user = $this->userRepository->update($attributes, $student->user->id); + }); + + return $student; + } + + /** + * Creates a new Student and User model with the given attributes. + * + * @param array $attributes + * + * @return null + */ + public function createStudent(array $attributes) + { + $student = null; + + $attributes['admitted_on'] = toUTC($attributes['admitted_on']); + + if (!isset($attributes['image_id'])) { + $attributes['image_id'] = null; + } + + $studentAttributes = $this->parseFillable($attributes, Student::class); + + DB::transaction(function () use ($attributes, $studentAttributes, &$student) { + $user = $this->userRepository->create($attributes); + + $student = Student::make($studentAttributes); + + $student->user()->associate($user)->save(); + + $this->userRepository->addRoleToUser($user, $this->userRepository->getRoleByName('student')); + }); + + return $student; + } + + /** + * Search for users bases on the criteria. + * + * @param $criteria + * + * @return \Collejo\Foundation\Repository\CacheableResult + */ + public function getStudents(StudentListCriteria $criteria) + { + return $this->search($criteria); + } + + /** + * Setup additional repositories. + */ + public function boot() + { + parent::boot(); + + $this->userRepository = app()->make(UserRepository::class); + $this->classRepository = app()->make(ClassRepository::class); + } +} diff --git a/App/Modules/Students/Seeder/StudentDataSeeder.php b/App/Modules/Students/Seeder/StudentDataSeeder.php new file mode 100644 index 0000000..207f074 --- /dev/null +++ b/App/Modules/Students/Seeder/StudentDataSeeder.php @@ -0,0 +1,51 @@ +create([ + 'name' => $category, + 'code' => substr(strtoupper($category), 0, 3), + ]); + } + + factory(User::class, 20)->create()->each(function ($user) { + $student = factory(Student::class)->make(); + + $student->user()->associate($user); + $student->studentCategory()->associate($this->faker->randomElement(StudentCategory::all())); + + $student->save(); + + $guardian = factory(Guardian::class)->make(); + + $guardianUser = factory(User::class)->create(); + + $guardian->user()->associate($guardianUser)->save(); + + $student->guardians()->sync($this->createPivotIds([$guardian->id])); + }); + } +} diff --git a/App/Modules/Students/Tests/Unit/StudentTest.php b/App/Modules/Students/Tests/Unit/StudentTest.php new file mode 100644 index 0000000..6c64450 --- /dev/null +++ b/App/Modules/Students/Tests/Unit/StudentTest.php @@ -0,0 +1,73 @@ +create(); + + $students = $this->studentRepository + ->getStudents(app()->make(StudentListCriteria::class))->get(); + + $this->assertCount(5, $students); + } + + /** + * Test creating a Student. + */ + public function testStudentCreate() + { + $student = factory(Student::class)->make(); + $user = factory(User::class)->make(); + + $inputData = array_merge($student->toArray(), $user->toArray()); + + $model = $this->studentRepository->createStudent($inputData); + + $this->assertArrayValuesEquals($model, $student); + } + + /** + * Test updating a Student. + */ + public function testStudentUpdate() + { + $user = factory(User::class)->create(); + + $student = factory(Student::class)->create(); + + $student->user()->associate($user)->save(); + + $studentNew = factory(Student::class)->make(); + $userNew = factory(User::class)->make(); + + $inputData = array_merge($studentNew->toArray(), $userNew->toArray()); + + $model = $this->studentRepository->updateStudent($inputData, $student->id); + + $this->assertArrayValuesEquals($model, $studentNew); + } + + public function setup() + { + parent::setup(); + + $this->studentRepository = $this->app->make(StudentRepository::class); + } +} diff --git a/src/migrations/0_0_0_000110_create_student_categories_table.php b/App/Modules/Students/migrations/0_0_0_000110_create_student_categories_table.php similarity index 95% rename from src/migrations/0_0_0_000110_create_student_categories_table.php rename to App/Modules/Students/migrations/0_0_0_000110_create_student_categories_table.php index cdacf94..1db27dd 100644 --- a/src/migrations/0_0_0_000110_create_student_categories_table.php +++ b/App/Modules/Students/migrations/0_0_0_000110_create_student_categories_table.php @@ -1,7 +1,7 @@ string('id', 45)->primary(); - $table->string('name', 20)->unique(); + $table->string('name', 20); $table->string('code', 10)->nullable(); $table->string('created_by')->nullable(); $table->string('updated_by')->nullable(); diff --git a/src/migrations/0_0_0_000130_create_students_table.php b/App/Modules/Students/migrations/0_0_0_000130_create_students_table.php similarity index 91% rename from src/migrations/0_0_0_000130_create_students_table.php rename to App/Modules/Students/migrations/0_0_0_000130_create_students_table.php index 14b73a9..2411170 100644 --- a/src/migrations/0_0_0_000130_create_students_table.php +++ b/App/Modules/Students/migrations/0_0_0_000130_create_students_table.php @@ -1,7 +1,7 @@ string('id', 45)->primary(); - $table->string('user_id', 45)->unique(); + $table->string('user_id', 45)->unique()->nullable(); $table->string('admission_number', 45)->unique(); $table->timestamp('admitted_on'); - $table->string('student_category_id', 45); + $table->string('student_category_id', 45)->nullable(); $table->string('image_id', 45)->nullable(); $table->string('created_by')->nullable(); $table->string('updated_by')->nullable(); diff --git a/src/migrations/0_0_0_000190_create_class_student_table.php b/App/Modules/Students/migrations/0_0_0_000190_create_class_student_table.php similarity index 100% rename from src/migrations/0_0_0_000190_create_class_student_table.php rename to App/Modules/Students/migrations/0_0_0_000190_create_class_student_table.php index b32250b..9cdbe12 100644 --- a/src/migrations/0_0_0_000190_create_class_student_table.php +++ b/App/Modules/Students/migrations/0_0_0_000190_create_class_student_table.php @@ -1,7 +1,7 @@ + + + + \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/components/EditGuardianDetails.vue b/App/Modules/Students/resources/assets/js/components/EditGuardianDetails.vue new file mode 100644 index 0000000..c3d00ed --- /dev/null +++ b/App/Modules/Students/resources/assets/js/components/EditGuardianDetails.vue @@ -0,0 +1,45 @@ + + + \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/components/EditStudentDetails.vue b/App/Modules/Students/resources/assets/js/components/EditStudentDetails.vue new file mode 100644 index 0000000..2f6b345 --- /dev/null +++ b/App/Modules/Students/resources/assets/js/components/EditStudentDetails.vue @@ -0,0 +1,72 @@ + + + \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/components/GuardiansList.vue b/App/Modules/Students/resources/assets/js/components/GuardiansList.vue new file mode 100644 index 0000000..f0945b0 --- /dev/null +++ b/App/Modules/Students/resources/assets/js/components/GuardiansList.vue @@ -0,0 +1,59 @@ + + + \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/components/StudentCategoriesList.vue b/App/Modules/Students/resources/assets/js/components/StudentCategoriesList.vue new file mode 100644 index 0000000..2460f7b --- /dev/null +++ b/App/Modules/Students/resources/assets/js/components/StudentCategoriesList.vue @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/components/StudentsList.vue b/App/Modules/Students/resources/assets/js/components/StudentsList.vue new file mode 100644 index 0000000..4188045 --- /dev/null +++ b/App/Modules/Students/resources/assets/js/components/StudentsList.vue @@ -0,0 +1,75 @@ + + + \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/components/ViewStudentClasses.vue b/App/Modules/Students/resources/assets/js/components/ViewStudentClasses.vue new file mode 100644 index 0000000..72bf239 --- /dev/null +++ b/App/Modules/Students/resources/assets/js/components/ViewStudentClasses.vue @@ -0,0 +1,33 @@ + + + \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/editGuardianDetails.js b/App/Modules/Students/resources/assets/js/editGuardianDetails.js new file mode 100644 index 0000000..63e72d9 --- /dev/null +++ b/App/Modules/Students/resources/assets/js/editGuardianDetails.js @@ -0,0 +1,5 @@ +Vue.component('edit-guardian-details', require('./components/EditGuardianDetails')); + +new Vue({ + el: '#editGuardianDetails' +}); \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/editStudentDetails.js b/App/Modules/Students/resources/assets/js/editStudentDetails.js new file mode 100644 index 0000000..dbfc299 --- /dev/null +++ b/App/Modules/Students/resources/assets/js/editStudentDetails.js @@ -0,0 +1,5 @@ +Vue.component('edit-student-details', require('./components/EditStudentDetails')); + +new Vue({ + el: '#editStudentDetails' +}); \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/guardiansList.js b/App/Modules/Students/resources/assets/js/guardiansList.js new file mode 100644 index 0000000..23ea605 --- /dev/null +++ b/App/Modules/Students/resources/assets/js/guardiansList.js @@ -0,0 +1,5 @@ +Vue.component('guardians-list', require('./components/GuardiansList')); + +new Vue({ + el: '#guardiansList' +}); \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/studentCategoriesList.js b/App/Modules/Students/resources/assets/js/studentCategoriesList.js new file mode 100644 index 0000000..c8e9f18 --- /dev/null +++ b/App/Modules/Students/resources/assets/js/studentCategoriesList.js @@ -0,0 +1,5 @@ +Vue.component('student-categories-list', require('./components/StudentCategoriesList')); + +new Vue({ + el: '#studentCategoriesList' +}); \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/studentsList.js b/App/Modules/Students/resources/assets/js/studentsList.js new file mode 100644 index 0000000..70a3087 --- /dev/null +++ b/App/Modules/Students/resources/assets/js/studentsList.js @@ -0,0 +1,5 @@ +Vue.component('students-list', require('./components/StudentsList')); + +new Vue({ + el: '#studentsList' +}); \ No newline at end of file diff --git a/App/Modules/Students/resources/assets/js/viewStudentClasses.js b/App/Modules/Students/resources/assets/js/viewStudentClasses.js new file mode 100644 index 0000000..f5f3cd3 --- /dev/null +++ b/App/Modules/Students/resources/assets/js/viewStudentClasses.js @@ -0,0 +1,5 @@ +Vue.component('view-student-classes', require('./components/ViewStudentClasses')); + +new Vue({ + el: '#viewStudentClasses' +}); \ No newline at end of file diff --git a/App/Modules/Students/resources/lang/en/guardian.php b/App/Modules/Students/resources/lang/en/guardian.php new file mode 100644 index 0000000..10bd681 --- /dev/null +++ b/App/Modules/Students/resources/lang/en/guardian.php @@ -0,0 +1,30 @@ + 'Guardians', + 'guardians' => 'Guardians', + 'students' => 'Students', + + 'new_guardian' => 'New Guardian', + 'edit_guardian' => 'Edit Guardian', + + 'first_name' => 'First Name', + 'last_name' => 'Last Name', + 'name' => 'Name', + 'ssn' => 'Social Security Number', + + 'email' => 'Email', + 'password' => 'Password', + + 'guardian_details' => 'Guardian Details', + 'account_details' => 'Account Details', + 'contact_details' => 'Contact Details', + + 'guardians_list' => 'Guardians List', + 'empty_list' => 'There are no Guardians in the system.', + + 'widget_children_in_school' => 'Children In School', + + 'guardian_created' => 'Guardian created.', + 'guardian_updated' => 'Guardian updated.', +]; diff --git a/App/Modules/Students/resources/lang/en/menu.php b/App/Modules/Students/resources/lang/en/menu.php new file mode 100644 index 0000000..c997aec --- /dev/null +++ b/App/Modules/Students/resources/lang/en/menu.php @@ -0,0 +1,11 @@ + 'Students', + + 'student_new' => 'New Student', + + 'guardians' => 'Parents and Guardians', + + 'student_categories' => 'Categories', +]; diff --git a/App/Modules/Students/resources/lang/en/student.php b/App/Modules/Students/resources/lang/en/student.php new file mode 100644 index 0000000..6f40dc4 --- /dev/null +++ b/App/Modules/Students/resources/lang/en/student.php @@ -0,0 +1,34 @@ + 'Students', + + 'student_image' => 'Student Image', + 'admission_number' => 'Admission Number', + 'admitted_on' => 'Admitted On', + 'first_name' => 'First Name', + 'last_name' => 'Last Name', + 'student_category' => 'Student Category', + 'name' => 'Name', + 'email' => 'Email', + 'password' => 'Password', + + 'date_of_birth' => 'Date of Birth', + + 'new_student' => 'New Student', + 'edit_student' => 'Edit Student', + + 'class' => 'Class', + + 'students_list' => 'Student Details', + 'student_details' => 'Student Details', + 'classes_details' => 'Class Details', + 'assign_class' => 'Assign to class', + 'guardians_details' => 'Guardian Details', + 'contact_details' => 'Contact Details', + 'account_details' => 'Account Details', + + 'empty_list' => 'There are no Students in the system for the given criteria.', + 'student_created' => 'Student created.', + 'student_updated' => 'Student updated.', +]; diff --git a/App/Modules/Students/resources/lang/en/student_category.php b/App/Modules/Students/resources/lang/en/student_category.php new file mode 100644 index 0000000..5e10109 --- /dev/null +++ b/App/Modules/Students/resources/lang/en/student_category.php @@ -0,0 +1,14 @@ + 'Student Categories', + 'new_student_category' => 'New Student Category', + 'name' => 'Name', + 'code' => 'Code', + + 'view_students' => 'View Students', + + 'empty_list' => 'There are no Student Categories in the system.', + 'student_category_created' => 'Student Category created.', + 'student_category_updated' => 'Student Category updated.', +]; diff --git a/App/Modules/Students/resources/views/assign_student_class.blade.php b/App/Modules/Students/resources/views/assign_student_class.blade.php new file mode 100644 index 0000000..701aaff --- /dev/null +++ b/App/Modules/Students/resources/views/assign_student_class.blade.php @@ -0,0 +1,45 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', trans('students::student.assign_class')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tools') + +@endsection + +@section('tabs') + + @include('students::partials.edit_student_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Students/resources/views/edit_guardian_account.blade.php b/App/Modules/Students/resources/views/edit_guardian_account.blade.php new file mode 100644 index 0000000..cf7cc4b --- /dev/null +++ b/App/Modules/Students/resources/views/edit_guardian_account.blade.php @@ -0,0 +1,42 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', trans('students::guardian.edit_guardian')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('students::guardian.edit_guardian_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Students/resources/views/edit_guardian_details.blade.php b/App/Modules/Students/resources/views/edit_guardian_details.blade.php new file mode 100644 index 0000000..ccfbe2b --- /dev/null +++ b/App/Modules/Students/resources/views/edit_guardian_details.blade.php @@ -0,0 +1,44 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $guardian ? trans('students::guardian.edit_guardian') : trans('students::guardian.new_guardian')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('students::partials.edit_guardian_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Students/resources/views/edit_student_account.blade.php b/App/Modules/Students/resources/views/edit_student_account.blade.php new file mode 100644 index 0000000..333f88d --- /dev/null +++ b/App/Modules/Students/resources/views/edit_student_account.blade.php @@ -0,0 +1,42 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', trans('students::student.edit_student')) + +@section('scripts') + @parent + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('students::partials.edit_student_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Students/resources/views/edit_student_details.blade.php b/App/Modules/Students/resources/views/edit_student_details.blade.php new file mode 100644 index 0000000..311dfe9 --- /dev/null +++ b/App/Modules/Students/resources/views/edit_student_details.blade.php @@ -0,0 +1,51 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $student ? trans('students::student.edit_student') : trans('students::student.new_student')) + +@section('styles') + @parent + +@endsection + +@section('scripts') + @parent + + +@endsection + +@section('breadcrumbs') + + + +@endsection + +@section('tabs') + + @include('students::partials.edit_student_tabs') + +@endsection + +@section('tab') + +
+ + + +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Students/resources/views/guardians_list.blade.php b/App/Modules/Students/resources/views/guardians_list.blade.php new file mode 100644 index 0000000..0a9741d --- /dev/null +++ b/App/Modules/Students/resources/views/guardians_list.blade.php @@ -0,0 +1,34 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('students::guardian.guardians')) + +@section('total', $guardians->total()) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('create_guardian') + + + {{ trans('students::guardian.new_guardian') }} + + + @endcan + +@endsection + +@section('table') + +
+ count()) + :guardians="{{$guardians->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Students/resources/views/partials/edit_guardian_tabs.blade.php b/App/Modules/Students/resources/views/partials/edit_guardian_tabs.blade.php new file mode 100644 index 0000000..eebf55f --- /dev/null +++ b/App/Modules/Students/resources/views/partials/edit_guardian_tabs.blade.php @@ -0,0 +1,32 @@ + \ No newline at end of file diff --git a/App/Modules/Students/resources/views/partials/edit_student_tabs.blade.php b/App/Modules/Students/resources/views/partials/edit_student_tabs.blade.php new file mode 100644 index 0000000..f3c0570 --- /dev/null +++ b/App/Modules/Students/resources/views/partials/edit_student_tabs.blade.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/App/Modules/Students/resources/views/partials/view_guardian_tabs.blade.php b/App/Modules/Students/resources/views/partials/view_guardian_tabs.blade.php new file mode 100644 index 0000000..e3469fa --- /dev/null +++ b/App/Modules/Students/resources/views/partials/view_guardian_tabs.blade.php @@ -0,0 +1,28 @@ + diff --git a/App/Modules/Students/resources/views/partials/view_student_tabs.blade.php b/App/Modules/Students/resources/views/partials/view_student_tabs.blade.php new file mode 100644 index 0000000..517e01c --- /dev/null +++ b/App/Modules/Students/resources/views/partials/view_student_tabs.blade.php @@ -0,0 +1,46 @@ + diff --git a/App/Modules/Students/resources/views/student_categories_list.blade.php b/App/Modules/Students/resources/views/student_categories_list.blade.php new file mode 100644 index 0000000..1e4e93e --- /dev/null +++ b/App/Modules/Students/resources/views/student_categories_list.blade.php @@ -0,0 +1,34 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('students::student_category.student_categories')) + +@section('count', $student_categories->total()) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('add_edit_student_category') + + + {{ trans('students::student_category.new_student_category') }} + + + @endcan + +@endsection + +@section('table') + +
+ count()) + :categories="{{$student_categories->toJson()}}" + @endif + > +
+ +@endsection diff --git a/App/Modules/Students/resources/views/students_list.blade.php b/App/Modules/Students/resources/views/students_list.blade.php new file mode 100644 index 0000000..e586b8a --- /dev/null +++ b/App/Modules/Students/resources/views/students_list.blade.php @@ -0,0 +1,34 @@ +@extends('dashboard::layouts.table_view') + +@section('title', trans('students::student.students')) + +@section('total', $students->total()) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('create_student') + + + {{ trans('students::student.new_student') }} + + + @endcan + +@endsection + +@section('table') + +
+ count()) + :students="{{$students->toJson()}}" + @endif + > +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Students/resources/views/view_guardian_account.blade.php b/App/Modules/Students/resources/views/view_guardian_account.blade.php new file mode 100644 index 0000000..a67e1b6 --- /dev/null +++ b/App/Modules/Students/resources/views/view_guardian_account.blade.php @@ -0,0 +1,33 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $guardian->name) + +@section('tools') + + @can('edit_user_account_info') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('students::partials.view_guardian_tabs') + +@endsection + +@section('tab') + +
+
+ +
{{ trans('acl::user.email') }}
+
{{ $guardian->user->email }}
+ +
+
+ +@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/view_guardian_details.blade.php b/App/Modules/Students/resources/views/view_guardian_details.blade.php similarity index 65% rename from src/modules/Students/resources/views/view_guardian_details.blade.php rename to App/Modules/Students/resources/views/view_guardian_details.blade.php index 421f4ef..c759eaf 100644 --- a/src/modules/Students/resources/views/view_guardian_details.blade.php +++ b/App/Modules/Students/resources/views/view_guardian_details.blade.php @@ -1,12 +1,14 @@ -@extends('collejo::dash.sections.tab_view') +@extends('dashboard::layouts.tab_view') @section('title', $guardian->name) @section('tools') -@can('edit_student_general_details') - {{ trans('common.edit') }} -@endcan + @can('edit_student_general_details') + + {{ trans('base::common.edit') }} + + @endcan @endsection @@ -23,7 +25,7 @@
{{ trans('students::guardian.ssn') }}
{{ $guardian->ssn }}
-
+
{{ trans('students::guardian.name') }}
{{ $guardian->name }}
diff --git a/src/modules/Students/resources/views/view_student_account.blade.php b/App/Modules/Students/resources/views/view_student_account.blade.php similarity index 58% rename from src/modules/Students/resources/views/view_student_account.blade.php rename to App/Modules/Students/resources/views/view_student_account.blade.php index 3499545..cfb1978 100644 --- a/src/modules/Students/resources/views/view_student_account.blade.php +++ b/App/Modules/Students/resources/views/view_student_account.blade.php @@ -1,12 +1,14 @@ -@extends('collejo::dash.sections.tab_view') +@extends('dashboard::layouts.tab_view') @section('title', $student->name) @section('tools') -@can('edit_user_account_info') - {{ trans('common.edit') }} -@endcan + @can('edit_user_account_info') + + {{ trans('base::common.edit') }} + + @endcan @endsection @@ -22,7 +24,7 @@
{{ trans('students::student.email') }}
{{ $student->user->email }}
-
+
@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/view_student_addreses.blade.php b/App/Modules/Students/resources/views/view_student_addreses.blade.php similarity index 63% rename from src/modules/Students/resources/views/view_student_addreses.blade.php rename to App/Modules/Students/resources/views/view_student_addreses.blade.php index b2d1ef4..9a7957f 100644 --- a/src/modules/Students/resources/views/view_student_addreses.blade.php +++ b/App/Modules/Students/resources/views/view_student_addreses.blade.php @@ -1,10 +1,12 @@ -@extends('collejo::dash.sections.tab_view') +@extends('dashboard::layouts.tab_view') @section('title', $student->name) @section('tools') - {{ trans('common.edit') }} + + {{ trans('base::common.edit') }} + @endsection @@ -21,11 +23,7 @@
- @foreach($student->addresses as $address) - @include('students::partials.student_address') - - @endforeach
@@ -34,7 +32,7 @@ - +
diff --git a/App/Modules/Students/resources/views/view_student_classes_details.blade.php b/App/Modules/Students/resources/views/view_student_classes_details.blade.php new file mode 100644 index 0000000..7ae9137 --- /dev/null +++ b/App/Modules/Students/resources/views/view_student_classes_details.blade.php @@ -0,0 +1,35 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $student->name) + +@section('scripts') + @parent + +@endsection + +@section('tools') + + @can('assign_student_to_class') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('students::partials.view_student_tabs') + +@endsection + +@section('tab') + +
+ +
+ +@endsection \ No newline at end of file diff --git a/App/Modules/Students/resources/views/view_student_details.blade.php b/App/Modules/Students/resources/views/view_student_details.blade.php new file mode 100644 index 0000000..9d2d760 --- /dev/null +++ b/App/Modules/Students/resources/views/view_student_details.blade.php @@ -0,0 +1,53 @@ +@extends('dashboard::layouts.tab_view') + +@section('title', $student->name) + +@section('tools') + + @can('edit_student_general_details') + + {{ trans('base::common.edit') }} + + @endcan + +@endsection + +@section('tabs') + + @include('students::partials.view_student_tabs') + +@endsection + +@section('tab') + +
+
+ @if($student->picture) + + @else + + @endif +
+
+
{{ trans('students::student.admission_number') }}
+
{{ $student->admission_number }}
+
+
+
{{ trans('students::student.admitted_on') }}
+
{{ dateFormat(dateToUserTz($student->admitted_on)) }}
+
+
+
{{ trans('students::student.name') }}
+
{{ $student->name }}
+
+
+
{{ trans('students::student.date_of_birth') }}
+
{{ $student->date_of_birth }}
+
+
+
{{ trans('students::student.student_category') }}
+
{{ @$student->student_category->name }}
+
+
+ +@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/view_student_guardians_details.blade.php b/App/Modules/Students/resources/views/view_student_guardians_details.blade.php similarity index 62% rename from src/modules/Students/resources/views/view_student_guardians_details.blade.php rename to App/Modules/Students/resources/views/view_student_guardians_details.blade.php index e833c44..93f4851 100644 --- a/src/modules/Students/resources/views/view_student_guardians_details.blade.php +++ b/App/Modules/Students/resources/views/view_student_guardians_details.blade.php @@ -1,12 +1,14 @@ -@extends('collejo::dash.sections.tab_view') +@extends('dashboard::layouts.tab_view') @section('title', $student->name) @section('tools') -@can('edit_student_general_details') - {{ trans('common.edit') }} -@endcan + @can('edit_student_general_details') + + {{ trans('base::common.edit') }} + + @endcan @endsection diff --git a/App/Providers/AppServiceProvider.php b/App/Providers/AppServiceProvider.php new file mode 100644 index 0000000..a5d25c6 --- /dev/null +++ b/App/Providers/AppServiceProvider.php @@ -0,0 +1,48 @@ +app->environment('production')) { + foreach ($providers as $provider) { + $this->app->register($provider); + } + } + + $this->app->bind('modules', function ($app) { + return new Module($app); + }); + + $this->app->bind('menus', function ($app) { + return new Menu($app); + }); + } +} diff --git a/App/Providers/AuthServiceProvider.php b/App/Providers/AuthServiceProvider.php new file mode 100644 index 0000000..f4c4db1 --- /dev/null +++ b/App/Providers/AuthServiceProvider.php @@ -0,0 +1,29 @@ + 'Collejo\App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/src/Providers/MediaServiceProvider.php b/App/Providers/BroadcastServiceProvider.php similarity index 55% rename from src/Providers/MediaServiceProvider.php rename to App/Providers/BroadcastServiceProvider.php index 608294d..ba2e314 100644 --- a/src/Providers/MediaServiceProvider.php +++ b/App/Providers/BroadcastServiceProvider.php @@ -2,11 +2,10 @@ namespace Collejo\App\Providers; +use Illuminate\Support\Facades\Broadcast; use Illuminate\Support\ServiceProvider; -use Collejo\App\Contracts\Media\Uploader as UploaderInterface; -use Collejo\App\Foundation\Media\Uploader; -class MediaServiceProvider extends ServiceProvider +class BroadcastServiceProvider extends ServiceProvider { /** * Bootstrap any application services. @@ -15,7 +14,9 @@ class MediaServiceProvider extends ServiceProvider */ public function boot() { + Broadcast::routes(); + require base_path('routes/channels.php'); } /** @@ -25,9 +26,5 @@ public function boot() */ public function register() { - $this->app->bind(UploaderInterface::class, function($app) { - return new Uploader(); - }); } - } diff --git a/App/Providers/EventServiceProvider.php b/App/Providers/EventServiceProvider.php new file mode 100644 index 0000000..413c961 --- /dev/null +++ b/App/Providers/EventServiceProvider.php @@ -0,0 +1,32 @@ + [ + 'Collejo\App\Listeners\EventListener', + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + parent::boot(); + + // + } +} diff --git a/App/Providers/ModuleServiceProvider.php b/App/Providers/ModuleServiceProvider.php new file mode 100644 index 0000000..d065b73 --- /dev/null +++ b/App/Providers/ModuleServiceProvider.php @@ -0,0 +1,29 @@ +modules = app()->make('modules'); + + $this->modules->loadModules(); + } + + /** + * Register any application services. + * + * @return void + */ + public function register() + { + } +} diff --git a/src/Providers/RouteServiceProvider.php b/App/Providers/RouteServiceProvider.php similarity index 54% rename from src/Providers/RouteServiceProvider.php rename to App/Providers/RouteServiceProvider.php index b0da686..56aa0d8 100644 --- a/src/Providers/RouteServiceProvider.php +++ b/App/Providers/RouteServiceProvider.php @@ -2,8 +2,8 @@ namespace Collejo\App\Providers; -use Illuminate\Routing\Router; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; +use Illuminate\Support\Facades\Route; class RouteServiceProvider extends ServiceProvider { @@ -19,26 +19,25 @@ class RouteServiceProvider extends ServiceProvider /** * Define your route model bindings, pattern filters, etc. * - * @param \Illuminate\Routing\Router $router * @return void */ - public function boot(Router $router) + public function boot() { // - parent::boot($router); - + parent::boot(); } /** * Define the routes for the application. * - * @param \Illuminate\Routing\Router $router * @return void */ - public function map(Router $router) + public function map() { - $this->mapWebRoutes($router); + $this->mapApiRoutes(); + + $this->mapWebRoutes(); // } @@ -48,15 +47,27 @@ public function map(Router $router) * * These routes all receive session state, CSRF protection, etc. * - * @param \Illuminate\Routing\Router $router * @return void */ - protected function mapWebRoutes(Router $router) + protected function mapWebRoutes() + { + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + * + * @return void + */ + protected function mapApiRoutes() { - $router->group([ - 'namespace' => $this->namespace, 'middleware' => 'web', - ], function ($router) { - require_once __DIR__ . '/../Http/routes.php'; - }); + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); } } diff --git a/Foundation/Application.php b/Foundation/Application.php new file mode 100644 index 0000000..34b05d7 --- /dev/null +++ b/Foundation/Application.php @@ -0,0 +1,39 @@ +namespace = 'Collejo\App'; + } +} diff --git a/src/Foundation/Auth/User.php b/Foundation/Auth/User/User.php similarity index 81% rename from src/Foundation/Auth/User.php rename to Foundation/Auth/User/User.php index 47e1064..49b647d 100644 --- a/src/Foundation/Auth/User.php +++ b/Foundation/Auth/User/User.php @@ -1,15 +1,14 @@ in($paths)->files() as $command) { + $command = str_replace( + ['/', '.php'], + ['\\', ''], + $command->getPathname() + ); + + $command = substr($command, strpos($command, 'Collejo\App\Modules')); + + Artisan::starting(function ($artisan) use ($command) { + $artisan->resolve($command); + }); + } + } +} diff --git a/Foundation/Criteria/BaseCriteria.php b/Foundation/Criteria/BaseCriteria.php new file mode 100644 index 0000000..e04b817 --- /dev/null +++ b/Foundation/Criteria/BaseCriteria.php @@ -0,0 +1,218 @@ +getModel(); + + $builder = $model->select($model->getTable().'.*') + ->join(DB::raw('('.$this->getSubQuery($model)->toSql().') as tmp'), $model->getTable().'.id', '=', 'tmp.id'); + + foreach ($this->criteria() as $params) { + $input = isset($params[2]) ? $params[2] : $params[0]; + + if (Request::has($input) && !empty(Request::get($input))) { + switch ($params[1]) { + + case '%LIKE': + $builder = $builder->orWhere('tmp.'.$params[0], 'LIKE', '%'.Request::get($input)); + break; + + case 'LIKE%': + $builder = $builder->orWhere('tmp.'.$params[0], 'LIKE', Request::get($input).'%'); + break; + + case '%LIKE%': + $builder = $builder->orWhere('tmp.'.$params[0], 'LIKE', '%'.Request::get($input).'%'); + break; + + default: + $builder = $builder->orWhere('tmp.'.$params[0], $params[1], Request::get($input)); + break; + } + } + } + + $builder = $builder->orderBy(Request::get('sort', $this->defaultSortKey), Request::get('order', 'asc')); + + //print_r($builder->toSql()); + + return $builder; + } + + /** + * Returns the model object for this criteria. + * + * @return mixed + */ + private function getModel() + { + if ($this->model) { + $model = $this->model; + + return new $model(); + } + } + + /** + * Returns an array of form elements. + * + * @return \Illuminate\Support\Collection + */ + public function formElements() + { + $form = $this->form()->all(); + + return $this->criteria()->map(function ($item) use ($form) { + $name = count($item) == 3 ? $item[2] : $item[0]; + + $formElement = isset($form[$name]) ? $form[$name] : []; + + if (isset($formElement['itemsCallback'])) { + $functionsName = $formElement['itemsCallback']; + + $formElement['items'] = [ + [ + 'text' => '...', + 'value' => null, + ], + ]; + + $formElement['items'] = array_merge($formElement['items'], + $this->callback($functionsName)->map(function ($option) { + return [ + 'text' => $option['name'], + 'value' => $option['id'], + ]; + })->toArray()); + + unset($formElement['itemsCallback']); + } + + return array_merge([ + 'name' => $name, + 'label' => ucwords(str_replace('_', ' ', $name)), + 'type' => 'text', + 'value' => Request::get($name), + ], $formElement); + }); + } + + /** + * Returns the renderable json string for the form elements. + * + * @return string + */ + public function toJson() + { + return json_encode($this->formElements()); + } + + /** + * Returns the sub query required for the criteria. + * + * @param $query + * + * @return mixed + */ + private function getSubQuery($query) + { + $selects = [$query->getTable().'.*']; + + foreach ($this->selects() as $as => $field) { + $selects[] = $field.' AS '.$as; + } + + $query = $query->select(DB::raw(implode(', ', $selects))); + + foreach ($this->joins() as $join) { + $query = $query->leftJoin($join[0], $join[1], '=', $join[2]); + } + + return $query; + } + + /** + * Binds any callback functions required for this criteria. + * + * @param $callback + * + * @return mixed + */ + public function callback($callback) + { + $callback = 'callback'.ucfirst($callback); + + $key = 'criteria:'.$this->model.':callbacks:'.md5(get_class($this).'|'.$callback); + + if (!Cache::has($key)) { + Cache::put($key, $this->$callback(), config('collejo.pagination.perpage')); + } + + return Cache::get($key); + } + + /** + * Returns an array of select queries for this criteria. + * + * @return \Illuminate\Support\Collection + */ + public function selects() + { + return collect($this->selects); + } + + /** + * Returns an of join queries for this criteria. + * + * @return \Illuminate\Support\Collection + */ + public function joins() + { + return collect($this->joins); + } + + /** + * Returns an array of fields for this criteria. + * + * @return \Illuminate\Support\Collection|mixed + */ + public function criteria() + { + return collect($this->criteria); + } + + /** + * Returns an array of form fields for this criteria. + * + * @return \Illuminate\Support\Collection + */ + public function form() + { + return collect($this->form); + } +} diff --git a/Foundation/Criteria/CriteriaInterface.php b/Foundation/Criteria/CriteriaInterface.php new file mode 100644 index 0000000..e925e1f --- /dev/null +++ b/Foundation/Criteria/CriteriaInterface.php @@ -0,0 +1,13 @@ +eloquentFactory = app()->make(Factory::class); + + $modules = app()->make('modules'); + + foreach ($modules->getModulePaths() as $path) { + if (file_exists($path)) { + foreach (listDir($path) as $dir) { + if (is_dir($path.'/'.$dir)) { + $factoriesDir = realpath($path.'/'.$dir.'/Models/factories'); + if (file_exists($factoriesDir)) { + $this->eloquentFactory->load($factoriesDir); + } + } + } + } + } + } +} diff --git a/src/Database/Eloquent/Model.php b/Foundation/Database/Eloquent/Model.php similarity index 55% rename from src/Database/Eloquent/Model.php rename to Foundation/Database/Eloquent/Model.php index 6efa780..7f86d8d 100644 --- a/src/Database/Eloquent/Model.php +++ b/Foundation/Database/Eloquent/Model.php @@ -1,23 +1,28 @@ getKeyName(); $model->$keyName = $model->newUuid(); @@ -28,39 +33,47 @@ protected static function boot() $model->attributes['updated_by'] = Auth::user()->id; } - if (Auth::user() && in_array('created_by', $attributes)) { $model->attributes['created_by'] = Auth::user()->id; } - }); - static::saving(function($model) { - + static::saving(function ($model) { $attributes = $model->getAllColumnsNames(); if (Auth::user() && in_array('updated_by', $attributes)) { $model->attributes['updated_by'] = Auth::user()->id; } - }); - static::created(function($model){ - event(new CriteriaDataChanged($model)); + static::created(function ($model) { + //event(new CriteriaDataChanged($model)); }); - static::updated(function($model){ - event(new CriteriaDataChanged($model)); + static::updated(function ($model) { + //event(new CriteriaDataChanged($model)); }); } + /** + * Generates a new UUID. + * + * @throws \Exception + * + * @return string + */ public function newUuid() { return (string) Uuid::generate(4); } + /** + * Returns an array of columns for this model. + * + * @return mixed + */ public function getAllColumnsNames() { return Schema::getColumnListing($this->table); } -} \ No newline at end of file +} diff --git a/Foundation/Database/Migrations/Migration.php b/Foundation/Database/Migrations/Migration.php new file mode 100644 index 0000000..bb401b1 --- /dev/null +++ b/Foundation/Database/Migrations/Migration.php @@ -0,0 +1,14 @@ +faker = app()->make(Generator::class); + + $this->loadFactories(); + } + + /** + * Create pivot ids for seeded relationships. + * + * @param $collection + * + * @return array + */ + public function createPivotIds($collection) + { + if (!$collection instanceof Collection) { + $collection = collect($collection); + } + + $ids = $collection->map(function () { + return ['id' => (string) Uuid::generate(4)]; + }); + + return array_combine(array_values($collection->toArray()), $ids->all()); + } +} diff --git a/Foundation/Exceptions/DisplayableException.php b/Foundation/Exceptions/DisplayableException.php new file mode 100644 index 0000000..afccd25 --- /dev/null +++ b/Foundation/Exceptions/DisplayableException.php @@ -0,0 +1,9 @@ +createMenuNameFromString($label); + + $menu = new MenuItem(); + $menu->setName($name)->setLabel($label)->setIcon($icon)->setType('g'); + $this->menus->push($menu); + + $closure($name); + + return $menu; + } elseif (func_num_args() == 1) { + $closure = func_get_arg(0); + $name = str_random(10); + + $menu = new MenuItem(); + $menu->setName($name)->setLabel(null)->setType('s'); + $this->menus->push($menu); + + $closure($name); + + return $menu; + } + + throw new \Exception('Invalid Arguments'); + } + + /** + * Returns a Menu object by name. + * + * @param $name + * + * @return \Illuminate\Support\Collection|static + */ + public function getMenuByName($name) + { + return $this->menus->where('name', $this->createMenuNameFromString($name))->first(); + } + + /** + * Create a nice name from a given string. + * + * @param $string + * + * @return mixed + */ + private function createMenuNameFromString($string) + { + return strtolower($string); + } + + /** + * Creates a new menu item. + * + * @param $name + * @param $label + * + * @return MenuItem + */ + public function create($name, $label) + { + $menu = new MenuItem(); + $menu->setName($name)->setLabel($label)->setType('m'); + $this->menus->push($menu); + + return $menu; + } + + /** + * Returns a collection of menu items. + * + * @return \Illuminate\Support\Collection + */ + public function getItems() + { + return $this->menus; + } + + /** + * Returns a collection of menu items sorted and ready for rendering. + * + * @return \Illuminate\Support\Collection + */ + public function getMenuBarItems($user) + { + $groups = $this->getItems()->where('type', 'g'); + + foreach ($groups as $group) { + $group->updateVisibility($user); + + $children = collect(); + + foreach ($this->getItems()->whereStrict('parent', (string) $group->getName()) as $child) { + $child->updateVisibility($user); + + if ($child->type == 's') { + $groupItems = collect(); + + foreach ($this->getItems()->where('parent', (string) $child->getName()) as $subMenuItem) { + $subMenuItem->updateVisibility($user); + + $groupItems->push($subMenuItem); + } + + if ($groupItems->count()) { + $children = $children->merge($groupItems); + $children->push($child); + } + } else { + $children->push($child); + } + } + + if ($children->last()) { + $children->last()->isLastItem = true; + } + + $group->isVisible = $children->filter(function ($child) { + return $child->isVisible && $child->type != 's'; + })->count(); + + $group->children = $children; + } + + return $groups->sortBy('order')->values(); + } + + public function __construct($app) + { + $this->app = $app; + $this->menus = collect(); + } +} diff --git a/Foundation/Menus/MenuItem.php b/Foundation/Menus/MenuItem.php new file mode 100644 index 0000000..59a6ad3 --- /dev/null +++ b/Foundation/Menus/MenuItem.php @@ -0,0 +1,309 @@ +type = $type; + + return $this; + } + + /** + * Sets the permissions for the menu item. + * + * @param $permission + * + * @return $this + */ + public function setPermission($permission) + { + $this->permission = $permission; + + return $this; + } + + /** + * Sets the name of the menu item. + * + * @param $name + * + * @return $this + */ + public function setName($name) + { + $this->name = $name; + + return $this; + } + + /** + * Sets the given menu as the current menu's parent. + * + * @param $name + * + * @return $this + */ + public function setParent($name) + { + if ($name instanceof self) { + $name = $name->getName(); + } + + $this->parent = (string) $name; + + return $this; + } + + /** + * Sets the position of the menu item in the menu template. + * + * @param $position + * + * @return $this + */ + public function setPosition($position) + { + $this->position = $position; + + return $this; + } + + /** + * Returns the name of the menu item. + * + * @return mixed + */ + public function getName() + { + return $this->name; + } + + /** + * Sets the label for the menu item. + * + * @param $label + * + * @return $this + */ + public function setLabel($label) + { + $this->label = $label; + + return $this; + } + + /** + * Gets the label for the menu item. + * + * @return mixed + */ + public function getLabel() + { + return $this->label; + } + + /** + * Sets the icon class name for the menu item. + * + * @param $icon + * + * @return $this + */ + public function setIcon($icon) + { + $this->icon = $icon; + + return $this; + } + + /** + * Returns the icon class name for the menu item. + * + * @return mixed + */ + public function getIcon() + { + return $this->icon; + } + + /** + * Sets the path for the menu item by path alias as defined in routes. + * + * @param $routeName + * + * @return $this + */ + public function setPath($routeName) + { + $router = app()->make('router'); + + foreach ($router->getRoutes() as $route) { + if ($route->getName() == $routeName) { + $this->path = $route->uri; + } + } + + return $this; + } + + /** + * Returns the path of the menu item. + * + * @return mixed + */ + public function getPath() + { + return $this->path; + } + + /** + * Returns whether the menu item is visible to the user in session. + * + * @return void + */ + public function updateVisibility($user) + { + $globallyVisibleMenusNames = ['user.profile', 'auth.logout']; + + if ($this->type == 's' || in_array($this->name, $globallyVisibleMenusNames)) { + $this->isVisible = true; + + return; + } + + $this->isVisible = $user ? $user->hasPermission($this->permission) : false; + } + + /** + * Returns an array of permission attached to the menu item. + * + * @return mixed + */ + public function getPermission() + { + return $this->permission; + } + + /** + * Returns the parent menu of a child menu item. + * + * @return mixed + */ + public function getParent() + { + return $this->parent; + } + + /** + * Returns the position of the menu item in the menu template. + * + * @return string + */ + public function getPosition() + { + return $this->position; + } + + /** + * Returns the full qualified path of the menu item. + * + * @return string + */ + public function getFullPath() + { + return '/'.ltrim($this->getPath(), '/'); + } + + /** + * Sets the order of the menu item. + * + * @param $order + * + * @return $this + */ + public function setOrder($order) + { + $this->order = $order; + + return $this; + } + + public function toArray() + { + return [ + 'name' => $this->getName(), + 'label' => $this->getLabel(), + 'icon' => $this->getIcon(), + 'path' => $this->getFullPath(), + 'parent' => $this->getParent(), + 'position' => $this->getPosition(), + 'children' => $this->children->values(), + 'type' => $this->type, + 'isLastItem' => $this->isLastItem, + 'isVisible' => $this->isVisible, + ]; + } + + public function offsetExists($offset) + { + return property_exists($this, $offset); + } + + public function offsetGet($offset) + { + return $this->$offset; + } + + public function offsetSet($offset, $value) + { + $this->$offset = $value; + } + + public function offsetUnset($offset) + { + $this->$offset = null; + } + + public function __construct() + { + $this->children = new Collection(); + } +} diff --git a/Foundation/Menus/Tests/MenusTest.php b/Foundation/Menus/Tests/MenusTest.php new file mode 100644 index 0000000..f9e0193 --- /dev/null +++ b/Foundation/Menus/Tests/MenusTest.php @@ -0,0 +1,96 @@ +createMenuSeparator(); + + $this->assertTrue($separator->type == 's'); + } + + /** + * Test menu group. + */ + public function testMenuGroup() + { + $group = $this->createMenuGroup(); + + $this->assertTrue($group->getPosition() == 'right'); + $this->assertTrue($group->getLabel() == 'main'); + $this->assertTrue($group->getIcon() == 'icon'); + } + + /** + * Test menu item. + */ + public function testMenuItem() + { + $group = $this->createMenuGroup(); + + $permission = 'some_permission'; + $icon = 'some_icon'; + $order = 12; + + $menu = $this->createMenuItem(); + + $menu->setParent($group) + ->setPermission($permission) + ->setIcon($icon) + ->setOrder($order); + + $this->assertTrue($menu->getParent() == $group->getName()); + $this->assertTrue($menu->getName() == 'name'); + $this->assertTrue($menu->getLabel() == 'sub'); + $this->assertTrue($menu->getPath() == 'test'); + $this->assertTrue($menu->getFullPath() == '/test'); + $this->assertTrue($menu->type == 'm'); + $this->assertTrue($menu->getPermission() == $permission); + $this->assertTrue($menu->getIcon() == $icon); + $this->assertTrue($menu->order == $order); + } + + /** + * Create new menu separator. + * + * @return mixed + */ + public function createMenuSeparator() + { + return Menu::group(function ($parent) { + Menu::create('name', 'sub')->setParent($parent); + }); + } + + /** + * Create new menu group. + * + * @return mixed + */ + public function createMenuGroup() + { + return Menu::group('main', 'icon', function ($parent) { + })->setOrder(1)->setPosition('right'); + } + + /** + * Create a new menu item. + * + * @return mixed + */ + public function createMenuItem() + { + Route::get('test', 'LoginController@showLoginForm')->name('test'); + + return Menu::create('name', 'sub')->setPath('test'); + } +} diff --git a/Foundation/Modules/BaseModuleServiceProvider.php b/Foundation/Modules/BaseModuleServiceProvider.php new file mode 100644 index 0000000..b9e99d1 --- /dev/null +++ b/Foundation/Modules/BaseModuleServiceProvider.php @@ -0,0 +1,198 @@ +initModule(); + + if (config('collejo.tweak.check_module_permissions_on_module_init')) { + $this->createPermissions(); + } + } + + /** + * Initializes the module. + */ + public function initModule() + { + $viewsDir = $this->getModuleDirectory('resources/views'); + $langDir = $this->getModuleDirectory('resources/lang'); + $migrationsDir = $this->getModuleDirectory('migrations'); + $routesFile = $this->getModuleDirectory('Http/routes.php'); + $menusFile = $this->getModuleDirectory('Http/menus.php'); + + if (file_exists($viewsDir)) { + $this->loadViewsFrom($viewsDir, strtolower($this->getModuleName())); + } + + if (file_exists($langDir)) { + $this->loadTranslationsFrom($langDir, strtolower($this->getModuleName())); + } + + if (file_exists($migrationsDir)) { + $this->loadMigrationsFrom($migrationsDir); + } + + if (file_exists($routesFile)) { + $this->app->router->group([ + 'namespace' => $this->getModuleNamespace(), 'middleware' => 'web', + ], function ($router) use ($routesFile) { + require $routesFile; + }); + } + + if (file_exists($menusFile)) { + require_once $menusFile; + } + + $this->defineAbilities(app()->make(GateContract::class)); + } + + /** + * Loop through module permissions and define them in the gate. + * + * @param GateContract $gate + */ + private function defineAbilities(GateContract $gate) + { + foreach ($this->getPermissions() as $permission => $childPermissions) { + $this->defineAbility($gate, $permission); + + foreach ($childPermissions as $permission) { + $this->defineAbility($gate, $permission); + } + } + } + + /** + * Defines a given ability in the gate for the current module. + * + * If a corresponding gate closure was found it will use that + * If no such closure if found will create a default closure + * + * @param $gate + * @param $permission + */ + private function defineAbility($gate, $permission) + { + $gates = $this->getGates(); + + if (isset($gates[$permission])) { + $closure = $gates[$permission]; + } else { + $closure = (function ($user) use ($permission) { + return $user->hasPermission($permission); + }); + } + + $gate->define($permission, $closure); + } + + /** + * Create permissions in the database for the current module. + */ + public function createPermissions() + { + if (is_array($this->getPermissions()) && $this->app->isInstalled()) { + $userRepository = $this->app->make(UserRepositoryContract::class); + + $adminRole = $userRepository->getRoleByName('admin'); + + foreach ($this->getPermissions() as $permission => $childPermissions) { + $permission = $userRepository->createPermissionIfNotExists($permission, strtolower($this->name)); + + $userRepository->addPermissionToRole($adminRole, $permission); + + foreach ($childPermissions as $child) { + $childPermission = $userRepository->createPermissionIfNotExists($child, strtolower($this->name)); + + $permission->children()->save($childPermission); + + $userRepository->addPermissionToRole($adminRole, $childPermission); + } + } + } + } + + /** + * Returns the current module name. + * + * @return string + */ + public function getModuleName() + { + return $this->name; + } + + /** + * Return the namespace for the current module. + * + * @return string + */ + private function getModuleNamespace() + { + return 'Collejo\App\Modules\\'.$this->getModuleName().'\Http\Controllers'; + } + + /** + * Returns the path to the current module. + * + * @param string $subDir + * + * @throws \ReflectionException + * + * @return bool|string + */ + private function getModuleDirectory($subDir = '') + { + $className = get_class($this); + $reflector = new ReflectionClass($className); + + $file = $reflector->getFileName(); + $directory = dirname($file); + + return realpath($directory.'/../'.$subDir); + } + + /** + * Returns an array of permissions for the current module. + * + * @return array + */ + public function getPermissions() + { + return []; + } + + /** + * Returns a list of gates for the current module. + * + * @return array + */ + public function getGates() + { + return []; + } + + public function __construct($app) + { + parent::__construct($app); + + $this->name = basename($this->getModuleDirectory()); + } +} diff --git a/Foundation/Modules/Module.php b/Foundation/Modules/Module.php new file mode 100644 index 0000000..9d6d3e3 --- /dev/null +++ b/Foundation/Modules/Module.php @@ -0,0 +1,57 @@ +getModulePaths() as $path) { + if (file_exists($path)) { + foreach (listDir($path) as $dir) { + if (is_dir($path.'/'.$dir)) { + $this->registerModule($dir); + } + } + } + } + } + + /** + * Registers a module using the provider. + * + * @param $dir + * + * @throws \Exception + */ + private function registerModule($dir) + { + $provider = 'Collejo\App\Modules\\'.$dir.'\Providers\\'.$dir.'ModuleServiceProvider'; + + if (!class_exists($provider)) { + throw new \Exception($dir.'ModuleServiceProvider not found in module '.$dir); + } + + app()->register($provider); + } + + public function __construct($app) + { + $this->app = $app; + } +} diff --git a/Foundation/Presenter/BasePresenter.php b/Foundation/Presenter/BasePresenter.php new file mode 100644 index 0000000..0c85b99 --- /dev/null +++ b/Foundation/Presenter/BasePresenter.php @@ -0,0 +1,43 @@ +appends; + } + + public function getHiddenKeys() + { + return $this->hidden; + } + + public function getLoadKeys() + { + return array_map(function ($key) { + return Str::camel($key); + }, array_keys($this->load)); + } + + public function getLoadPresenter($key) + { + return $this->load[Str::snake($key)]; + } + + public function getDecorators() + { + return $this->decorate; + } +} diff --git a/Foundation/Presenter/CollectionPresenter.php b/Foundation/Presenter/CollectionPresenter.php new file mode 100644 index 0000000..ec1642b --- /dev/null +++ b/Foundation/Presenter/CollectionPresenter.php @@ -0,0 +1,43 @@ +presenter(); + + return $this->collection->map(function ($item) use ($presenter) { + $presented = $item->setHidden($presenter->getHiddenKeys())->append($presenter->getAppendedKeys())->toArray(); + + foreach ($presenter->getLoadKeys() as $loadKey) { + $modelPresenter = new ModelPresenter($item->$loadKey, $presenter->getLoadPresenter($loadKey)); + + $presented[Str::snake($loadKey)] = $modelPresenter->present(); + } + + foreach ($presenter->getDecorators() as $decoratedKey => $decoratorClass) { + $decorator = new $decoratorClass(); + + $presented[$decoratedKey] = $decorator->decorated($presented[$decoratedKey]); + } + + return $presented; + }); + } + + public function __construct(Collection $collection, $presenter) + { + $this->collection = $collection; + + $this->presenter = $presenter; + } +} diff --git a/Foundation/Presenter/ModelDecorator.php b/Foundation/Presenter/ModelDecorator.php new file mode 100644 index 0000000..7c6064f --- /dev/null +++ b/Foundation/Presenter/ModelDecorator.php @@ -0,0 +1,38 @@ +modelReference; + } + + public function decorated($presented) + { + foreach ($this->getDecorators() as $decoratedKey => $decorate) { + $decoratedModel = $decorate[0]; + $presenterClass = $decorate[1]; + $alias = $decorate[2]; + + $decoratedModel = new $decoratedModel(); + $decoratedModel = $decoratedModel::find($presented[$decoratedKey]); + + if ($decoratedModel && $presenterClass) { + $presentable = present($decoratedModel, $presenterClass); + } + + if ($alias) { + $presented[$alias] = $presentable; + unset($presented[$decoratedKey]); + } else { + $presented[$decoratedKey] = $presentable; + } + } + + return $presented; + } +} diff --git a/Foundation/Presenter/ModelPresenter.php b/Foundation/Presenter/ModelPresenter.php new file mode 100644 index 0000000..92e2e31 --- /dev/null +++ b/Foundation/Presenter/ModelPresenter.php @@ -0,0 +1,43 @@ +presenter(); + + $presentedModel = $this->model->loadMissing($presenter->getLoadKeys()) + ->setHidden($presenter->getHiddenKeys()) + ->append($presenter->getAppendedKeys()); + + $presented = $presentedModel->toArray(); + + foreach ($presenter->getLoadKeys() as $loadKey) { + $loadedKeyModel = $presentedModel->$loadKey; + + if ($loadedKeyModel) { + $modelPresenter = new self($loadedKeyModel, $presenter->getLoadPresenter($loadKey)); + + $presented[Str::snake($loadKey)] = $modelPresenter->present(); + } + } + + return (object) $presented; + } + + public function __construct(Model $model, $presenter) + { + $this->model = $model; + + $this->presenter = $presenter; + } +} diff --git a/Foundation/Presenter/PaginatedPresenter.php b/Foundation/Presenter/PaginatedPresenter.php new file mode 100644 index 0000000..6c0b451 --- /dev/null +++ b/Foundation/Presenter/PaginatedPresenter.php @@ -0,0 +1,28 @@ +paginator->getCollection(), $this->presenter); + + $this->paginator->setCollection($collectionPresenter->present()); + + return $this->paginator; + } + + public function __construct(LengthAwarePaginator $paginator, $presenter) + { + $this->paginator = $paginator; + + $this->presenter = $presenter; + } +} diff --git a/Foundation/Presenter/Presented.php b/Foundation/Presenter/Presented.php new file mode 100644 index 0000000..49edd28 --- /dev/null +++ b/Foundation/Presenter/Presented.php @@ -0,0 +1,70 @@ +collection->jsonSerialize(); + } + + public function toJson($options = 0) + { + return $this->collection->toJson($options); + } + + public function getIterator() + { + return $this->collection->getIterator(); + } + + public function count() + { + return $this->collection->count(); + } + + public function toArray() + { + return $this->collection->toArray(); + } + + public function __get($key) + { + return $this->collection->get($key); + } + + public function __construct($collection) + { + $this->collection = collect($collection); + } + + public function offsetExists($key) + { + return $this->collection->offsetExists($key); + } + + public function offsetGet($key) + { + return $this->collection->offsetGet($key); + } + + public function offsetSet($key, $value) + { + return $this->collection->offsetSet($key, $value); + } + + public function offsetUnset($key) + { + return $this->collection->offsetUnset($key); + } +} diff --git a/Foundation/Repository/BaseRepository.php b/Foundation/Repository/BaseRepository.php new file mode 100644 index 0000000..d450ff6 --- /dev/null +++ b/Foundation/Repository/BaseRepository.php @@ -0,0 +1,114 @@ +buildQuery(); + } else { + $criteria = new $criteria(); + $criteria = $criteria->select('*'); + } + + return new CacheableResult($criteria); + } + + /** + * Returns an array of fillable fields for the given model class. + * + * @param array $attributes + * @param $class + * + * @return array + */ + public function parseFillable(array $attributes, $class) + { + $model = new $class(); + + return array_intersect_key($attributes, array_flip($model->getFillable())); + } + + /** + * Generates a new UUID string. + * + * @return string + */ + public function newUuid() + { + return (string) Uuid::generate(4); + } + + /** + * Creates pivot ids for the pivot table. + * + * @param $ids + * + * @return array + */ + public function createPivotIds($ids) + { + $collection = collect($ids); + + $collection = $collection->map(function () { + return $this->includePivotMetaData(); + }); + + return array_combine($ids, $collection->all()); + } + + /** + * Include extra meta data for the pivot row. + * + * @param array $attributes + * + * @return array + */ + public function includePivotMetaData(array $attributes = []) + { + if (!isset($attributes['id'])) { + $attributes['id'] = $this->newUuid(); + } + + if (!isset($attributes['created_at'])) { + $attributes['created_at'] = Carbon::now(); + } + + if (!isset($attributes['created_by']) && Auth::user()) { + $attributes['created_by'] = Auth::user()->id; + } + + return $attributes; + } + + /** + * Boot up repository. + */ + public function boot() + { + $this->sessionOwner = Auth::user(); + } + + public function __construct() + { + $this->boot(); + } +} diff --git a/Foundation/Repository/CacheableResult.php b/Foundation/Repository/CacheableResult.php new file mode 100644 index 0000000..3d2af1d --- /dev/null +++ b/Foundation/Repository/CacheableResult.php @@ -0,0 +1,149 @@ +columns = $columns; + + return $this->getResult($columns); + } + + /** + * Paginate result. + * + * @param int $perPage + * @param array $columns + * @param string $pageName + * @param null $page + * + * @return LengthAwarePaginator + */ + public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null) + { + $this->columns = $columns; + + $page = $page ?: Paginator::resolveCurrentPage($pageName); + + $perPage = $perPage ?: config('collejo.pagination.perpage'); + + $query = $this->builder->toBase(); + + $key = 'criteria:'.get_class($this->builder->getModel()).':'.$this->getQueryHash().':count'; + + $total = Cache::remember($key, config('collejo.pagination.perpage'), function () use ($key, $query) { + return $query->getCountForPagination(); + }); + + $results = new Collection(); + + if ($total) { + $this->builder->forPage($page, $perPage); + $results = $this->getResult(); + } + + return new LengthAwarePaginator($results, $total, $perPage, $page, [ + 'path' => Paginator::resolveCurrentPath(), + 'pageName' => $pageName, + ]); + } + + /** + * Return relationships. + * + * @return $this + */ + public function with() + { + $this->builder->with(func_get_args()); + + return $this; + } + + /** + * Order the records. + * + * @param $column + * @param string $direction + * + * @return $this + */ + public function orderBy($column, $direction = 'asc') + { + $this->builder->orderBy($column, $direction); + + return $this; + } + + /** + * Return deletes entities. + * + * @return $this + */ + public function withTrashed() + { + $this->builder->withTrashed(func_get_args()); + + return $this; + } + + /** + * Count entities. + * + * @return int + */ + public function count() + { + return $this->builder->count(); + } + + /** + * Return the result for the query and cache it. + * + * @return mixed + */ + private function getResult() + { + $key = 'criteria:'.get_class($this->builder->getModel()).':'.$this->getQueryHash().':result'; + + $builder = $this->builder; + + return Cache::remember($key, config('collejo.tweaks.criteria_cache_ttl'), function () use ($builder) { + return $this->builder->get(); + }); + } + + /** + * Generates a hash for the current query. + * + * @return string + */ + private function getQueryHash() + { + return md5($this->builder->toSql().'|'.implode(',', $this->columns)); + } + + public function __construct(Builder $builder) + { + $this->builder = $builder; + } +} diff --git a/Foundation/Repository/Tests/RepositoryTest.php b/Foundation/Repository/Tests/RepositoryTest.php new file mode 100644 index 0000000..c2cbc23 --- /dev/null +++ b/Foundation/Repository/Tests/RepositoryTest.php @@ -0,0 +1,36 @@ +getRepository()->newUuid(); + + $this->assertTrue(is_string($uuid)); + $this->assertEquals(strlen((string) $uuid), 36); + $this->assertTrue(Uuid::validate((string) $uuid)); + } + + /** + * Returns a new instance of the TestableRepository. + * + * @return TestableRepository + */ + private function getRepository() + { + return new TestableRepository(); + } +} + +class TestableRepository extends BaseRepository +{ +} diff --git a/src/Support/Facades/Menu.php b/Foundation/Support/Facades/Menus.php similarity index 68% rename from src/Support/Facades/Menu.php rename to Foundation/Support/Facades/Menus.php index c01e133..893a8a5 100644 --- a/src/Support/Facades/Menu.php +++ b/Foundation/Support/Facades/Menus.php @@ -1,13 +1,10 @@ getAppPath().'/bootstrap/app.php'; + + $app->make(Kernel::class)->bootstrap(); + + Hash::driver('bcrypt')->setRounds(4); + + return $app; + } + + /** + * Search for the bootstrap folder in reverse. + * + * @return string + */ + private function getAppPath() + { + $path = '/..'; + + while (true) { + $files = listDir(__DIR__.$path); + + if (in_array('bootstrap', $files)) { + return __DIR__.$path; + } + + $path = $path.'/..'; + } + } +} diff --git a/Foundation/Testing/CreatesUsers.php b/Foundation/Testing/CreatesUsers.php new file mode 100644 index 0000000..b970829 --- /dev/null +++ b/Foundation/Testing/CreatesUsers.php @@ -0,0 +1,35 @@ +userRepository->createAdminUser('test', 'test@test.com', '123'); + + $permission = $this->userRepository->createPermissionIfNotExists($ability); + + $role = $this->userRepository->getRoleByName('admin'); + + $this->userRepository->addPermissionToRole($role, $permission); + + $this->userRepository->addRoleToUser($admin, $role); + + return $admin; + } + + public function setup() + { + parent::setup(); + + $this->userRepository = $this->app->make(UserRepository::class); + } +} diff --git a/Foundation/Testing/DuskTestCase.php b/Foundation/Testing/DuskTestCase.php new file mode 100644 index 0000000..13f7bd6 --- /dev/null +++ b/Foundation/Testing/DuskTestCase.php @@ -0,0 +1,59 @@ +addArguments([ + '--disable-gpu', + '--headless', + ]); + + return RemoteWebDriver::create( + 'http://localhost:9515', DesiredCapabilities::chrome()->setCapability( + ChromeOptions::CAPABILITY, $options + ) + ); + } + + /** + * Setup. + */ + public function setup() + { + parent::setup(); + + $this->loadFactories(); + + $this->runDatabaseMigrations(); + } +} diff --git a/Foundation/Testing/TestCase.php b/Foundation/Testing/TestCase.php new file mode 100644 index 0000000..1e6004b --- /dev/null +++ b/Foundation/Testing/TestCase.php @@ -0,0 +1,71 @@ +toArray() : $a; + $b = !is_array($b) ? $b->toArray() : $b; + + $a = array_values($a); + $b = array_values($b); + + return $this->assertTrue($a == $b); + } + + /** + * Assert if array key and values are equal. + * + * @param $a + * @param $b + */ + public function assertArrayValuesEquals($a, $b) + { + $a = !is_array($a) ? $a->toArray() : $a; + $b = !is_array($b) ? $b->toArray() : $b; + + if (isset($a['id'])) { + unset($a['id']); + } + + if (isset($b['id'])) { + unset($b['id']); + } + + foreach ($b as $k => $v) { + if (isset($a[$k])) { + if ($v != $a[$k]) { + return $this->assertTrue(false); + } + } + } + + return $this->assertTrue(true); + } + + /** + * Setup. + */ + public function setup() + { + parent::setup(); + + $this->loadFactories(); + + $this->runDatabaseMigrations(); + } +} diff --git a/Foundation/helpers.php b/Foundation/helpers.php new file mode 100644 index 0000000..67cda24 --- /dev/null +++ b/Foundation/helpers.php @@ -0,0 +1,77 @@ +present(); + } +} + +/* + * Converts a user timestamp to UTC to be stored on db. + */ +if (!function_exists('toUTC')) { + function toUTC($time) + { + return Carbon::parse($time, Cookie::get('collejo_tz', 'UTC'))->setTimezone('UTC'); + } +} + +/* + * Converts a UTC time to user tz + */ +if (!function_exists('dateToUserTz')) { + function dateToUserTz($time) + { + return Carbon::parse($time, 'UTC')->setTimezone(Cookie::get('collejo_tz', 'UTC')); + } +} + +/* + * Converts a carbon date to date string + */ +if (!function_exists('dateFormat')) { + function dateFormat(Carbon $time) + { + return $time->toDateString(); + } +} + +/* + * Converts a carbon date to time string + */ +if (!function_exists('formatTime')) { + function formatTime(Carbon $time) + { + return $time->format('H:i'); + } +} + +/* + * List files and folders in a given directory + * Hidden files are not included + * + * @param $path + * @return array + */ +if (!function_exists('listDir')) { + function listDir($path) + { + return array_filter(scandir($path), function ($item) { + return !in_array($item, ['.', '..']) && substr($item, 0, 1) != '.'; + }); + } +} diff --git a/LICENSE b/LICENSE index 6bcd66d..6a136f8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2016 Anuradha Jayathilaka +Copyright (c) 2018 Anuradha Jayathilaka Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/composer.json b/composer.json deleted file mode 100644 index 9edb247..0000000 --- a/composer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "codebreez/collejo-app", - "authors": [{ - "name": "Anuradha Jayathilaka", - "email": "astroanu2004@gmail.com" - }], - "license": "MIT", - "require": { - "php": ">=5.5.9", - "laravel/framework": "5.2.*", - "webpatser/laravel-uuid": "^2.0", - "hieu-le/active": "^3.1", - "intervention/image": "^2.3", - "itsgoingd/clockwork": "^1.12", - "predis/predis": "^1.1" - }, - "require-dev": { - "fzaninotto/faker": "~1.4", - "mockery/mockery": "0.9.*", - "phpunit/phpunit": "~4.0", - "symfony/css-selector": "2.8.*|3.0.*", - "symfony/dom-crawler": "2.8.*|3.0.*" - }, - "autoload": { - "psr-4": { - "Collejo\\App\\": "src/" - }, - "files": [ - "src/helpers/helpers.php" - ] - }, - "minimum-stability": "stable" -} \ No newline at end of file diff --git a/readme.md b/readme.md index 7e9263c..8aa102d 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,12 @@ -# Collejo App -[![Dependency Status](https://img.shields.io/versioneye/d/user/projects/57d94da4430747003e14a509.svg)](https://www.versioneye.com/user/projects/57d94da4430747003e14a509?child=summary) +

+ Collejo +

Collejo

+

+[![Build status](https://badge.buildkite.com/26b90f7b0554d44e3864c8edc182ba7fb731b5f51219719483.svg)](https://buildkite.com/codebreez/collejo) +[![Coverage Status](https://coveralls.io/repos/github/astroanu/collejo-workbench/badge.svg?branch=L55)](https://coveralls.io/github/astroanu/collejo-workbench?branch=L55) +[![Dependency Status](https://dependencyci.com/github/astroanu/collejo-workbench/badge)](https://dependencyci.com/github/astroanu/collejo-workbench) +[![StyleCI](https://styleci.io/repos/62229679/shield?branch=L55)](https://styleci.io/repos/62229679) +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/5a21eb11785e48d0aee8234b82b12275)](https://www.codacy.com/app/astroanu/collejo-app?utm_source=github.com&utm_medium=referral&utm_content=CodeBreez/collejo-app&utm_campaign=Badge_Grade) +[![Laravel Version](https://img.shields.io/badge/Laravel-5.6.*-brightgreen.svg?maxAge=600)]() diff --git a/src/.gitignore b/src/.gitignore deleted file mode 100644 index 7ca7052..0000000 --- a/src/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/vendor/ -/node_modules/ diff --git a/src/Console/Commands/AdminPermissions.php b/src/Console/Commands/AdminPermissions.php deleted file mode 100644 index 927f4c4..0000000 --- a/src/Console/Commands/AdminPermissions.php +++ /dev/null @@ -1,58 +0,0 @@ -option('module'); - - if (is_null($module)) { - foreach (Module::all() as $module) { - $this->processModule($app, $module); - } - } else { - if (($module = Module::find($module))) { - $this->processModule($app, $module); - } else { - $this->error('specified module not found'); - } - } - } - - private function processModule($app, $module) - { - $provider = $module->provider; - - $provider = new $provider($app); - - $provider->createPermissions(); - - $this->info('Processing ' . $module->name); - } -} diff --git a/src/Console/Commands/AssetCopy.php b/src/Console/Commands/AssetCopy.php deleted file mode 100644 index 4f57a05..0000000 --- a/src/Console/Commands/AssetCopy.php +++ /dev/null @@ -1,131 +0,0 @@ -info('Copying core assets'); - - $srcDir = realpath(__DIR__ . '/../../resources/assets/'); - - $assetLocations = [ - ['js', true], - ['css', true], - ['fonts', false], - ['images', true] - ]; - - $publicDir = base_path('public'); - - $manifest = []; - - if (!file_exists(base_path('public/build'))) { - mkdir(base_path('public/build'), 0755, true); - } - - foreach ($assetLocations as $location) { - - $dir = $location[0]; - $versioned = $location[1]; - - $assetDir = $publicDir . '/' . $dir . '/'; - $buildDir = $publicDir . '/build/' . $dir . '/'; - - if (!file_exists($assetDir)) { - mkdir($assetDir, 0755, true); - } - - if (!file_exists($buildDir)) { - mkdir($buildDir, 0755, true); - } - - array_map('unlink', glob($assetDir . '/*')); - array_map('unlink', glob($buildDir . '/*')); - - foreach (new DirectoryIterator($srcDir . '/' . $dir) as $fileInfo) { - if($fileInfo->isDot()) continue; - - $regularFilePath = '/' . $dir . '/' . $fileInfo->getFilename(); - - if ($versioned) { - - $versionedName = md5($fileInfo->getFilename() . microtime(true)) . '-' . $fileInfo->getFilename(); - - $manifest[$regularFilePath] = $dir . '/' . $versionedName; - - } else { - $versionedName = $fileInfo->getFilename(); - } - - copy($srcDir . '/' . $dir . '/' . $fileInfo->getFilename(), $assetDir . $fileInfo->getFilename()); - copy($srcDir . '/' . $dir . '/' . $fileInfo->getFilename(), $buildDir . $versionedName); - } - } - - if (($theme = Theme::current())) { - $srcFiles = $theme->getStyles()->map(function($style) use ($theme) { - return base_path('themes/' . $theme->name) . '/css/' . $style; - }); - - $assetDir = base_path('public/theme/css/'); - $buildDir = base_path('public/build/theme/css/'); - - if (!file_exists($assetDir)) { - mkdir($assetDir, 0755, true); - } - - if (!file_exists($buildDir)) { - mkdir($buildDir, 0755, true); - } - - array_map('unlink', glob($assetDir . '/*')); - array_map('unlink', glob($buildDir . '/*')); - - foreach ($theme->getStyles() as $file) { - - $versionedName = md5($file . microtime(true)) . '-' . $file; - $regularFilePath = '/theme/css/' . $file; - - $manifest[$regularFilePath] = 'theme/css/' . $versionedName; - - copy(base_path('themes/' . $theme->name) . '/css/' . $file, $assetDir . $file); - copy(base_path('themes/' . $theme->name) . '/build/css/' . $file, $buildDir . $versionedName); - } - } - - $fn = fopen(base_path('public/build/rev-manifest.json'), 'w'); - - fwrite($fn, json_encode($manifest, JSON_PRETTY_PRINT)); - - fclose($fn); - - $this->info('Finished in ' . round(microtime(true) - $startTime, 3) * 1000); - } -} diff --git a/src/Console/Commands/ConfigCache.php b/src/Console/Commands/ConfigCache.php deleted file mode 100644 index 5f79519..0000000 --- a/src/Console/Commands/ConfigCache.php +++ /dev/null @@ -1,24 +0,0 @@ -laravel->bootstrapPath().'/app.php'; - - $app->make('Collejo\App\Contracts\Console\Kernel')->bootstrap(); - - return $app['config']->all(); - } -} diff --git a/src/Console/Commands/ImageResize.php b/src/Console/Commands/ImageResize.php deleted file mode 100644 index 8c681eb..0000000 --- a/src/Console/Commands/ImageResize.php +++ /dev/null @@ -1,85 +0,0 @@ - $config) { - - if (isset($config['resize'])) { - - $disk = Storage::disk($config['disk']); - - $this->info('Processing ' . $bucket); - - foreach (Media::where('bucket', $bucket)->get() as $image) { - - $srcFile = $config['path'] . '/original/' . $image->fileName; - - $this->info('Source File ' . $srcFile); - - try { - - if (!$disk->has($srcFile)) { - throw new Exception('File not found on source directory'); - } - - foreach ($config['resize'] as $name => $size) { - - $temp = tempnam(storage_path('tmp'), 'tmp'); - - $file = $disk->get($srcFile); - - Image::make($file)->fit($size[0], $size[1])->save($temp); - - $destName = $config['path'] . '/' . $name . '/' . $image->fileName; - - $disk->put($destName, File::get($temp)); - - unlink($temp); - - $this->info(str_pad($name, 10) . ' >> ' . $destName); - - } - - } catch (Exception $e) { - - $this->error('Failed to process image. ERR:' . $e->getMessage()); - } - - } - - } - - } - } -} diff --git a/src/Console/Commands/MigrateCopy.php b/src/Console/Commands/MigrateCopy.php deleted file mode 100644 index b43a0dc..0000000 --- a/src/Console/Commands/MigrateCopy.php +++ /dev/null @@ -1,50 +0,0 @@ -info('Copying core migrations'); - - $src = realpath(__DIR__ . '/../../migrations'); - $dest = base_path('database/migrations'); - - if (!file_exists($dest)) { - mkdir($dest); - } - - array_map('unlink', glob($dest . '/*')); - - foreach (new DirectoryIterator($src) as $fileInfo) { - if($fileInfo->isDot()) continue; - - copy($src . '/' . $fileInfo->getFilename(), $dest . '/' . $fileInfo->getFilename()); - } - - return $this->call('migrate'); - } -} diff --git a/src/Console/Commands/ModuleList.php b/src/Console/Commands/ModuleList.php deleted file mode 100644 index 1cda117..0000000 --- a/src/Console/Commands/ModuleList.php +++ /dev/null @@ -1,34 +0,0 @@ -table(['Identifier', 'Display Name', 'Provider', 'Path'], Module::all()->toArray()); - } -} diff --git a/src/Console/Commands/PermissionList.php b/src/Console/Commands/PermissionList.php deleted file mode 100644 index 0f60023..0000000 --- a/src/Console/Commands/PermissionList.php +++ /dev/null @@ -1,44 +0,0 @@ -make(UserRepository::class); - - $module = $this->option('module'); - - $userRepository = $userRepository->getPermissions(); - - if (!is_null($module)) { - $userRepository = $userRepository->where('module', $module); - } - - $this->table(['Module', 'Permission'], $userRepository->orderBy('permission')->get(['module', 'permission'])); - } -} diff --git a/src/Console/Commands/RouteCache.php b/src/Console/Commands/RouteCache.php deleted file mode 100644 index ad64fdf..0000000 --- a/src/Console/Commands/RouteCache.php +++ /dev/null @@ -1,25 +0,0 @@ -laravel->bootstrapPath().'/app.php'; - - $app->make('Collejo\App\Contracts\Console\Kernel')->bootstrap(); - - return $app['router']->getRoutes(); - } -} diff --git a/src/Console/Commands/ThemeList.php b/src/Console/Commands/ThemeList.php deleted file mode 100644 index 0ceff38..0000000 --- a/src/Console/Commands/ThemeList.php +++ /dev/null @@ -1,34 +0,0 @@ -table(['Name', 'Override Default'], Theme::all()->toArray()); - } -} diff --git a/src/Console/Commands/WidgetList.php b/src/Console/Commands/WidgetList.php deleted file mode 100644 index 6e7ccac..0000000 --- a/src/Console/Commands/WidgetList.php +++ /dev/null @@ -1,34 +0,0 @@ -table(['Location', 'Permissions', 'View'], Widget::all()->toArray()); - } -} diff --git a/src/Console/Kernel.php b/src/Console/Kernel.php deleted file mode 100644 index ffd5afb..0000000 --- a/src/Console/Kernel.php +++ /dev/null @@ -1,40 +0,0 @@ -map(function(){ - return ['id' => (string) Uuid::generate(4)]; - }); - - return array_combine(array_values($collection->toArray()), $ids->all()); - } - - public function __construct(\Faker\Generator $faker) - { - $this->faker = $faker; - } -} \ No newline at end of file diff --git a/src/Database/TestConnector.php b/src/Database/TestConnector.php deleted file mode 100644 index 6a7f0da..0000000 --- a/src/Database/TestConnector.php +++ /dev/null @@ -1,46 +0,0 @@ -database = $database; - - $driver = isset($options['driver']) ? $options['driver'] : Config::get("database.default"); - - $default = Config::get("database.connections.$driver"); - - foreach($default as $item => $value) { - $default[$item] = isset($options['db_' . $item]) ? $options['db_' . $item] : $default[$item]; - } - - Config::set("database.connections.$database", $default); - - $this->connection = DB::connection($database); - } - - public function isWorking() - { - return $this->getConnection()->select('SHOW TABLES'); - } - - public function getConnection() - { - return $this->connection; - } - - public function getTable($table = null) - { - return $this->getConnection()->table($table); - } -} diff --git a/src/Events/CriteriaDataChanged.php b/src/Events/CriteriaDataChanged.php deleted file mode 100644 index dca191c..0000000 --- a/src/Events/CriteriaDataChanged.php +++ /dev/null @@ -1,35 +0,0 @@ -model = $model; - } - - /** - * Get the channels the event should be broadcast on. - * - * @return array - */ - public function broadcastOn() - { - return []; - } -} \ No newline at end of file diff --git a/src/Events/UserPermissionsChanged.php b/src/Events/UserPermissionsChanged.php deleted file mode 100644 index 0224871..0000000 --- a/src/Events/UserPermissionsChanged.php +++ /dev/null @@ -1,35 +0,0 @@ -user = $user; - } - - /** - * Get the channels the event should be broadcast on. - * - * @return array - */ - public function broadcastOn() - { - return []; - } -} \ No newline at end of file diff --git a/src/Exceptions/Handler.php b/src/Exceptions/Handler.php deleted file mode 100644 index 2258129..0000000 --- a/src/Exceptions/Handler.php +++ /dev/null @@ -1,90 +0,0 @@ -ajax()) { - - return response()->json([ - 'success' => false, - 'data' => [] , - 'message' => trans('common.authorization_failed') - ], 403); - - } else { - - return response()->make(view('collejo::errors.403'), 403); - } - } - - if ($e instanceOf HttpException) { - - return response()->make(view('collejo::errors.404'), 404); - } - - if ($e instanceOf ModelNotFoundException) { - - return response()->make(view('collejo::errors.400'), 400); - } - - if ($e instanceOf TokenMismatchException) { - - return response()->json([ - 'success' => false, - 'data' => ['redir' => Session::get('url.intended', route('auth.login'))] , - 'message' => trans('common.ajax_token_mismatch') - ], 401); - } - - return parent::render($request, $e); - } -} diff --git a/src/Foundation/Application.php b/src/Foundation/Application.php deleted file mode 100644 index 3446d43..0000000 --- a/src/Foundation/Application.php +++ /dev/null @@ -1,151 +0,0 @@ -getFileName()); - - return realpath($pathinfo['dirname'] . '/../resources/lang'); - } - - public function boot() - { - $this->registerIlluminateProviders(); - $this->registerCollejoProviders(); - $this->registerAliases(); - - parent::boot(); - } - - private function registerAliases() - { - $aliases = [ - 'App' => 'Illuminate\Support\Facades\App', - 'Artisan' => 'Illuminate\Support\Facades\Artisan', - 'Auth' => 'Illuminate\Support\Facades\Auth', - 'Blade' => 'Illuminate\Support\Facades\Blade', - 'Cache' => 'Illuminate\Support\Facades\Cache', - 'Config' => 'Illuminate\Support\Facades\Config', - 'Cookie' => 'Illuminate\Support\Facades\Cookie', - 'Crypt' => 'Illuminate\Support\Facades\Crypt', - 'DB' => 'Illuminate\Support\Facades\DB', - 'Eloquent' => 'Collejo\App\Database\Eloquent\Model', - 'Event' => 'Illuminate\Support\Facades\Event', - 'File' => 'Illuminate\Support\Facades\File', - 'Gate' => 'Illuminate\Support\Facades\Gate', - 'Hash' => 'Illuminate\Support\Facades\Hash', - 'Lang' => 'Illuminate\Support\Facades\Lang', - 'Log' => 'Illuminate\Support\Facades\Log', - 'Mail' => 'Illuminate\Support\Facades\Mail', - 'Password' => 'Illuminate\Support\Facades\Password', - 'Queue' => 'Illuminate\Support\Facades\Queue', - 'Redirect' => 'Illuminate\Support\Facades\Redirect', - 'Redis' => 'Illuminate\Support\Facades\Redis', - 'Request' => 'Illuminate\Support\Facades\Request', - 'Response' => 'Illuminate\Support\Facades\Response', - 'Route' => 'Illuminate\Support\Facades\Route', - 'Schema' => 'Illuminate\Support\Facades\Schema', - 'Session' => 'Illuminate\Support\Facades\Session', - 'Storage' => 'Illuminate\Support\Facades\Storage', - 'URL' => 'Illuminate\Support\Facades\URL', - 'Validator' => 'Illuminate\Support\Facades\Validator', - 'View' => 'Illuminate\Support\Facades\View', - - 'Module' => 'Collejo\App\Support\Facades\Module', - 'Widget' => 'Collejo\App\Support\Facades\Widget', - 'Theme' => 'Collejo\App\Support\Facades\Theme', - 'Menu' => 'Collejo\App\Support\Facades\Menu', - 'Asset' => 'Collejo\App\Foundation\Theme\Asset', - 'Uploader' => 'Collejo\App\Foundation\Media\Uploader', - - 'Uuid' => 'Webpatser\Uuid\Uuid', - 'Carbon' => 'Carbon\Carbon', - 'Active' => 'HieuLe\Active\Facades\Active', - 'Image' => 'Intervention\Image\Facades\Image' - ]; - - $loader = AliasLoader::getInstance(); - - foreach ($aliases as $key => $alias) { - $loader->alias($key, $alias); - } - } - - private function registerCollejoProviders() - { - $providers = [ - 'Collejo\App\Providers\AppServiceProvider', - 'Collejo\App\Providers\AuthServiceProvider', - 'Collejo\App\Providers\EventServiceProvider', - 'Collejo\App\Providers\RouteServiceProvider', - 'Collejo\App\Providers\ModuleServiceProvider', - 'Collejo\App\Providers\ThemeServiceProvider', - 'Collejo\App\Providers\MediaServiceProvider', - 'Collejo\App\Providers\WidgetServiceProvider', - 'Clockwork\Support\Laravel\ClockworkServiceProvider', - 'HieuLe\Active\ActiveServiceProvider', - 'Intervention\Image\ImageServiceProvider' - ]; - - foreach ($providers as $provider) { - $this->register($provider); - } - } - - private function registerIlluminateProviders() - { - $providers = [ - 'Illuminate\Auth\AuthServiceProvider', - 'Illuminate\Broadcasting\BroadcastServiceProvider', - 'Illuminate\Bus\BusServiceProvider', - 'Illuminate\Cache\CacheServiceProvider', - 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', - 'Illuminate\Cookie\CookieServiceProvider', - 'Illuminate\Database\DatabaseServiceProvider', - 'Illuminate\Encryption\EncryptionServiceProvider', - 'Illuminate\Filesystem\FilesystemServiceProvider', - 'Illuminate\Foundation\Providers\FoundationServiceProvider', - 'Illuminate\Hashing\HashServiceProvider', - 'Illuminate\Mail\MailServiceProvider', - 'Illuminate\Pagination\PaginationServiceProvider', - 'Illuminate\Pipeline\PipelineServiceProvider', - 'Illuminate\Queue\QueueServiceProvider', - 'Illuminate\Redis\RedisServiceProvider', - 'Illuminate\Auth\Passwords\PasswordResetServiceProvider', - 'Illuminate\Session\SessionServiceProvider', - 'Illuminate\Translation\TranslationServiceProvider', - 'Illuminate\Validation\ValidationServiceProvider', - 'Illuminate\View\ViewServiceProvider' - ]; - - foreach ($providers as $provider) { - $this->register($provider); - } - } -} \ No newline at end of file diff --git a/src/Foundation/Auth/AuthenticatesAndRegistersUsers.php b/src/Foundation/Auth/AuthenticatesAndRegistersUsers.php deleted file mode 100644 index ebc9318..0000000 --- a/src/Foundation/Auth/AuthenticatesAndRegistersUsers.php +++ /dev/null @@ -1,10 +0,0 @@ -config = $config; - } - - public function __call($method, $args) - { - if (isset($this->config[camel_case($method)])) { - return $this->config[camel_case($method)]; - } - } -} \ No newline at end of file diff --git a/src/Foundation/Media/Uploader.php b/src/Foundation/Media/Uploader.php deleted file mode 100644 index 3172180..0000000 --- a/src/Foundation/Media/Uploader.php +++ /dev/null @@ -1,86 +0,0 @@ - str_random(), - 'model' => $model, - 'relationship' => $relationship, - 'fieldName' => $fieldName, - 'bucketName' => $bucketName, - 'maxFiles' => $maxFiles - ])->render(); - } - - public static function upload(UploadedFile $file, $bucketName) - { - if (!$file->isValid()) { - throw new \Exception(trans('validation.invalid_file')); - } - - $bucket = Bucket::find($bucketName); - - if (!empty($bucket->mimeTypes()) && !in_array($file->getMimeType(), $bucket->mimeTypes())) { - throw new \Exception(trans('validation.invalid_file_type')); - } - - if (!empty($bucket->maxSize()) && !in_array($file->getClientSize(), $bucket->maxSize())) { - throw new \Exception(trans('validation.invalid_file_size')); - } - - $disk = Storage::disk($bucket->disk()); - - $media = Media::create([ - 'mime' => $file->getMimeType(), - 'bucket' => $bucketName, - 'ext' => $file->guessExtension() - ]); - - $disk->put($bucket->path() . '/original/' . $media->fileName, File::get($file)); - - if (is_array($bucket->resize())) { - foreach ($bucket->resize() as $name => $size) { - $temp = tempnam(storage_path('tmp'), 'tmp'); - - Image::make(File::get($file))->fit($size[0], $size[1])->save($temp); - - $disk->put($bucket->path() . '/' . $name . '/' . $media->fileName, File::get($temp)); - - unlink($temp); - } - } - - return $media; - } - - public static function getMedia($id, $bucketName, $size) - { - $media = Media::where(['id' => $id, 'bucket' => $bucketName])->first(); - - if (is_null($media)) { - return abort(404); - } - - $bucket = Bucket::find($bucketName); - $disk = Storage::disk($bucket->disk()); - - if ($disk->exists($bucket->path() . '/' . $size . '/' . $media->fileName)) { - return response($disk->get($bucket->path() . '/' . $size . '/' . $media->fileName))->header('Content-type', $media->mime); - } - - abort(404); - } -} \ No newline at end of file diff --git a/src/Foundation/Module/Module.php b/src/Foundation/Module/Module.php deleted file mode 100644 index 0458292..0000000 --- a/src/Foundation/Module/Module.php +++ /dev/null @@ -1,46 +0,0 @@ -make(UserRepository::class); - - return $userRepository->getPermissionsByModule($this->name); - } - - public function __get($req) - { - if (property_exists($this, $req)) { - - return $this->$req; - - } elseif(method_exists($this, $req)) { - - return $this->$req(); - } - } - - public function toArray() - { - return [ - 'name' => $this->name, - 'displayName' => $this->displayName, - 'provider' => $this->provider, - 'path' => $this->path - ]; - } -} \ No newline at end of file diff --git a/src/Foundation/Module/ModuleCollection.php b/src/Foundation/Module/ModuleCollection.php deleted file mode 100644 index f881d8e..0000000 --- a/src/Foundation/Module/ModuleCollection.php +++ /dev/null @@ -1,49 +0,0 @@ -getModulePaths() as $moduleLocation => $path) { - - if (file_exists($path)) { - - foreach ($this->scandir($path) as $dir) { - $module = $this->registerModule($moduleLocation, $dir, $path . '/' . $dir); - } - - } - } - } - - public function registerModule($moduleLocation, $namespace, $path) - { - $provider = $moduleLocation . '\\' . $namespace . '\Providers\\' . $namespace . 'ModuleServiceProvider'; - - if (!class_exists($provider)) { - return false; - } - - $this->app->register($provider); - - $module = $this->app->make(ModuleInterface::class); - - $module->name = strtolower($namespace); - $module->displayName = $namespace; - $module->provider = $provider; - $module->path = $path . '/' . $namespace; - - Module::add($module); - - return $module; - } - -} \ No newline at end of file diff --git a/src/Foundation/Module/ModuleServiceProvider.php b/src/Foundation/Module/ModuleServiceProvider.php deleted file mode 100644 index d3994ca..0000000 --- a/src/Foundation/Module/ModuleServiceProvider.php +++ /dev/null @@ -1,125 +0,0 @@ -getModuleDirectory('resources/views'); - $langDir = $this->getModuleDirectory('resources/lang'); - $routesFile = $this->getModuleDirectory('Http/routes.php'); - $menusFile = $this->getModuleDirectory('Http/menus.php'); - - if (file_exists($viewsDir)) { - $this->loadViewsFrom($viewsDir, strtolower($this->name)); - } - - if (file_exists($langDir)) { - $this->loadTranslationsFrom($langDir, strtolower($this->name)); - } - - if (file_exists($routesFile)) { - $this->app->router->group([ - 'namespace' => $this->namespace, 'middleware' => 'web', - ], function ($router) use ($routesFile) { - require $routesFile; - }); - } - - if (file_exists($menusFile)) { - require_once $menusFile; - } - - $this->defineAbilities(app()->make(GateContract::class)); - } - - private function defineAbilities(GateContract $gate) - { - foreach ($this->getPermissions() as $permission => $childPermissions) { - - $this->defineAbility($gate, $permission); - - foreach ($childPermissions as $permission) { - $this->defineAbility($gate, $permission); - } - } - } - - private function defineAbility($gate, $permission) - { - $gates = $this->getGates(); - - if (isset($gates[$permission])) { - $closure = $gates[$permission]; - - } else { - $closure = (function($user) use ($permission) { - return $user->hasPermission($permission); - }); - } - - $gate->define($permission, $closure); - } - - public function createPermissions() - { - if (is_array($this->getPermissions()) && $this->app->isInstalled()) { - - $userRepository = $this->app->make(userRepository::class); - - $adminRole = $userRepository->getRoleByName('admin'); - - foreach ($this->getPermissions() as $permission => $childPermissions) { - - $permission = $userRepository->createPermissionIfNotExists($permission, strtolower($this->name)); - - $userRepository->addPermissionToRole($adminRole, $permission); - - foreach ($childPermissions as $child) { - $childPermission = $userRepository->createPermissionIfNotExists($child, strtolower($this->name)); - $permission->children()->save($childPermission); - - $userRepository->addPermissionToRole($adminRole, $childPermission); - } - - } - } - } - - private function getModuleDirectory($subDir = '') - { - $className = get_class($this); - $reflector = new ReflectionClass($className); - $file = $reflector->getFileName(); - $directory = dirname($file); - - return realpath($directory . '/../' . $subDir); - } - - public function getPermissions() - { - return []; - } - - public function getGates() - { - return []; - } - - public function __construct($app) - { - parent::__construct($app); - $this->name = basename($this->getModuleDirectory()); - } -} diff --git a/src/Foundation/Repository/BaseCriteria.php b/src/Foundation/Repository/BaseCriteria.php deleted file mode 100644 index d086331..0000000 --- a/src/Foundation/Repository/BaseCriteria.php +++ /dev/null @@ -1,131 +0,0 @@ -getModel(); - - $builder = $model->select($model->getTable() . '.*') - ->join(DB::raw('(' . $this->getSubquery($model)->toSql() . ') as tmp'), $model->getTable() . '.id', '=', 'tmp.id'); - - foreach ($this->criteria() as $params) { - - $input = isset($params[2]) ? $params[2] : $params[0]; - - if (Request::has($input)) { - - switch ($params[1]) { - case '%LIKE': - $builder = $builder->orWhere('tmp.' . $params[0], 'LIKE', '%' . Request::get($input)); - break; - - case 'LIKE%': - $builder = $builder->orWhere('tmp.' . $params[0], 'LIKE', Request::get($input) . '%'); - break; - - case '%LIKE%': - $builder = $builder->orWhere('tmp.' . $params[0], 'LIKE', '%' . Request::get($input) . '%'); - break; - - default: - $builder = $builder->orWhere('tmp.' . $params[0], $params[1], Request::get($input)); - break; - } - } - } - - return $builder->orderBy($model->getTable() . '.created_at', 'DESC'); - } - - private function getModel() - { - if ($this->model) { - $model = $this->model; - return new $model(); - } - } - - public function formElements() - { - $form = $this->form()->all(); - - return $this->criteria()->map(function($item) use ($form){ - - $name = count($item) == 3 ? $item[2] : $item[0]; - - return array_merge([ - 'name' => $name, - 'label' => ucwords(str_replace('_', ' ', $name)), - 'type' => 'text' - ], isset($form[$name]) ? $form[$name] : []); - }); - } - - private function getSubquery($query) - { - $selects = [$query->getTable() . '.*']; - - foreach ($this->selects() as $as => $field) { - $selects[] = $field . ' AS ' . $as; - } - - $query = $query->select(DB::raw(implode(', ', $selects))); - - foreach ($this->joins() as $join) { - $query = $query->leftJoin($join[0], $join[1], '=', $join[2]); - } - - return $query; - } - - public function callback($callback) - { - $callback = 'callback' . ucfirst($callback); - - $key = 'criteria:' . $this->model . ':callbacks:' . md5(get_class($this) . '|' . $callback); - - if (!Cache::has($key)) { - Cache::put($key, $this->$callback(), config('collejo.pagination.perpage')); - } - - return Cache::get($key); - } - - public function selects() - { - return collect($this->selects); - } - - public function joins() - { - return collect($this->joins); - } - - public function criteria() - { - return collect($this->criteria); - } - - public function form() - { - return collect($this->form); - } -} \ No newline at end of file diff --git a/src/Foundation/Repository/BaseRepository.php b/src/Foundation/Repository/BaseRepository.php deleted file mode 100644 index c827cc0..0000000 --- a/src/Foundation/Repository/BaseRepository.php +++ /dev/null @@ -1,78 +0,0 @@ -buildQuery(); - } else { - $criteria = new $criteria(); - $criteria = $criteria->select('*'); - } - - return new CacheableResult($criteria); - } - - public function parseFillable(array $attributes, $class) - { - $model = new $class(); - return array_intersect_key($attributes, array_flip($model->getFillable())); - } - - public function newUuid() - { - return (string) Uuid::generate(4); - } - - public function createPrivotIds($ids) - { - $collection = collect($ids); - - $collection = $collection->map(function(){ - return $this->includePivotMetaData(); - }); - - return array_combine($ids, $collection->all()); - } - - public function includePivotMetaData(array $attributes = []) - { - if (!isset($attributes['id'])) { - $attributes['id'] = $this->newUuid(); - } - - if (!isset($attributes['created_at'])) { - $attributes['created_at'] = Carbon::now(); - } - - if (!isset($attributes['created_by']) && Auth::user()) { - $attributes['created_by'] = Auth::user()->id; - } - - return $attributes; - } - - public function boot() - { - $this->sessionOwner = Auth::user(); - } - - public function __construct() - { - $this->boot(); - } -} \ No newline at end of file diff --git a/src/Foundation/Repository/CacheableResult.php b/src/Foundation/Repository/CacheableResult.php deleted file mode 100644 index 0d79ecd..0000000 --- a/src/Foundation/Repository/CacheableResult.php +++ /dev/null @@ -1,90 +0,0 @@ -columns = $columns; - - return $this->getResult($columns); - } - - public function paginate($perPage = 15, $columns = ['*'], $pageName = 'page', $page = null) - { - $this->columns = $columns; - - $page = $page ?: Paginator::resolveCurrentPage($pageName); - - $perPage = $perPage ?: $this->builder->getPerPage(); - - $query = $this->builder->toBase(); - - $key = 'criteria:' . get_class($this->builder->getModel()) . ':' . $this->getQueryHash() . ':count'; - - $total = Cache::remember($key, config('collejo.pagination.perpage'), function() use ($key, $query){ - return $query->getCountForPagination(); - }); - - $results = new Collection; - - if ($total) { - $this->builder->forPage($page, $perPage); - $results = $this->getResult(); - } - - return new LengthAwarePaginator($results, $total, $perPage, $page, [ - 'path' => Paginator::resolveCurrentPath(), - 'pageName' => $pageName, - ]); - } - - public function with() - { - $this->builder->with(func_get_args()); - return $this; - } - - public function withTrashed() - { - $this->builder->withTrashed(func_get_args()); - return $this; - } - - public function count() - { - return $this->builder->count(); - } - - private function getResult() - { - $key = 'criteria:' . get_class($this->builder->getModel()) . ':' . $this->getQueryHash() . ':result'; - - $builder = $this->builder; - - return Cache::remember($key, config('collejo.pagination.perpage'), function() use ($builder){ - return $this->builder->get(); - }); - } - - private function getQueryHash() - { - return md5($this->builder->toSql() . '|' . implode(',', $this->columns)); - } - - public function __construct(Builder $builder) - { - $this->builder = $builder; - } -} diff --git a/src/Foundation/Repository/CriteriaInterface.php b/src/Foundation/Repository/CriteriaInterface.php deleted file mode 100644 index 95b2747..0000000 --- a/src/Foundation/Repository/CriteriaInterface.php +++ /dev/null @@ -1,8 +0,0 @@ -getStyles()->map(function($style){ - return '/theme/css/' . $style; - })->all()); - } - - foreach (self::$styles as $file) { - echo self::getStyleTag(config('collejo.assets.minified') ? asset(elixir($file)) : asset($file)); - } - } - - public static function renderScripts() - { - foreach (self::$scripts as $file) { - echo self::getScriptTag(config('collejo.assets.minified') ? asset(elixir($file)) : asset($file)); - } - } - - private static function getStyleTag($file) - { - return ''; - } - - private static function getScriptTag($file) - { - return ''; - } - -} \ No newline at end of file diff --git a/src/Foundation/Theme/Menu.php b/src/Foundation/Theme/Menu.php deleted file mode 100644 index f5757a0..0000000 --- a/src/Foundation/Theme/Menu.php +++ /dev/null @@ -1,165 +0,0 @@ -type = $type; - return $this; - } - - public function setPermission($permission) - { - $this->permission = $permission; - return $this; - } - - public function setName($name) - { - $this->name = $name; - return $this; - } - - public function setParent($name) - { - $this->parent = $name; - return $this; - } - - public function getName() - { - return $this->name; - } - - public function setLabel($label) - { - $this->label = $label; - return $this; - } - - public function getLabel() - { - return $this->label; - } - - public function setIcon($icon) - { - $this->icon = $icon; - return $this; - } - - public function getIcon() - { - return $this->icon; - } - - public function setPath($path) - { - $this->path = $path; - return $this; - } - - public function getPath() - { - return $this->path; - } - - public function isVisible() - { - if ($this->children->count()) { - foreach ($this->children as $child) { - if ($child->permission && Gate::allows($child->permission)) { - return true; - } - } - } else { - if ($this->permission && Gate::allows($this->permission)) { - return true; - } - } - - return false; - } - - public function getPermission() - { - return $this->permission; - } - - public function getParent() - { - return $this->parent; - } - - public function getFullPath() - { - return '/' . ltrim($this->getPath(), '/'); - } - - public function setOrder($order) - { - $this->order = $order; - return $this; - } - - public function toArray() - { - return [ - 'name' => $this->name, - 'label' => $this->label, - 'icon' => $this->icon, - 'path' => $this->path, - 'parent' => $this->parent - ]; - } - - public function offsetExists($offset) - { - return property_exists($this, $offset); - } - - public function offsetGet($offset) - { - return $this->$offset; - } - - public function offsetSet($offset, $value) - { - $this->$offset = $value; - } - - public function offsetUnset($offset) - { - $this->$offset = null; - } - - public function __construct() - { - $this->children = new Collection; - } -} \ No newline at end of file diff --git a/src/Foundation/Theme/MenuCollection.php b/src/Foundation/Theme/MenuCollection.php deleted file mode 100644 index cc3200e..0000000 --- a/src/Foundation/Theme/MenuCollection.php +++ /dev/null @@ -1,126 +0,0 @@ -getNamedRoutes(); - - foreach ($this->getItems() as $key => $menu) { - if (isset($namedRoutes[$menu->getName()])) { - $this->getItems()[$key]->setPath($namedRoutes[$menu->getName()]); - } - } - - $groups = $this->getItems()->where('type', 'g'); - - $menus = $this->getItems()->where('type', 'm'); - - $subGroups = $this->getItems()->where('type', 's'); - - foreach ($subGroups as $subGroupItem) { - $subGroupItem->children = $menus->where('parent', $subGroupItem->getName()); - } - - foreach ($groups as $groupsItem) { - $groupsItem->children = $menus->where('parent', $groupsItem->getName())->union($subGroups->where('parent', $groupsItem->getName())); - } - - return $groups; - } - - private function getNamedRoutes() - { - $routeCollection = Route::getRoutes(); - $namedRoutes = []; - - foreach ($routeCollection as $route) { - if (!is_null($route->getName())) { - $namedRoutes[$route->getName()] = $route->getPath(); - } - } - - return $namedRoutes; - } - - public function getItems() - { - return $this->menus; - } - - public function addNamespace($namespace, $path) - { - require_once ($path); - } - - public function group() - { - if (func_num_args() == 3) { - - $label = func_get_arg(0); - $icon = func_get_arg(1); - $closure = func_get_arg(2); - - $menu = $this->app->make(MenuInterface::class); - - $name = strtolower($label); - - $menu->setName($name)->setLabel($label)->setIcon($icon)->setType('g'); - - $this->menus->push($menu); - - $closure($name); - - return $menu; - - } elseif(func_num_args() == 1) { - - $closure = func_get_arg(0); - - $menu = $this->app->make(MenuInterface::class); - - $name = microtime(true); - - $menu->setName($name)->setLabel(null)->setType('s'); - - $this->menus->push($menu); - - $closure($name); - - return $menu; - } - - throw new \Exception('Invalid Arguments'); - - } - - public function create($name, $label) - { - $menu = $this->app->make(MenuInterface::class); - - $menu->setName($name)->setLabel($label)->setType('m'); - - $this->menus->push($menu); - - return $menu; - } - - public function __construct(Application $app) - { - $this->app = $app; - - $this->menus = new Collection(); - } -} \ No newline at end of file diff --git a/src/Foundation/Theme/Theme.php b/src/Foundation/Theme/Theme.php deleted file mode 100644 index 07dd50a..0000000 --- a/src/Foundation/Theme/Theme.php +++ /dev/null @@ -1,30 +0,0 @@ -styles); - } - - public function toArray() - { - return [ - 'name' => $this->name, - 'overrideDefault' => $this->override_default, - 'themeName' => $this->themeName - ]; - } -} \ No newline at end of file diff --git a/src/Foundation/Theme/ThemeCollection.php b/src/Foundation/Theme/ThemeCollection.php deleted file mode 100644 index 93be60a..0000000 --- a/src/Foundation/Theme/ThemeCollection.php +++ /dev/null @@ -1,50 +0,0 @@ -items->find(config('collejo.assets.theme')); - } - } - - public function loadThemes() - { - $themesPath = realpath(base_path('themes')); - - if (file_exists($themesPath)) { - - foreach ($this->scandir($themesPath) as $dir) { - - $themeFile = $themesPath . '/' . $dir . '/theme.json'; - - if (file_exists($themeFile) && ($themeData = file_get_contents($themeFile)) && is_object($theme = json_decode($themeData))) { - - $themeSettings = (object) array_merge([ - 'name' => $dir, - 'overrideDefault' => false, - 'themeName' => $dir, - 'styles' => [] - ], (array)$theme); - - $theme = app()->make(ThemeInterface::class); - - $theme->name = $dir; - $theme->overrideDefault = $themeSettings->overrideDefault; - $theme->styles = $themeSettings->styles; - - Theme::add($theme); - } - } - } - } -} \ No newline at end of file diff --git a/src/Foundation/Util/Component.php b/src/Foundation/Util/Component.php deleted file mode 100644 index 17a5bb2..0000000 --- a/src/Foundation/Util/Component.php +++ /dev/null @@ -1,28 +0,0 @@ -name; - } - - public function __get($req) - { - if (property_exists($this, $req)) { - - return $this->$req; - - } elseif(method_exists($this, $req)) { - - return $this->$req(); - } - } -} \ No newline at end of file diff --git a/src/Foundation/Util/ComponentCollection.php b/src/Foundation/Util/ComponentCollection.php deleted file mode 100644 index 9da4d5e..0000000 --- a/src/Foundation/Util/ComponentCollection.php +++ /dev/null @@ -1,65 +0,0 @@ -getFileName()); - - return realpath($pathinfo['dirname'] . '/../Modules'); - } - - public function getModulePaths() - { - return [ - 'Collejo\Modules' => base_path('modules'), - 'Collejo\App\Modules' => $this->appModulesPath() - ]; - } - - public function __construct(Application $app) - { - $this->app = $app; - - $this->items = new Collection(); - } - - public function all() - { - return $this->items; - } - - public function add($item) - { - $this->items->push($item); - } - - public function find($name) - { - return $this->items->where('name', $name)->first(); - } - - public function first() - { - return $this->items->first(); - } -} \ No newline at end of file diff --git a/src/Foundation/Widget/Widget.php b/src/Foundation/Widget/Widget.php deleted file mode 100644 index 1c0eb0f..0000000 --- a/src/Foundation/Widget/Widget.php +++ /dev/null @@ -1,23 +0,0 @@ - $this->location, - 'permissions' => implode(', ', $this->permissions), - 'view' => $this->view, - ]; - } -} \ No newline at end of file diff --git a/src/Foundation/Widget/WidgetCollection.php b/src/Foundation/Widget/WidgetCollection.php deleted file mode 100644 index e56b915..0000000 --- a/src/Foundation/Widget/WidgetCollection.php +++ /dev/null @@ -1,49 +0,0 @@ -getModulePaths() as $moduleLocation => $path) { - - if (file_exists($path)) { - - foreach ($this->scandir($path) as $dir) { - $widget = $this->registerWidget($moduleLocation, $dir, $path . '/' . $dir); - } - - } - } - } - - public function registerWidget($moduleLocation, $namespace, $path) - { - $provider = $moduleLocation . '\\' . $namespace . '\Providers\\' . $namespace . 'WidgetServiceProvider'; - - if (!class_exists($provider)) { - return false; - } - - $this->app->register($provider); - } - - public function getByLocation($location) - { - return $this->all()->where('location', $location); - } - - public function renderByLocation($location) - { - foreach ($this->getByLocation($location) as $widget) { - echo view($widget->view); - } - } -} \ No newline at end of file diff --git a/src/Foundation/Widget/WidgetServiceProvider.php b/src/Foundation/Widget/WidgetServiceProvider.php deleted file mode 100644 index d80c993..0000000 --- a/src/Foundation/Widget/WidgetServiceProvider.php +++ /dev/null @@ -1,23 +0,0 @@ -widgets as $class) { - Widget::add(new $class); - } - } -} diff --git a/src/Http/Controllers/DashController.php b/src/Http/Controllers/DashController.php deleted file mode 100644 index 72c10f9..0000000 --- a/src/Http/Controllers/DashController.php +++ /dev/null @@ -1,25 +0,0 @@ -first(); - - $permission->children()->save(\Collejo\App\Models\Permission::where('permission', 'add_remove_permission_to_role')->first()); - - dd($permission->children);*/ - - - //event(new \Collejo\App\Events\UserPermissionsChanged(Auth::user())); - return view('collejo::dash.dash')->render(); - } -} diff --git a/src/Http/Controllers/HomeController.php b/src/Http/Controllers/HomeController.php deleted file mode 100644 index c4619e2..0000000 --- a/src/Http/Controllers/HomeController.php +++ /dev/null @@ -1,14 +0,0 @@ -render(); - } -} diff --git a/src/Http/JsValidator/JsValidator.php b/src/Http/JsValidator/JsValidator.php deleted file mode 100644 index 447a211..0000000 --- a/src/Http/JsValidator/JsValidator.php +++ /dev/null @@ -1,73 +0,0 @@ -rules = collect($rules); - $this->attributes = collect($attributes); - - $this->processRules(); - } - - private function processRules() - { - $this->rules = $this->rules->map(function($rules, $element){ - return $this->processItemRules($rules); - }); - } - - public function renderRules() - { - return json_encode($this->rules, JSON_PRETTY_PRINT); - } - - private function processItemRules($rules) - { - $rules = explode('|', $rules); - - $returned = new \stdClass(); - - foreach ($rules as $rule) { - $ruleParts = explode(':', $rule); - $rule = $ruleParts[0]; - $ruleOptions = isset($ruleParts[1]) ? explode(',', $ruleParts[1]) : null; - $method = 'rule' . ucfirst($rule); - - switch ($rule) { - case 'max': - $returned->maxlength = intval($ruleOptions[0]); - break; - - case 'min': - $returned->minlength = intval($ruleOptions[0]); - break; - - case 'between': - $returned->rangelength = [intval($ruleOptions[0]), intval($ruleOptions[1])]; - break; - - case 'required': - $returned->required = true; - break; - - case 'email': - $returned->email = true; - break; - - case 'url': - $returned->url = true; - break; - } - } - - return $returned; - } - -} \ No newline at end of file diff --git a/src/Http/JsValidator/JsValidatorFactory.php b/src/Http/JsValidator/JsValidatorFactory.php deleted file mode 100644 index 83c1da9..0000000 --- a/src/Http/JsValidator/JsValidatorFactory.php +++ /dev/null @@ -1,20 +0,0 @@ -rules(), $class->attributes()); - } -} \ No newline at end of file diff --git a/src/Http/Kernel.php b/src/Http/Kernel.php deleted file mode 100644 index ee15f43..0000000 --- a/src/Http/Kernel.php +++ /dev/null @@ -1,59 +0,0 @@ - [ - \Collejo\App\Http\Middleware\CheckInstalation::class, - \Collejo\App\Http\Middleware\EncryptCookies::class, - \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, - \Illuminate\Session\Middleware\StartSession::class, - \Illuminate\View\Middleware\ShareErrorsFromSession::class, - \Collejo\App\Http\Middleware\VerifyCsrfToken::class, - \Clockwork\Support\Laravel\ClockworkMiddleware::class, - \Collejo\App\Http\Middleware\SetUserTime::class - ], - - 'api' => [ - 'throttle:60,1', - ], - ]; - - /** - * The application's route middleware. - * - * These middleware may be assigned to groups or used individually. - * - * @var array - */ - protected $routeMiddleware = [ - 'auth' => \Collejo\App\Http\Middleware\Authenticate::class, - 'reauth' => \Collejo\App\Http\Middleware\ReAuth::class, - 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, - 'can' => \Illuminate\Foundation\App\Http\Middleware\Authorize::class, - 'guest' => \Collejo\App\Http\Middleware\RedirectIfAuthenticated::class, - 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - 'ajax' => \Collejo\App\Http\Middleware\Ajax::class - ]; - -} diff --git a/src/Http/Middleware/CheckInstalation.php b/src/Http/Middleware/CheckInstalation.php deleted file mode 100644 index 3d7450e..0000000 --- a/src/Http/Middleware/CheckInstalation.php +++ /dev/null @@ -1,20 +0,0 @@ -isInstalled()) { - return view('collejo::setup.incomplete'); - } - - return $next($request); - } - -} diff --git a/src/Http/Middleware/SetUserTime.php b/src/Http/Middleware/SetUserTime.php deleted file mode 100644 index 36a54c8..0000000 --- a/src/Http/Middleware/SetUserTime.php +++ /dev/null @@ -1,33 +0,0 @@ -header('X-User-Time'); - - if (!is_null($userTime)) { - - $time = Carbon::parse(substr($userTime, 0, 34)); - - Session::put('user-tz', $time->timezoneName); - } - - return $next($request); - } -} diff --git a/src/Http/Requests/Request.php b/src/Http/Requests/Request.php deleted file mode 100644 index 15f639a..0000000 --- a/src/Http/Requests/Request.php +++ /dev/null @@ -1,28 +0,0 @@ -authorize; - } - - public function formatErrors(Validator $validator) - { - return ['success' => false, 'data' => ['errors' => $validator->errors()->getMessages()]]; - } - - public function response(array $errors) - { - return new JsonResponse($errors, 422); - } -} diff --git a/src/Http/routes.php b/src/Http/routes.php deleted file mode 100644 index ddbadab..0000000 --- a/src/Http/routes.php +++ /dev/null @@ -1,9 +0,0 @@ - 'dash', 'middleware' => 'auth'], function() { - Route::get('/', 'DashController@getIndex')->name('dash'); -}); diff --git a/src/Jobs/Job.php b/src/Jobs/Job.php deleted file mode 100644 index e785e33..0000000 --- a/src/Jobs/Job.php +++ /dev/null @@ -1,21 +0,0 @@ -model) { - if (config('cache.default') == 'redis') { - $this->flushRedisCache(get_class($event->model)); - } elseif(config('cache.default') == 'database') { - $this->flushDatabaseCache(get_class($event->model)); - } else { - Cache::flush(); - } - } - } - - private function flushDatabaseCache($pattern) - { - $connection = is_null(config('cache.stores.database.connection')) ? config('database.default') : config('cache.stores.database.connection'); - - DB::connection($connection) - ->table(config('cache.stores.database.table')) - ->where('key', 'LIKE', '%'. str_replace('\\', '\\\\', $pattern) . ':%') - ->delete(); - } - - private function flushRedisCache($pattern) - { - $config = config('database.redis.' . config('cache.stores.redis.connection')); - - $client = new Redis([ - 'scheme' => 'tcp', - 'host' => $config['host'], - 'port' => $config['port'], - 'parameters' => [ - 'password' => $config['password'], - 'database' => $config['database'], - ], - ]); - - $keys = $client->keys('collejo:criteria:' . str_replace('\\', '\\\\', $pattern) . ':*'); - - foreach ($keys as $key) { - $client->del($key); - } - } -} \ No newline at end of file diff --git a/src/Listeners/SendPasswordCreateRequestEmail.php b/src/Listeners/SendPasswordCreateRequestEmail.php deleted file mode 100644 index 25fb188..0000000 --- a/src/Listeners/SendPasswordCreateRequestEmail.php +++ /dev/null @@ -1,33 +0,0 @@ -user->roles) { - # code... - } - } -} \ No newline at end of file diff --git a/src/Listeners/UserPermissionsAlertEmail.php b/src/Listeners/UserPermissionsAlertEmail.php deleted file mode 100644 index 8f0ab6d..0000000 --- a/src/Listeners/UserPermissionsAlertEmail.php +++ /dev/null @@ -1,31 +0,0 @@ -user->id); - } -} \ No newline at end of file diff --git a/src/Models/Batch.php b/src/Models/Batch.php deleted file mode 100644 index 5976314..0000000 --- a/src/Models/Batch.php +++ /dev/null @@ -1,33 +0,0 @@ -hasMany(Term::class); - } - - public function grades() - { - return $this->belongsToMany(Grade::class); - } - - public function scopeActive() - { - return $this->whereNull('deleted_at'); - } -} diff --git a/src/Models/Clasis.php b/src/Models/Clasis.php deleted file mode 100644 index 9f3d2f5..0000000 --- a/src/Models/Clasis.php +++ /dev/null @@ -1,25 +0,0 @@ -belongsToMany(Student::Class, 'class_student', 'id', 'student_id'); - } - - public function grade() - { - return $this->belongsTo(Grade::class); - } -} diff --git a/src/Models/Employee.php b/src/Models/Employee.php deleted file mode 100644 index dcc5a97..0000000 --- a/src/Models/Employee.php +++ /dev/null @@ -1,46 +0,0 @@ -belongsTo(EmployeeDepartment::class); - } - - public function employeePosition() - { - return $this->belongsTo(EmployeePosition::class); - } - - public function employeeGrade() - { - return $this->belongsTo(EmployeeGrade::class); - } - - public function picture() - { - return $this->hasOne(Media::class, 'id', 'image_id'); - } -} \ No newline at end of file diff --git a/src/Models/EmployeeCategory.php b/src/Models/EmployeeCategory.php deleted file mode 100644 index 93f7457..0000000 --- a/src/Models/EmployeeCategory.php +++ /dev/null @@ -1,25 +0,0 @@ -hasMany(Employee::class); - } - - public function employeePositions() - { - return $this->hasMany(EmployeePosition::class); - } -} diff --git a/src/Models/EmployeePosition.php b/src/Models/EmployeePosition.php deleted file mode 100644 index 425d341..0000000 --- a/src/Models/EmployeePosition.php +++ /dev/null @@ -1,27 +0,0 @@ -belongsTo(EmployeeCategory::class); - } - - public function employees() - { - return $this->hasManyThrough('employeeCategory'); - } - -} diff --git a/src/Models/Grade.php b/src/Models/Grade.php deleted file mode 100644 index a8e92ea..0000000 --- a/src/Models/Grade.php +++ /dev/null @@ -1,25 +0,0 @@ -hasMany(Clasis::class); - } - - public function batches() - { - return $this->belongsToMany(Batch::class); - } -} diff --git a/src/Models/Guardian.php b/src/Models/Guardian.php deleted file mode 100644 index 003a90b..0000000 --- a/src/Models/Guardian.php +++ /dev/null @@ -1,24 +0,0 @@ -belongsToMany(Student::class, 'guardian_student', 'guardian_id', 'student_id'); - } -} diff --git a/src/Models/Media.php b/src/Models/Media.php deleted file mode 100644 index 857dcf6..0000000 --- a/src/Models/Media.php +++ /dev/null @@ -1,23 +0,0 @@ -bucket . '/' . $this->id . (!is_null($size) ? '_' . $size : '') . '.' . $this->ext; - } - - public function getFileNameAttribute() - { - return $this->id . '.' . $this->ext; - } -} diff --git a/src/Models/Permission.php b/src/Models/Permission.php deleted file mode 100644 index e4b6f86..0000000 --- a/src/Models/Permission.php +++ /dev/null @@ -1,34 +0,0 @@ -belongsToMany(Role::class); - } - - public function children() - { - return $this->hasMany(self::class, 'parent_id', 'id'); - } - - public function parent() - { - return $this->hasOne(self::class, 'id', 'parent_id'); - } - - public function getNameAttribute() - { - return str_replace('_', ' ', ucfirst($this->permission)); - } -} diff --git a/src/Models/Role.php b/src/Models/Role.php deleted file mode 100644 index 94c68d5..0000000 --- a/src/Models/Role.php +++ /dev/null @@ -1,32 +0,0 @@ -role)); - } - - public function users() - { - return $this->belongsToMany(User::class); - } - - public function permissions() - { - return $this->belongsToMany(Permission::class); - } -} diff --git a/src/Models/StudentCategory.php b/src/Models/StudentCategory.php deleted file mode 100644 index 32ccf6c..0000000 --- a/src/Models/StudentCategory.php +++ /dev/null @@ -1,20 +0,0 @@ -hasMany(Student::class); - } - -} diff --git a/src/Models/Term.php b/src/Models/Term.php deleted file mode 100644 index 348d4bd..0000000 --- a/src/Models/Term.php +++ /dev/null @@ -1,23 +0,0 @@ -belongsTo(Batch::class); - } -} diff --git a/src/Providers/AppServiceProvider.php b/src/Providers/AppServiceProvider.php deleted file mode 100644 index 87c8867..0000000 --- a/src/Providers/AppServiceProvider.php +++ /dev/null @@ -1,44 +0,0 @@ -loadViewsFrom([realpath(__DIR__ . '/../resources/views')], 'collejo'); - - $this->loadTranslationsFrom(realpath(__DIR__ . '/../resources/lang'), null); - } - - /** - * Register any application services. - * - * @return void - */ - public function register() - { - $this->app->bind(UserRepositoryContract::class, UserRepository::class); - $this->app->bind(StudentRepositoryContract::class, StudentRepository::class); - $this->app->bind(GuardianRepositoryContract::class, GuardianRepository::class); - $this->app->bind(EmployeeRepositoryContract::class, EmployeeRepository::class); - $this->app->bind(ClassRepositoryContract::class, ClassRepository::class); - } -} diff --git a/src/Providers/AuthServiceProvider.php b/src/Providers/AuthServiceProvider.php deleted file mode 100644 index 8972019..0000000 --- a/src/Providers/AuthServiceProvider.php +++ /dev/null @@ -1,22 +0,0 @@ -registerPolicies($gate); - - // - } -} diff --git a/src/Providers/EventServiceProvider.php b/src/Providers/EventServiceProvider.php deleted file mode 100644 index 46279fa..0000000 --- a/src/Providers/EventServiceProvider.php +++ /dev/null @@ -1,39 +0,0 @@ - [ - 'Collejo\App\Listeners\ClearUserPermissionsCache', - ], - 'Collejo\App\Events\UserCreated' => [ - 'Collejo\App\Listeners\SendPasswordCreateRequestEmail', - ], - 'Collejo\App\Events\CriteriaDataChanged' => [ - 'Collejo\App\Listeners\ClearCriteriaCache', - ], - ]; - - /** - * Register any other events for your application. - * - * @param \Illuminate\Contracts\Events\Dispatcher $events - * @return void - */ - public function boot(DispatcherContract $events) - { - parent::boot($events); - - // - } -} diff --git a/src/Providers/ModuleServiceProvider.php b/src/Providers/ModuleServiceProvider.php deleted file mode 100644 index 60ba38c..0000000 --- a/src/Providers/ModuleServiceProvider.php +++ /dev/null @@ -1,37 +0,0 @@ -loadModules(); - } - - /** - * Register any application services. - * - * @return void - */ - public function register() - { - $this->app->bind(ModuleInterface::class, function($app) { - return new Module(); - }); - - $this->app->singleton('modules', function ($app) { - return new ModuleCollection($app); - }); - } -} diff --git a/src/Providers/ThemeServiceProvider.php b/src/Providers/ThemeServiceProvider.php deleted file mode 100644 index 35b35b2..0000000 --- a/src/Providers/ThemeServiceProvider.php +++ /dev/null @@ -1,48 +0,0 @@ -loadThemes(); - } - - /** - * Register any application services. - * - * @return void - */ - public function register() - { - $this->app->bind(MenuInterface::class, function($app) { - return new Menu(); - }); - - $this->app->singleton('menus', function ($app) { - return new MenuCollection($app); - }); - - $this->app->bind(ThemeInterface::class, function($app) { - return new Theme(); - }); - - $this->app->singleton('themes', function ($app) { - return new ThemeCollection($app); - }); - } -} diff --git a/src/Providers/WidgetServiceProvider.php b/src/Providers/WidgetServiceProvider.php deleted file mode 100644 index 56e2e07..0000000 --- a/src/Providers/WidgetServiceProvider.php +++ /dev/null @@ -1,37 +0,0 @@ -loadWidgets(); - } - - /** - * Register any application services. - * - * @return void - */ - public function register() - { - $this->app->bind(WidgetInterface::class, function($app) { - return new Widget(); - }); - - $this->app->singleton('widgets', function ($app) { - return new WidgetCollection($app); - }); - } -} diff --git a/src/Repository/ClassRepository.php b/src/Repository/ClassRepository.php deleted file mode 100644 index 8ff3f9c..0000000 --- a/src/Repository/ClassRepository.php +++ /dev/null @@ -1,125 +0,0 @@ -findClass($classId, $gradeId)->delete(); - } - - public function updateGrade(array $attributes, $id) - { - $this->findGrade($id)->update($attributes); - - return $this->findGrade($id); - } - - public function findGrade($id) - { - return Grade::findOrFail($id); - } - - public function createGrade(array $attributes) - { - return Grade::create($attributes); - } - - public function getGrades() - { - return $this->search(Grade::class); - } - - public function updateClass(array $attributes, $classId, $gradeId) - { - $this->findClass($classId, $gradeId)->update($attributes); - - return $this->findClass($classId, $gradeId); - } - - public function createClass(array $attributes, $gradeId) - { - $attributes['grade_id'] = $this->findGrade($gradeId)->id; - - return Clasis::create($attributes); - } - - public function findClass($classId, $gradeId) - { - return Clasis::where(['grade_id' => $gradeId, 'id' => $classId])->firstOrFail(); - } - - public function getClasses() - { - return $this->search(Clasis::class); - } - - public function updateBatch(array $attributes, $batchId) - { - $this->findBatch($batchId)->update($attributes); - - return $this->findBatch($batchId); - } - - public function deleteTerm($termId, $batchId) - { - $this->findTerm($termId, $batchId)->delete(); - } - - public function updateTerm(array $attributes, $termId, $batchId) - { - $this->findTerm($termId, $batchId)->update($attributes); - - return $this->findTerm($termId, $batchId); - } - - public function findTerm($termId, $batchId) - { - return Term::where(['batch_id' => $batchId, 'id' => $termId])->firstOrFail(); - } - - public function assignGradesToBatch(array $gradeIds, $batchId) - { - $this->findBatch($batchId)->grades()->sync($this->createPrivotIds($gradeIds)); - } - - public function createTerm(array $attributes, $batchId) - { - $batch = $this->findBatch($batchId); - - $attributes['start_date'] = toUTC($attributes['start_date']); - $attributes['end_date'] = toUTC($attributes['end_date']); - $attributes['batch_id'] = $batch->id; - - return Term::create($attributes); - } - - public function activeBatches() - { - return Batch::active(); - } - - public function findBatch($id) - { - return Batch::findOrFail($id); - } - - public function createBatch(array $attributes) - { - return Batch::create($attributes); - } - - public function getBatches() - { - return $this->search(Batch::class); - } -} \ No newline at end of file diff --git a/src/Repository/EmployeeRepository.php b/src/Repository/EmployeeRepository.php deleted file mode 100644 index 3d05aba..0000000 --- a/src/Repository/EmployeeRepository.php +++ /dev/null @@ -1,216 +0,0 @@ -findEmployeePosition($employeePositionId)->update($attributes); - - return $this->findEmployeePosition($employeePositionId); - } - - public function createEmployeePosition(array $attributes) - { - return EmployeePosition::create($attributes); - } - - public function findEmployeePosition($employeePositionId) - { - return EmployeePosition::findOrFail($employeePositionId); - } - - public function getEmployeePositions() - { - return $this->search(EmployeePosition::class); - } - - public function updateEmployeeGrade(array $attributes, $employeeGradeId) - { - $this->findEmployeeGrade($employeeGradeId)->update($attributes); - - return $this->findEmployeeGrade($employeeGradeId); - } - - public function createEmployeeGrade(array $attributes) - { - return EmployeeGrade::create($attributes); - } - - public function findEmployeeGrade($employeeGradeId) - { - return EmployeeGrade::findOrFail($employeeGradeId); - } - - public function getEmployeeGrades() - { - return $this->search(EmployeeGrade::class); - } - - public function updateEmployeeDepartment(array $attributes, $employeeDepartmentId) - { - $this->findEmployeeDepartment($employeeDepartmentId)->update($attributes); - - return $this->findEmployeeDepartment($employeeDepartmentId); - } - - public function createEmployeeDepartment(array $attributes) - { - return EmployeeDepartment::create($attributes); - } - - public function findEmployeeDepartment($employeeDepartmentId) - { - return EmployeeDepartment::findOrFail($employeeDepartmentId); - } - - public function getEmployeeDepartments() - { - return $this->search(EmployeeDepartment::class); - } - - public function updateEmployeeCategory(array $attributes, $employeeCategoryId) - { - $this->findEmployeeCategory($employeeCategoryId)->update($attributes); - - return $this->findEmployeeCategory($employeeCategoryId); - } - - public function createEmployeeCategory(array $attributes) - { - return EmployeeCategory::create($attributes); - } - - public function findEmployeeCategory($employeeCategoryId) - { - return EmployeeCategory::findOrFail($employeeCategoryId); - } - - public function getEmployeeCategories() - { - return $this->search(EmployeeCategory::class); - } - - public function getEmployees($criteria) - { - return $this->search($criteria); - } - - public function deleteAddress($addressId, $employeeId) - { - $this->findAddress($addressId, $employeeId)->delete(); - } - - public function updateAddress(array $attributes, $addressId, $employeeId) - { - $attributes['is_emergency'] = isset($attributes['is_emergency']); - - $this->findAddress($addressId, $employeeId)->update($attributes); - - return $this->findAddress($addressId, $employeeId); - } - - public function createAddress(array $attributes, $employeeId) - { - $address = null; - - $employee = $this->findEmployee($employeeId); - - $attributes['user_id'] = $employee->user->id; - $attributes['is_emergency'] = isset($attributes['is_emergency']); - - DB::transaction(function () use ($attributes, &$address) { - $address = Address::create($attributes); - }); - - return $address; - } - - public function findAddress($addressId, $employeeId) - { - return Address::where([ - 'user_id' => $this->findEmployee($employeeId)->user->id, - 'id' => $addressId] - )->firstOrFail(); - } - - public function findEmployee($id) - { - return Employee::findOrFail($id); - } - - public function updateEmployee(array $attributes, $employeeId) - { - $employee = $this->findEmployee($employeeId); - - if (isset($attributes['joined_on'])) { - $attributes['joined_on'] = toUTC($attributes['joined_on']); - } - - if (!isset($attributes['image_id'])) { - $attributes['image_id'] = null; - } - - if (isset($attributes['employee_position_id'])) { - $attributes['employee_category_id'] = $this->findEmployeePosition($attributes['employee_position_id'])->employeeCategory->id; - } - - $employeeAttributes = $this->parseFillable($attributes, Employee::class); - - DB::transaction(function () use ($attributes, $employeeAttributes, &$employee, $employeeId) { - $employee->update($employeeAttributes); - - $user = $this->userRepository->update($attributes, $employee->user->id); - }); - - return $employee; - } - - public function createEmployee(array $attributes) - { - $employee = null; - - $attributes['joined_on'] = toUTC($attributes['joined_on']); - - if (!isset($attributes['image_id'])) { - $attributes['image_id'] = null; - } - - $attributes['employee_category_id'] = $this->findEmployeePosition($attributes['employee_position_id'])->employeeCategory->id; - - $employeeAttributes = $this->parseFillable($attributes, Employee::class); - - DB::transaction(function () use ($attributes, $employeeAttributes, &$employee) { - $user = $this->userRepository->create($attributes); - - $employee = Employee::create(array_merge($employeeAttributes, ['user_id' => $user->id])); - - $this->userRepository->addRoleToUser($user, $this->userRepository->getRoleByName('employee')); - }); - - return $employee; - } - - public function boot() - { - parent::boot(); - - $this->userRepository = app()->make(UserRepositoryContract::class); - } -} \ No newline at end of file diff --git a/src/Repository/GuardianRepository.php b/src/Repository/GuardianRepository.php deleted file mode 100644 index 2e495a0..0000000 --- a/src/Repository/GuardianRepository.php +++ /dev/null @@ -1,102 +0,0 @@ -parseFillable($attributes, Guardian::class); - $addressAttributes = $this->parseFillable($attributes, Address::class); - - DB::transaction(function () use ($attributes, $guardianAttributes, $addressAttributes, &$guardian) { - $user = $this->userRepository->create($attributes); - - $guardian = Guardian::create(array_merge($guardianAttributes, ['user_id' => $user->id])); - $address = Address::create(array_merge($addressAttributes, ['user_id' => $user->id, 'is_emergency' => true])); - - $this->userRepository->addRoleToUser($user, $this->userRepository->getRoleByName('guardian')); - }); - - return $guardian; - } - - public function updateGuardian(array $attributes, $guardianId) - { - $guardian = $this->findGuardian($guardianId); - - $guardianAttributes = $this->parseFillable($attributes, Guardian::class); - - DB::transaction(function () use ($attributes, $guardianAttributes, &$guardian, $guardianId) { - $guardian->update($guardianAttributes); - - $user = $this->userRepository->update($attributes, $guardian->user->id); - }); - - return $guardian; - } - - public function deleteAddress($addressId, $guardianId) - { - $this->findAddress($addressId, $guardianId)->delete(); - } - - public function updateAddress(array $attributes, $addressId, $guardianId) - { - $attributes['is_emergency'] = isset($attributes['is_emergency']); - - $this->findAddress($addressId, $guardianId)->update($attributes); - - return $this->findAddress($addressId, $guardianId); - } - - public function createAddress(array $attributes, $guardianId) - { - $address = null; - - $guardian = $this->findGuardian($guardianId); - - $attributes['user_id'] = $guardian->user->id; - $attributes['is_emergency'] = isset($attributes['is_emergency']); - - DB::transaction(function () use ($attributes, &$address) { - $address = Address::create($attributes); - }); - - return $address; - } - - public function findAddress($addressId, $guardianId) - { - return Address::where([ - 'user_id' => $this->findGuardian($guardianId)->user->id, - 'id' => $addressId] - )->firstOrFail(); - } - - public function findGuardian($id) - { - return Guardian::findOrFail($id); - } - - public function getGuardians($criteria) - { - return $this->search($criteria); - } - - public function boot() - { - parent::boot(); - - $this->userRepository = app()->make(UserRepositoryContract::class); - } -} \ No newline at end of file diff --git a/src/Repository/StudentRepository.php b/src/Repository/StudentRepository.php deleted file mode 100644 index eec82c7..0000000 --- a/src/Repository/StudentRepository.php +++ /dev/null @@ -1,179 +0,0 @@ -findStudentCategory($studentCategoryId)->update($attributes); - - return $this->findStudentCategory($studentCategoryId); - } - - public function createStudentCategory(array $attributes) - { - return StudentCategory::create($attributes); - } - - public function findStudentCategory($studentCategoryId) - { - return StudentCategory::findOrFail($studentCategoryId); - } - - public function removeGuardian($guardianId, $studentId) - { - $this->findStudent($studentId)->guardians()->detach($this->guardiansRepository->findGuardian($guardianId)); - } - - public function assignGuardian($guardianId, $studentId) - { - if (!$this->findStudent($studentId)->guardians->contains($guardianId)) { - $this->findStudent($studentId) - ->guardians() - ->attach($this->guardiansRepository->findGuardian($guardianId), $this->includePivotMetaData()); - } - } - - public function assignToClass($batchId, $gradeId, $classId, $current = false, $studentId) - { - if (!$this->findStudent($studentId)->classes->contains($classId)) { - - $student = $this->findStudent($studentId); - - if ($current && $student->class) { - $student->classes()->detach($student->class->id); - } - - $student->classes() - ->attach($this->classRepository->findClass($classId, $gradeId), $this->includePivotMetaData([ - 'batch_id' => $this->classRepository->findBatch($batchId)->id, - ])); - } - } - - public function deleteAddress($addressId, $studentId) - { - $this->findAddress($addressId, $studentId)->delete(); - } - - public function updateAddress(array $attributes, $addressId, $studentId) - { - $attributes['is_emergency'] = isset($attributes['is_emergency']); - - $this->findAddress($addressId, $studentId)->update($attributes); - - return $this->findAddress($addressId, $studentId); - } - - public function createAddress(array $attributes, $studentId) - { - $address = null; - - $student = $this->findStudent($studentId); - - $attributes['user_id'] = $student->user->id; - $attributes['is_emergency'] = isset($attributes['is_emergency']); - - DB::transaction(function () use ($attributes, &$address) { - $address = Address::create($attributes); - }); - - return $address; - } - - public function findAddress($addressId, $studentId) - { - return Address::where([ - 'user_id' => $this->findStudent($studentId)->user->id, - 'id' => $addressId] - )->firstOrFail(); - } - - public function findStudent($id) - { - return Student::findOrFail($id); - } - - public function getStudents($criteria) - { - return $this->search($criteria); - } - - public function updateStudent(array $attributes, $studentId) - { - $student = $this->findStudent($studentId); - - if (isset($attributes['admitted_on'])) { - $attributes['admitted_on'] = toUTC($attributes['admitted_on']); - } - - if (!isset($attributes['image_id'])) { - $attributes['image_id'] = null; - } - - $studentAttributes = $this->parseFillable($attributes, Student::class); - - DB::transaction(function () use ($attributes, $studentAttributes, &$student, $studentId) { - $student->update($studentAttributes); - - $user = $this->userRepository->update($attributes, $student->user->id); - }); - - return $student; - } - - public function createStudent(array $attributes) - { - $student = null; - - $attributes['admitted_on'] = toUTC($attributes['admitted_on']); - - if (!isset($attributes['image_id'])) { - $attributes['image_id'] = null; - } - - $studentAttributes = $this->parseFillable($attributes, Student::class); - - DB::transaction(function () use ($attributes, $studentAttributes, &$student) { - $user = $this->userRepository->create($attributes); - - $student = Student::create(array_merge($studentAttributes, ['user_id' => $user->id])); - - $this->userRepository->addRoleToUser($user, $this->userRepository->getRoleByName('student')); - }); - - - return $student; - } - - public function getStudentCategories() - { - return $this->search(StudentCategory::class); - } - - public function boot() - { - parent::boot(); - - $this->userRepository = app()->make(UserRepositoryContract::class); - $this->classRepository = app()->make(ClassRepositoryContract::class); - $this->guardiansRepository = app()->make(GuardianRepositoryContract::class); - } -} \ No newline at end of file diff --git a/src/Repository/UserRepository.php b/src/Repository/UserRepository.php deleted file mode 100644 index a272f68..0000000 --- a/src/Repository/UserRepository.php +++ /dev/null @@ -1,162 +0,0 @@ - $name, - 'email' => $email, - 'password' => Hash::make($password) - ]); - - $this->addRoleToUser($user, $this->getRoleByName('admin')); - - return $user; - } - - public function getAdminUsers() - { - return $this->getRoleByName('admin')->users; - } - - public function syncUserRoles(User $user, array $roleNames) - { - $roleIds = Role::whereIn('role', $roleNames)->get(['id'])->pluck('id')->all(); - $user->roles()->sync($this->createPrivotIds($roleIds)); - } - - public function addRoleToUser(User $user, Role $role) - { - if (!$this->userHasRole($user, $role)) { - $user->roles()->attach($role, ['id' => $this->newUUID()]); - } - } - - public function userHasRole(User $user, Role $role) - { - return $user->roles->contains($role->id); - } - - public function syncRolePermissions(Role $role, array $permissions, $module = null) - { - if (!is_null($module)) { - - $otherPermissions = $role->permissions() - ->where('module', '!=', strtolower($module))->get() - ->pluck('permission')->all(); - - $permissions = array_merge($otherPermissions, $permissions); - } - - $permissionIds = Permission::whereIn('permission', (array) $permissions)->get(['id']) - ->pluck('id')->all(); - - $role->permissions()->sync($this->createPrivotIds($permissionIds)); - } - - public function addPermissionToRole(Role $role, Permission $permission) - { - if (!$this->roleHasPermission($role, $permission)) { - $role->permissions()->attach($permission, ['id' => $this->newUUID()]); - } - } - - public function roleHasPermission(Role $role, Permission $permission) - { - return $role->permissions->contains($permission->id); - } - - public function createPermissionIfNotExists($permission, $module = null) - { - $perm = $this->getPermissionByName($permission); - - if (is_null($perm)) { - $perm = Permission::create(['permission' => $permission, 'module' => $module]); - } - - return $perm; - } - - public function disableRole($roleId) - { - $this->findRole($roleId)->delete(); - } - - public function enableRole($roleId) - { - Role::withTrashed()->findOrFail($roleId)->restore(); - } - - public function getRoleByName($name) - { - return Role::where('role', $name)->first(); - } - - public function getPermissionByName($name) - { - return Permission::where('permission', $name)->first(); - } - - public function getPermissionsByModule($name) - { - return Permission::where('module', strtolower($name))->get(); - } - - public function createRoleIfNotExists($roleName) - { - if (is_null($role = $this->getRoleByName($roleName))) { - $role = Role::create(['role' => $roleName]); - } - - return $role; - } - - public function getRoles() - { - return new Role(); - } - - public function getPermissions() - { - return new Permission(); - } - - public function findRole($id) - { - return Role::findOrFail($id); - } - - public function update(array $attributes, $id) - { - if (isset($attributes['password'])) { - $attributes['password'] = Hash::make($attributes['password']); - } - - return User::findOrFail($id)->update($attributes); - } - - public function create(array $attributes) - { - if (isset($attributes['password'])) { - $attributes['password'] = Hash::make($attributes['password']); - } - - return User::create($this->parseFillable($attributes, User::class)); - } - - public function findByEmail($email) - { - return User::where('email', $email)->first(); - } -} \ No newline at end of file diff --git a/src/Support/Facades/Theme.php b/src/Support/Facades/Theme.php deleted file mode 100644 index 3d0694b..0000000 --- a/src/Support/Facades/Theme.php +++ /dev/null @@ -1,21 +0,0 @@ -setTimezone('UTC'); - } -} - -/** -* converts a UTC time to user tz -*/ - -if (!function_exists('toUserTz')) { - - function toUserTz($time) - { - return Carbon::parse($time, 'UTC')->setTimezone(Session::get('user-tz', 'UTC')); - } -} - -/** -* converts a carbon date to date string -*/ - -if (!function_exists('formatDate')) { - - function formatDate(Carbon $time) - { - return $time->toDateString(); - } -} - -/** -* converts a carbon date to time string -*/ - -if (!function_exists('formatTime')) { - - function formatTime(Carbon $time) - { - return $time->format('H:i'); - } -} - diff --git a/src/modules/ACL/Http/Controllers/RoleController.php b/src/modules/ACL/Http/Controllers/RoleController.php deleted file mode 100644 index ff7dd26..0000000 --- a/src/modules/ACL/Http/Controllers/RoleController.php +++ /dev/null @@ -1,75 +0,0 @@ -userRepository->enableRole($roleId); - - return $this->printJson(true, [], trans('acl::role.enabled')); - } - - public function getRoleDisable($roleId) - { - $this->userRepository->disableRole($roleId); - - return $this->printJson(true, [], trans('acl::role.disabled')); - } - - public function postRoleNew(CreateRoleRequest $request) - { - $role = $this->userRepository->createRoleIfNotExists($request->get('role')); - - return $this->printRedirect(route('role.permissions.edit', [$role->id, Module::first()->name])); - } - - public function getRoleNew() - { - return $this->printModal(view('acl::modals.edit_role', [ - 'module' => Module::first(), - 'role' => null, - 'role_form_validator' => $this->jsValidator(CreateRoleRequest::class) - ])); - } - - public function postRolePermmissionsEdit(Request $request, $roleId, $moduleName) - { - $this->userRepository->syncRolePermissions($this->userRepository->findRole($roleId), $request::get('permissions', []), $moduleName); - - return $this->printJson(true, [], trans('acl::role.updated')); - } - - public function getRolePermmissionsEdit($roleId, $moduleName) - { - return view('acl::edit_role_permissions', [ - 'module' => Module::find($moduleName), - 'role' => $this->userRepository->findRole($roleId), - 'userRepository' => $this->userRepository - ]); - } - - public function getRoles() - { - return view('acl::roles_list', [ - 'module' => Module::first(), - 'roles' => $this->userRepository->getRoles()->orderBy('created_at')->withTrashed()->paginate() - ]); - } - - public function __construct(UserRepository $userRepository) - { - $this->authorize('add_remove_permission_to_role'); - - $this->userRepository = $userRepository; - } -} diff --git a/src/modules/ACL/Http/Requests/CreateRoleRequest.php b/src/modules/ACL/Http/Requests/CreateRoleRequest.php deleted file mode 100644 index 1e6c992..0000000 --- a/src/modules/ACL/Http/Requests/CreateRoleRequest.php +++ /dev/null @@ -1,23 +0,0 @@ - 'required|unique:roles|max:20', - ]; - } - - public function attributes() - { - return [ - 'role' => trans('acl::role.name'), - ]; - } -} \ No newline at end of file diff --git a/src/modules/ACL/Http/menus.php b/src/modules/ACL/Http/menus.php deleted file mode 100644 index 12f5ac3..0000000 --- a/src/modules/ACL/Http/menus.php +++ /dev/null @@ -1,7 +0,0 @@ -setParent($parent)->setPermission('add_remove_permission_to_role'); - -})->setOrder(5); \ No newline at end of file diff --git a/src/modules/ACL/Http/routes.php b/src/modules/ACL/Http/routes.php deleted file mode 100644 index b0b2cde..0000000 --- a/src/modules/ACL/Http/routes.php +++ /dev/null @@ -1,21 +0,0 @@ - 'dash/acl', 'middleware' => 'auth'], function() { - - Route::get('roles', 'RoleController@getRoles')->name('roles.list'); - - - Route::group(['prefix' => 'role', 'middleware' => 'auth'], function() { - - Route::get('{rid}/{mname}/permissions/edit', 'RoleController@getRolePermmissionsEdit')->name('role.permissions.edit'); - Route::post('{rid}/{mname}/permissions/edit', 'RoleController@postRolePermmissionsEdit'); - - Route::get('{rid}/disable', 'RoleController@getRoleDisable')->name('role.disable'); - Route::get('{rid}/enable', 'RoleController@getRoleEnable')->name('role.enable'); - - Route::get('new', 'RoleController@getRoleNew')->name('role.new'); - Route::post('new', 'RoleController@postRoleNew'); - - }); -}); - diff --git a/src/modules/ACL/Providers/ACLModuleServiceProvider.php b/src/modules/ACL/Providers/ACLModuleServiceProvider.php deleted file mode 100644 index f9e2dd8..0000000 --- a/src/modules/ACL/Providers/ACLModuleServiceProvider.php +++ /dev/null @@ -1,31 +0,0 @@ -initModule(); - } - - public function register() - { - - } - - public function getPermissions() - { - return [ - 'create_admin' => [], - 'add_remove_permission_to_role' => ['add_edit_role', 'disable_role'], - 'view_user_account_info' => ['edit_user_account_info', 'reset_user_password', 'disable_user'], - ]; - } -} diff --git a/src/modules/ACL/Providers/ACLWidgetServiceProvider.php b/src/modules/ACL/Providers/ACLWidgetServiceProvider.php deleted file mode 100644 index ca7133f..0000000 --- a/src/modules/ACL/Providers/ACLWidgetServiceProvider.php +++ /dev/null @@ -1,23 +0,0 @@ -initWidgets(); - } - - public function register() - { - - } -} diff --git a/src/modules/ACL/Widgets/UserStatus.php b/src/modules/ACL/Widgets/UserStatus.php deleted file mode 100644 index bafbbbe..0000000 --- a/src/modules/ACL/Widgets/UserStatus.php +++ /dev/null @@ -1,14 +0,0 @@ - 'User Status', - - 'widget_students' => 'Students', - 'widget_employees' => 'Employees', -]; \ No newline at end of file diff --git a/src/modules/ACL/resources/lang/en/permission.php b/src/modules/ACL/resources/lang/en/permission.php deleted file mode 100644 index 9372851..0000000 --- a/src/modules/ACL/resources/lang/en/permission.php +++ /dev/null @@ -1,6 +0,0 @@ - 'Permissions', - 'menu_roles' => 'Roles' -]; diff --git a/src/modules/ACL/resources/lang/en/role.php b/src/modules/ACL/resources/lang/en/role.php deleted file mode 100644 index 5c977c7..0000000 --- a/src/modules/ACL/resources/lang/en/role.php +++ /dev/null @@ -1,27 +0,0 @@ - 'Roles', - 'create_role' => 'Create Role', - 'edit_role' => 'Edit Role', - 'edit_permissions' => 'Edit Permissions', - 'edit_role_permissions' => 'Edit :role Permissions', - - 'role_desc_admin' => 'Administrators have access to all features.', - 'role_desc_student' => 'Students have access to limited features.', - 'role_desc_employee' => 'Employees include teachers, assistants and the head of the institution.', - 'role_desc_guardian' => 'Guardians have access to view their children\'s information.', - - 'new_role' => 'New Role', - - 'name' => 'Name', - 'permissions' => 'Permissions', - - 'enable_confirm' => 'Are you sure you want to enable this Role?', - 'disable_confirm' => 'Are you sure you want to disable this Role?', - - 'enabled' => 'Role enabled', - 'disabled' => 'Role disabled', - - 'updated' => 'Permissions updated' -]; \ No newline at end of file diff --git a/src/modules/ACL/resources/views/edit_role_permissions.blade.php b/src/modules/ACL/resources/views/edit_role_permissions.blade.php deleted file mode 100644 index de2fa0a..0000000 --- a/src/modules/ACL/resources/views/edit_role_permissions.blade.php +++ /dev/null @@ -1,82 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $role ? trans('acl::role.edit_role_permissions', ['role' => $role->name]) : trans('acl::role.new_role')) - -@section('breadcrumbs') - -@if($role) - - - -@endif - -@endsection - -@section('scripts') - - - -@endsection - -@section('tabs') - - @include('acl::partials.edit_role_tabs') - -@endsection - -@section('tab') - -
- -
    - - @foreach($module->permissions->where('parent_id', null) as $permission) - -
    - - @include('acl::partials.permission_row') - -
    - - @endforeach - -
- - -
- - - -
- -@endsection \ No newline at end of file diff --git a/src/modules/ACL/resources/views/modals/edit_role.blade.php b/src/modules/ACL/resources/views/modals/edit_role.blade.php deleted file mode 100644 index 150aa7e..0000000 --- a/src/modules/ACL/resources/views/modals/edit_role.blade.php +++ /dev/null @@ -1,51 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/ACL/resources/views/partials/edit_role_tabs.blade.php b/src/modules/ACL/resources/views/partials/edit_role_tabs.blade.php deleted file mode 100644 index 1604cb8..0000000 --- a/src/modules/ACL/resources/views/partials/edit_role_tabs.blade.php +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/modules/ACL/resources/views/partials/permission_row.blade.php b/src/modules/ACL/resources/views/partials/permission_row.blade.php deleted file mode 100644 index 45a8d05..0000000 --- a/src/modules/ACL/resources/views/partials/permission_row.blade.php +++ /dev/null @@ -1,31 +0,0 @@ -
  • -
    - - @if($userRepository->roleHasPermission($role, $permission)) - - - - @else - - - - @endif - - -
    - - @if($permission->children->count()) - -
      - - @foreach($permission->children as $child) - - @include('acl::partials.permission_row', ['permission' => $child]) - - @endforeach - -
    - - @endif - -
  • \ No newline at end of file diff --git a/src/modules/ACL/resources/views/roles_list.blade.php b/src/modules/ACL/resources/views/roles_list.blade.php deleted file mode 100644 index a5ff3f0..0000000 --- a/src/modules/ACL/resources/views/roles_list.blade.php +++ /dev/null @@ -1,78 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('acl::role.roles')) - -@section('count', $roles->total()) - -@section('tools') - -@can('add_edit_role') - {{ trans('acl::role.create_role') }} -@endcan - -@endsection - -@section('table') - - - - - - - - - - - - @foreach($roles as $role) - - - - - - - - @endforeach - -
    {{ trans('acl::role.name') }}{{ trans('acl::role.permissions') }}
    - - @if($role->trashed()) - {{ $role->name }} - @else - {{ $role->name }} - @endif - - - @foreach($role->permissions as $permission) - {{ $permission->name }} - @endforeach - - - @can('add_edit_role') - - @if(!in_array($role->role, app()->majorUserRoles)) - - - @if($role->trashed()) - {{ trans('common.enable') }} - @else - {{ trans('common.disable') }} - @endif - - - @endif - - {{ trans('acl::role.edit_permissions') }} - - @endcan - -
    - -
    {{ $roles->render() }}
    - -@endsection - diff --git a/src/modules/ACL/resources/views/widgets/user_status.blade.php b/src/modules/ACL/resources/views/widgets/user_status.blade.php deleted file mode 100644 index ddbe8aa..0000000 --- a/src/modules/ACL/resources/views/widgets/user_status.blade.php +++ /dev/null @@ -1,29 +0,0 @@ -make(Collejo\App\Modules\Students\Criteria\StudentListCriteria::class); -$studentRepository = app()->make(Collejo\App\Contracts\Repository\StudentRepository::class); - -$employeeCriteria = app()->make(Collejo\App\Modules\Employees\Criteria\EmployeeListCriteria::class); -$employeeRepository = app()->make(Collejo\App\Contracts\Repository\EmployeeRepository::class); - -?> - -
    -
    -

    {{ trans('acl::admin.widget_user_status') }}

    -
    -
    - -
    -
  • - {{ trans('acl::admin.widget_students') }} - {{ $studentRepository->getStudents($studentCriteria)->count() }} -
  • -
  • - {{ trans('acl::admin.widget_employees') }} - {{ $employeeRepository->getEmployees($employeeCriteria)->count() }} -
  • -
    - -
    -
    \ No newline at end of file diff --git a/src/modules/Auth/Http/Controllers/AuthController.php b/src/modules/Auth/Http/Controllers/AuthController.php deleted file mode 100644 index 458e9d7..0000000 --- a/src/modules/Auth/Http/Controllers/AuthController.php +++ /dev/null @@ -1,74 +0,0 @@ -printJson(false, [], trans('auth::auth.failed')); - } - - public function authenticated() - { - return $this->printJson(true, ['redir' => Session::get('url.intended', '/dash')]); - } - - public function __construct() - { - $this->middleware($this->guestMiddleware(), ['except' => ['logout', 'postReauth']]); - } - - protected function validator(array $data) - { - return Validator::make($data, [ - 'name' => 'required|max:255', - 'email' => 'required|email|max:255|unique:users', - 'password' => 'required|min:6|confirmed', - ]); - } - - protected function create(UserRepository $userRepository, array $data) - { - return $userRepository->create([ - 'name' => $data['name'], - 'email' => $data['email'], - 'password' => bcrypt($data['password']), - ]); - } - - public function postReauth(Request $request, Session $session) - { - if (Hash::check($request::get('password'), Auth::user()->password)) { - $session::put('reauth-token', [ - 'email' => Auth::user()->email, - 'ts' => time() - ]); - - return $this->printJson(true, ['redir' => URL::previous()]); - } - - return $this->printJson(false, [], trans('auth::auth.failed')); - } -} diff --git a/src/modules/Auth/Http/Controllers/PasswordController.php b/src/modules/Auth/Http/Controllers/PasswordController.php deleted file mode 100644 index 4e6adc2..0000000 --- a/src/modules/Auth/Http/Controllers/PasswordController.php +++ /dev/null @@ -1,21 +0,0 @@ -middleware('guest'); - } -} diff --git a/src/modules/Auth/Http/Controllers/ProfileController.php b/src/modules/Auth/Http/Controllers/ProfileController.php deleted file mode 100644 index f53b883..0000000 --- a/src/modules/Auth/Http/Controllers/ProfileController.php +++ /dev/null @@ -1,19 +0,0 @@ - Auth::user()]); - } - - public function __construct() - { - $this->middleware('auth'); - } -} diff --git a/src/modules/Auth/Http/routes.php b/src/modules/Auth/Http/routes.php deleted file mode 100644 index 1b27b5d..0000000 --- a/src/modules/Auth/Http/routes.php +++ /dev/null @@ -1,26 +0,0 @@ - 'auth'], function() { - - Route::get('login', 'AuthController@getLogin')->name('auth.login'); - Route::post('login', 'AuthController@postLogin'); - - Route::get('reauth', 'AuthController@getReauth')->name('auth.reauth'); - Route::post('reauth', 'AuthController@postReauth'); - - Route::get('logout', 'AuthController@logout')->name('auth.logout'); - -}); - -Route::group(['prefix' => 'password'], function() { - - Route::get('email', 'PasswordController@getEmail')->name('password.email'); - Route::post('email', 'PasswordController@postEmail'); - -}); - -Route::group(['prefix' => 'dash'], function() { - - Route::get('profile', 'ProfileController@getProfile')->name('user.profile'); - -}); diff --git a/src/modules/Auth/Providers/AuthModuleServiceProvider.php b/src/modules/Auth/Providers/AuthModuleServiceProvider.php deleted file mode 100644 index 8a6d118..0000000 --- a/src/modules/Auth/Providers/AuthModuleServiceProvider.php +++ /dev/null @@ -1,26 +0,0 @@ -initModule(); - } - - public function register() - { - $this->app->bind(UserRepositoryContract::class, function($app) { - return new UserRepository($app); - }); - } -} diff --git a/src/modules/Auth/resources/lang/en/auth.php b/src/modules/Auth/resources/lang/en/auth.php deleted file mode 100644 index 7da0c38..0000000 --- a/src/modules/Auth/resources/lang/en/auth.php +++ /dev/null @@ -1,14 +0,0 @@ - 'Email', - 'password' => 'Password', - 'failed' => 'These credentials do not match our records.', - 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', - 'remember_me' => 'Remember Me', - 'login' => 'Login', - 'reauth' => 'Security Check', - - 'reauth_msg' => 'Enter your password again', - 'reauth_expired' => 'Authentication must be confirmed to save data' -]; diff --git a/src/modules/Auth/resources/views/login.blade.php b/src/modules/Auth/resources/views/login.blade.php deleted file mode 100644 index c7a35a0..0000000 --- a/src/modules/Auth/resources/views/login.blade.php +++ /dev/null @@ -1,66 +0,0 @@ -@extends('collejo::layouts.auth') - -@section('title', trans('auth::auth.login')) - -@section('content') - - - -
    - -
    - -
    - -
    - -

    Collejo

    - -
    - - -
    - -
    - - -
    - -
    - - -
    - - - -
    - -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Auth/resources/views/profile.blade.php b/src/modules/Auth/resources/views/profile.blade.php deleted file mode 100644 index 30465d9..0000000 --- a/src/modules/Auth/resources/views/profile.blade.php +++ /dev/null @@ -1,28 +0,0 @@ -@extends('collejo::layouts.dash') - -@section('title', $profile->name) - -@section('content') - -
    - -
    - -
    - @if($profile->picture) - - @else - - @endif -
    - -
    -

    {{ $profile->name }}

    -
    - -
    - -
    - -@endsection - diff --git a/src/modules/Auth/resources/views/reauth.blade.php b/src/modules/Auth/resources/views/reauth.blade.php deleted file mode 100644 index e3886b4..0000000 --- a/src/modules/Auth/resources/views/reauth.blade.php +++ /dev/null @@ -1,56 +0,0 @@ -@extends('collejo::layouts.auth') - -@section('title', trans('auth::auth.reauth')) - -@section('content') - - - -
    - -
    - -
    - -
    - -

    Collejo

    - -
    - {{ trans('auth::auth.reauth_msg') }} -
    - -
    - - -
    - - - -
    - -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Classes/Http/Controllers/BatchController.php b/src/modules/Classes/Http/Controllers/BatchController.php deleted file mode 100644 index eeab88b..0000000 --- a/src/modules/Classes/Http/Controllers/BatchController.php +++ /dev/null @@ -1,203 +0,0 @@ -authorize('view_batch_details'); - - return view('classes::view_batch_terms', [ - 'batch' => $this->classRepository->findBatch($batchId) - ]); - } - - public function getBatchTermsEdit($batchId) - { - $this->authorize('add_edit_batch'); - - return view('classes::edit_batch_terms', [ - 'batch' => $this->classRepository->findBatch($batchId) - ]); - } - - public function postBatchGradesEdit(Request $request, $batchId) - { - $this->authorize('add_edit_batch'); - - $this->classRepository->assignGradesToBatch($request::get('grades', []), $batchId); - - return $this->printJson(true, [], trans('classes::batch.batch_updated')); - } - - public function getBatchGradesView($batchId) - { - $this->authorize('view_batch_details'); - - return view('classes::view_batch_grades', [ - 'batch' => $this->classRepository->findBatch($batchId) - ]); - } - - public function getBatchGradesEdit($batchId) - { - $this->authorize('add_edit_batch'); - - return view('classes::edit_batch_grades', [ - 'batch' => $this->classRepository->findBatch($batchId), - 'grades' => $this->classRepository->getGrades()->get() - ]); - } - - public function getBatchTermDelete($batchId, $termId) - { - $this->authorize('add_edit_batch'); - - $this->classRepository->deleteTerm($termId, $batchId); - - return $this->printJson(true, [], trans('classes::term.term_deleted')); - } - - public function postBatchTermEdit(UpdateTermRequest $request, $batchId, $termId) - { - $this->authorize('add_edit_batch'); - - $attributes = $request->all(); - - $attributes['start_date'] = toUTC($attributes['start_date']); - $attributes['end_date'] = toUTC($attributes['end_date']); - - $term = $this->classRepository->updateTerm($attributes, $termId, $batchId); - - return $this->printPartial(view('classes::partials.term', [ - 'batch' => $this->classRepository->findBatch($batchId), - 'term' => $term - ]), trans('classes::term.term_updated')); - } - - public function getBatchTermEdit($batchId, $termId) - { - $this->authorize('add_edit_batch'); - - return $this->printModal(view('classes::modals.edit_term', [ - 'term' => $this->classRepository->findTerm($termId, $batchId), - 'batch' => $this->classRepository->findBatch($batchId) - ])); - } - - public function postBatchTermNew(CreateTermRequest $request, $batchId) - { - $this->authorize('add_edit_batch'); - - $term = $this->classRepository->createTerm($request->all(), $batchId); - - return $this->printPartial(view('classes::partials.term', [ - 'batch' => $this->classRepository->findBatch($batchId), - 'term' => $term - ]), trans('classes::term.term_created')); - } - - public function getBatchTermNew($batchId) - { - $this->authorize('add_edit_batch'); - - return $this->printModal(view('classes::modals.edit_term', [ - 'term' => null, - 'batch' => $this->classRepository->findBatch($batchId) - ])); - } - - public function getBatchTerms($batchId) - { - $this->authorize('view_batch_details'); - - return view('classes::view_batch_terms', [ - 'batch' => $this->classRepository->findBatch($batchId) - ]); - } - - public function getBatchDetailsView($batchId) - { - $this->authorize('view_batch_details'); - - return view('classes::view_batch_details', [ - 'batch' => $this->classRepository->findBatch($batchId) - ]); - } - - public function getBatchDetailsEdit($batchId) - { - $this->authorize('add_edit_batch'); - - return view('classes::edit_batch_details', [ - 'batch' => $this->classRepository->findBatch($batchId) - ]); - } - - public function postBatchDetailsEdit(UpdateBatchRequest $request, $batchId) - { - $this->authorize('add_edit_batch'); - - $this->classRepository->updateBatch($request->all(), $batchId); - - return $this->printJson(true, [], trans('classes::batch.batch_updated')); - } - - public function postBatchNew(CreateBatchRequest $request) - { - $this->authorize('add_edit_batch'); - - $batch = $this->classRepository->createBatch($request->all()); - - return $this->printRedirect(route('batch.details.edit', $batch->id)); - } - - public function getBatchNew() - { - $this->authorize('add_edit_batch'); - - return view('classes::edit_batch_details', ['batch' => null]); - } - - public function getBatchList() - { - $this->authorize('list_batches'); - - if (!$this->classRepository->getGrades()->count()) { - return view('collejo::dash.landings.action_required', [ - 'message' => trans('classes::batch.no_grades_defined'), - 'help' => trans('classes::batch.no_grades_defined_help'), - 'action' => trans('classes::grade.create_grade'), - 'route' => route('grade.new') - ]); - } - - return view('classes::batches_list', [ - 'batches' => $this->classRepository->getBatches()->withTrashed()->paginate(config('collejo.pagination.perpage')) - ]); - } - - public function getBatchGrades(Request $request) - { - $this->authorize('view_batch_details'); - - return $this->printJson(true, $this->classRepository->findBatch($request::get('batch_id'))->grades->pluck('name', 'id')); - } - - public function __construct(ClassRepository $classRepository) - { - $this->classRepository = $classRepository; - } -} diff --git a/src/modules/Classes/Http/Controllers/GradeController.php b/src/modules/Classes/Http/Controllers/GradeController.php deleted file mode 100644 index e366c29..0000000 --- a/src/modules/Classes/Http/Controllers/GradeController.php +++ /dev/null @@ -1,152 +0,0 @@ -authorize('add_edit_class'); - - $this->classRepository->deleteClass($classId, $gradeId); - - return $this->printJson(true, [], trans('classes::class.class_deleted')); - } - - public function postGradeClassEdit(UpdateClassRequest $request, $gradeId, $classId) - { - $this->authorize('add_edit_class'); - - $class = $this->classRepository->updateClass($request->all(), $classId, $gradeId); - - return $this->printPartial(view('classes::partials.class', [ - 'grade' => $this->classRepository->findGrade($gradeId), - 'class' => $class - ]), trans('classes::class.class_updated')); - } - - public function getGradeClassEdit($gradeId, $classId) - { - $this->authorize('add_edit_class'); - - return $this->printModal(view('classes::modals.edit_class', [ - 'class' => $this->classRepository->findClass($classId, $gradeId), - 'grade' => $this->classRepository->findGrade($gradeId), - 'class_form_validator' => $this->jsValidator(UpdateClassRequest::class) - ])); - } - - public function postGradeClassNew(CreateClassRequest $request, $gradeId) - { - $this->authorize('add_edit_class'); - - $class = $this->classRepository->createClass($request->all(), $gradeId); - - return $this->printPartial(view('classes::partials.class', [ - 'grade' => $this->classRepository->findGrade($gradeId), - 'class' => $class - ]), 'Class Created'); - } - - public function getGradeClassNew($gradeId) - { - $this->authorize('add_edit_class'); - - return $this->printModal(view('classes::modals.edit_class', [ - 'class' => null, - 'grade' => $this->classRepository->findGrade($gradeId), - 'class_form_validator' => $this->jsValidator(CreateClassRequest::class) - ])); - } - - public function getGradeDetailsView($gradeId) - { - $this->authorize('view_grade_details'); - - return view('classes::view_grade_details', ['grade' => $this->classRepository->findGrade($gradeId)]); - } - - public function getGradeClassesView($gradeId) - { - $this->authorize('list_classes'); - - return view('classes::view_grade_classes', ['grade' => $this->classRepository->findGrade($gradeId)]); - } - - public function getGradeClassesEdit($gradeId) - { - $this->authorize('add_edit_class'); - - return view('classes::edit_grade_classes', ['grade' => $this->classRepository->findGrade($gradeId)]); - } - - public function postGradeDetailsEdit(UpdateGradeRequest $request, $gradeId) - { - $this->authorize('add_edit_grade'); - - $this->classRepository->updateGrade($request->all(), $gradeId); - - return $this->printJson(true, [], trans('classes::grade.grade_updated')); - } - - public function getGradeDetailsEdit($gradeId) - { - $this->authorize('add_edit_grade'); - - return view('classes::edit_grade_details', [ - 'grade' => $this->classRepository->findGrade($gradeId), - 'grade_form_validator' => $this->jsValidator(UpdateGradeRequest::class) - ]); - } - - public function postGradeNew(CreateGradeRequest $request) - { - $this->authorize('add_edit_grade'); - - $grade = $this->classRepository->createGrade($request->all()); - - return $this->printRedirect(route('grade.classes.edit', $grade->id)); - } - - public function getGradeNew() - { - $this->authorize('add_edit_grade'); - - return view('classes::edit_grade_details', [ - 'grade' => null, - 'grade_form_validator' => $this->jsValidator(CreateGradeRequest::class) - ]); - } - - public function getGradeList(Request $request) - { - $this->authorize('list_grades'); - - return view('classes::grades_list', [ - 'grades' => $this->classRepository->getGrades()->paginate(config('collejo.pagination.perpage')) - ]); - } - - public function getGradeClasses(Request $request) - { - $this->authorize('list_classes'); - - return $this->printJson(true, $this->classRepository->findGrade($request::get('grade_id'))->classes->pluck('name', 'id')); - } - - public function __construct(ClassRepository $classRepository) - { - $this->classRepository = $classRepository; - } -} diff --git a/src/modules/Classes/Http/Requests/CreateBatchRequest.php b/src/modules/Classes/Http/Requests/CreateBatchRequest.php deleted file mode 100644 index 1431a50..0000000 --- a/src/modules/Classes/Http/Requests/CreateBatchRequest.php +++ /dev/null @@ -1,23 +0,0 @@ - 'required' - ]; - } - - public function attributes() - { - return [ - 'name' => 'Batch Name' - ]; - } -} \ No newline at end of file diff --git a/src/modules/Classes/Http/Requests/CreateClassRequest.php b/src/modules/Classes/Http/Requests/CreateClassRequest.php deleted file mode 100644 index 23612aa..0000000 --- a/src/modules/Classes/Http/Requests/CreateClassRequest.php +++ /dev/null @@ -1,23 +0,0 @@ - 'required' - ]; - } - - public function attributes() - { - return [ - 'name' => 'Class Name' - ]; - } -} \ No newline at end of file diff --git a/src/modules/Classes/Http/Requests/CreateGradeRequest.php b/src/modules/Classes/Http/Requests/CreateGradeRequest.php deleted file mode 100644 index 8be95d3..0000000 --- a/src/modules/Classes/Http/Requests/CreateGradeRequest.php +++ /dev/null @@ -1,23 +0,0 @@ - 'required' - ]; - } - - public function attributes() - { - return [ - 'name' => 'Grade Name' - ]; - } -} \ No newline at end of file diff --git a/src/modules/Classes/Http/Requests/CreateTermRequest.php b/src/modules/Classes/Http/Requests/CreateTermRequest.php deleted file mode 100644 index 060d648..0000000 --- a/src/modules/Classes/Http/Requests/CreateTermRequest.php +++ /dev/null @@ -1,27 +0,0 @@ - 'required', - 'start_date' => 'required', - 'end_date' => 'required' - ]; - } - - public function attributes() - { - return [ - 'name' => 'Term Name', - 'start_date' => 'Start Date', - 'end_date' => 'End Date', - ]; - } -} \ No newline at end of file diff --git a/src/modules/Classes/Http/Requests/UpdateBatchRequest.php b/src/modules/Classes/Http/Requests/UpdateBatchRequest.php deleted file mode 100644 index e32ded5..0000000 --- a/src/modules/Classes/Http/Requests/UpdateBatchRequest.php +++ /dev/null @@ -1,24 +0,0 @@ -rules(); - } - - public function attributes() - { - $createRequest = new CreateBatchRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Classes/Http/Requests/UpdateClassRequest.php b/src/modules/Classes/Http/Requests/UpdateClassRequest.php deleted file mode 100644 index 3060919..0000000 --- a/src/modules/Classes/Http/Requests/UpdateClassRequest.php +++ /dev/null @@ -1,24 +0,0 @@ -rules(); - } - - public function attributes() - { - $createRequest = new CreateClassRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Classes/Http/Requests/UpdateGradeRequest.php b/src/modules/Classes/Http/Requests/UpdateGradeRequest.php deleted file mode 100644 index 38e6004..0000000 --- a/src/modules/Classes/Http/Requests/UpdateGradeRequest.php +++ /dev/null @@ -1,24 +0,0 @@ -rules(); - } - - public function attributes() - { - $createRequest = new CreateGradeRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Classes/Http/Requests/UpdateTermRequest.php b/src/modules/Classes/Http/Requests/UpdateTermRequest.php deleted file mode 100644 index ea390ce..0000000 --- a/src/modules/Classes/Http/Requests/UpdateTermRequest.php +++ /dev/null @@ -1,24 +0,0 @@ -rules(); - } - - public function attributes() - { - $createRequest = new CreateTermRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Classes/Http/menus.php b/src/modules/Classes/Http/menus.php deleted file mode 100644 index 4e223fb..0000000 --- a/src/modules/Classes/Http/menus.php +++ /dev/null @@ -1,9 +0,0 @@ -setParent($parent)->setPermission('list_batches'); - - Menu::create('grades.list', trans('classes::grade.menu_grades'))->setParent($parent)->setPermission('list_grades'); - -})->setOrder(1); diff --git a/src/modules/Classes/Http/routes.php b/src/modules/Classes/Http/routes.php deleted file mode 100644 index 98b50c3..0000000 --- a/src/modules/Classes/Http/routes.php +++ /dev/null @@ -1,65 +0,0 @@ - 'dash/batches', 'middleware' => 'auth'], function() { - - Route::get('/list', 'BatchController@getBatchList')->name('batches.list'); - -}); - -Route::group(['prefix' => 'dash/batch', 'middleware' => 'auth'], function() { - - Route::get('/grades', 'BatchController@getBatchGrades')->middleware('ajax')->name('batch.grades.search'); - - Route::get('/new', 'BatchController@getBatchNew')->name('batch.new'); - Route::post('/new', 'BatchController@postBatchNew'); - - Route::get('/{id}/details/view', 'BatchController@getBatchDetailsView')->name('batch.details.view'); - Route::get('/{id}/details/edit', 'BatchController@getBatchDetailsEdit')->name('batch.details.edit'); - Route::post('/{id}/details/edit', 'BatchController@postBatchDetailsEdit'); - - Route::get('/{id}/terms/view', 'BatchController@getBatchTermsView')->name('batch.terms.view'); - Route::get('/{id}/terms/edit', 'BatchController@getBatchTermsEdit')->name('batch.terms.edit'); - - Route::get('/{id}/term/new', 'BatchController@getBatchTermNew')->name('batch.term.new'); - Route::post('/{id}/term/new', 'BatchController@postBatchTermNew'); - - Route::get('/{id}/term/{tid}/edit', 'BatchController@getBatchTermEdit')->name('batch.term.edit'); - Route::post('/{id}/term/{tid}/edit', 'BatchController@postBatchTermEdit'); - - Route::get('/{id}/term/{tid}/delete', 'BatchController@getBatchTermDelete')->name('batch.term.delete'); - - Route::get('/{id}/grades/view', 'BatchController@getBatchGradesView')->name('batch.grades.view'); - Route::get('/{id}/grades/edit', 'BatchController@getBatchGradesEdit')->name('batch.grades.edit'); - Route::post('/{id}/grades/edit', 'BatchController@postBatchGradesEdit'); -}); - -Route::group(['prefix' => 'dash/grades', 'middleware' => 'auth'], function() { - - Route::get('/list', 'GradeController@getGradeList')->name('grades.list'); - -}); - -Route::group(['prefix' => 'dash/grade', 'middleware' => 'auth'], function() { - - Route::get('/new', 'GradeController@getGradeNew')->name('grade.new'); - Route::post('/new', 'GradeController@postGradeNew'); - - Route::get('/{gid}/details/view', 'GradeController@getGradeDetailsView')->name('grade.details.view'); - Route::get('/{gid}/details/edit', 'GradeController@getGradeDetailsEdit')->name('grade.details.edit'); - Route::post('/{gid}/details/edit', 'GradeController@postGradeDetailsEdit'); - - Route::get('/{gid}/delete', 'GradeController@getDelete')->name('grade.delete'); - - Route::get('/{gid}/classes/view', 'GradeController@getGradeClassesView')->name('grade.classes.view'); - Route::get('/{gid}/classes/edit', 'GradeController@getGradeClassesEdit')->name('grade.classes.edit'); - - Route::get('/{id}/class/new', 'GradeController@getGradeClassNew')->name('grade.class.new'); - Route::post('/{id}/class/new', 'GradeController@postGradeClassNew'); - - Route::get('/{id}/class/{tid}/edit', 'GradeController@getGradeClassEdit')->name('grade.class.edit'); - Route::post('/{id}/class/{tid}/edit', 'GradeController@postGradeClassEdit'); - - Route::get('/{id}/class/{tid}/delete', 'GradeController@getGradeClassDelete')->name('grade.class.delete'); - - Route::get('/classes', 'GradeController@getGradeClasses')->middleware('ajax')->name('grade.classes.search'); -}); \ No newline at end of file diff --git a/src/modules/Classes/Providers/ClassesModuleServiceProvider.php b/src/modules/Classes/Providers/ClassesModuleServiceProvider.php deleted file mode 100644 index c0f0cea..0000000 --- a/src/modules/Classes/Providers/ClassesModuleServiceProvider.php +++ /dev/null @@ -1,31 +0,0 @@ -initModule(); - } - - public function register() - { - - } - - public function getPermissions() - { - return [ - 'view_batch_details' => ['add_edit_batch', 'list_batches'], - 'list_batches' => ['transfer_batch', 'graduate_batch'], - 'view_grade_details' => ['add_edit_grade', 'list_grades', 'view_class_details'], - 'view_class_details' => ['add_edit_class', 'list_classes', 'list_class_students'], - ]; - } -} diff --git a/src/modules/Classes/resources/lang/en/batch.php b/src/modules/Classes/resources/lang/en/batch.php deleted file mode 100644 index e2db3d4..0000000 --- a/src/modules/Classes/resources/lang/en/batch.php +++ /dev/null @@ -1,22 +0,0 @@ - 'Batches', - 'batches' => 'Batches', - 'batches_list' => 'Batches List', - 'batch_details' => 'Batch Details', - 'batch_terms' => trans('entities.term.plural'), - 'batch_grades' => trans('entities.grade.singular'), - 'create_batch' => 'Create Batch', - 'new_batch' => 'New Batch', - 'edit_batch' => 'Edit Batch', - 'name' => 'Batch Name', - 'grades' => trans('entities.grade.plural'), - 'assign_grades' => 'Assign ' . trans('entities.grade.plural'), - 'view_students' => 'View Students', - - 'empty_list' => 'There are no Batches in the system', - 'no_grades_defined' => 'No ' . trans('entities.grade.plural') . ' or Batches defined.', - 'no_grades_defined_help' => 'First you need to define ' . trans('entities.grade.plural') . ' for your institution. After creating ' . trans('entities.grade.plural') . ' you can create Batches and they will be listed here.', - 'batch_updated' => 'Batch updated' -]; \ No newline at end of file diff --git a/src/modules/Classes/resources/lang/en/class.php b/src/modules/Classes/resources/lang/en/class.php deleted file mode 100644 index 3f863c7..0000000 --- a/src/modules/Classes/resources/lang/en/class.php +++ /dev/null @@ -1,10 +0,0 @@ - 'Classes', - 'new_class' => 'New Class', - 'name' => 'Name', - 'empty_list' => 'This ' . trans('entities.grade.singular') . ' does not have any Classes defined.', - 'class_deleted' => 'Class deleted.', - 'class_updated' => 'Class updated.' -]; \ No newline at end of file diff --git a/src/modules/Classes/resources/lang/en/grade.php b/src/modules/Classes/resources/lang/en/grade.php deleted file mode 100644 index 10e6139..0000000 --- a/src/modules/Classes/resources/lang/en/grade.php +++ /dev/null @@ -1,18 +0,0 @@ - trans('entities.grade.plural'), - 'grades' => trans('entities.grade.plural'), - 'grades_list' => trans('entities.grade.plural') . ' List', - 'edit_grade' => 'Edit ' . trans('entities.grade.singular'), - 'new_grade' => 'New ' . trans('entities.grade.singular'), - 'create_grade' => 'Create ' . trans('entities.grade.singular') . '', - 'empty_list' => 'There are no ' . trans('entities.grade.plural') . ' in the system.', - 'grade_updated' => trans('entities.grade.singular') . ' updated.', - - 'grade_details' => trans('entities.grade.singular') . ' Details', - 'name_placeholder' => trans('entities.grade.singular') . ' x', - 'name' => 'Name', - 'classes' => 'Classes', - 'create_classes' => 'Create Classes' -]; \ No newline at end of file diff --git a/src/modules/Classes/resources/lang/en/term.php b/src/modules/Classes/resources/lang/en/term.php deleted file mode 100644 index c97d5d3..0000000 --- a/src/modules/Classes/resources/lang/en/term.php +++ /dev/null @@ -1,10 +0,0 @@ - trans('entities.term.plural'), - 'new_term' => 'New ' . trans('entities.grade.singular'), - 'empty_list' => 'This Batch does not have any ' . trans('entities.grade.plural') . ' defined.', - 'term_created' => trans('entities.grade.singular') . ' created', - 'term_deleted' => trans('entities.grade.singular') . ' deleted', - 'term_updated' => trans('entities.grade.singular') . ' updated' -]; \ No newline at end of file diff --git a/src/modules/Classes/resources/views/batches_list.blade.php b/src/modules/Classes/resources/views/batches_list.blade.php deleted file mode 100644 index 9eb8902..0000000 --- a/src/modules/Classes/resources/views/batches_list.blade.php +++ /dev/null @@ -1,95 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('classes::batch.batches')) - -@section('count', $batches->total()) - -@section('tools') - - @can('add_edit_batch') - {{ trans('classes::batch.create_batch') }} - @endcan - -@endsection - -@section('table') - -@if($batches->count()) - - - - - - - - - - - - @foreach($batches as $batch) - - - - - - - - - - @endforeach - -
    {{ trans('classes::batch.name') }}{{ trans('classes::batch.grades') }}
    -
    - @can('view_batch_details') - {{ $batch->name }} - @endcan - @cannot('view_batch_details') - {{ $batch->name }} - @endcan -
    -
    - @if($batch->grades->count()) - @foreach($batch->grades as $grade) - - @can('view_grade_details') - {{ $grade->name }} - @endcan - - @cannot('view_grade_details') - {{ $grade->name }} - @endcannot - - @endforeach - @else - @can('add_edit_batch') - {{ trans('classes::batch.assign_grades') }} - @endcan - @endif - - @if($batch->trashed()) - {{ trans('common.active') }} - @else - {{ trans('common.inactive') }} - @endif - - @can('list_students') - {{ trans('classes::batch.view_students') }} - @endcan - - @can('add_edit_batch') - {{ trans('common.edit') }} - @endcan -
    - -
    {{ $batches->render() }}
    - -@else - -
    -
    {{ trans('classes::batch.empty_list') }}
    -
    - -@endif - -@endsection - diff --git a/src/modules/Classes/resources/views/edit_batch_details.blade.php b/src/modules/Classes/resources/views/edit_batch_details.blade.php deleted file mode 100644 index 604caa0..0000000 --- a/src/modules/Classes/resources/views/edit_batch_details.blade.php +++ /dev/null @@ -1,78 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $batch ? trans('classes::batch.edit_batch') : trans('classes::batch.new_batch')) - -@section('breadcrumbs') - -@if($batch) - - - -@endif - -@endsection - -@section('scripts') - - - -@endsection - -@section('tabs') - - @include('classes::partials.edit_batch_tabs') - -@endsection - -@section('tab') - -
    - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    -
    - -
    - - -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Classes/resources/views/edit_batch_grades.blade.php b/src/modules/Classes/resources/views/edit_batch_grades.blade.php deleted file mode 100644 index 0384aca..0000000 --- a/src/modules/Classes/resources/views/edit_batch_grades.blade.php +++ /dev/null @@ -1,90 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', trans('classes::batch.edit_batch')) - -@section('breadcrumbs') - - - -@endsection - -@section('scripts') - - - -@endsection - -@section('tabs') - - @include('classes::partials.edit_batch_tabs') - -@endsection - -@section('tab') - -
    - -
    -
    - -
    - - @foreach($grades as $grade) - -
    - - @if($batch->grades->contains($grade->id)) - - @else - - @endif - - -
    - - @endforeach - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    -
    - -
    - - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Classes/resources/views/edit_batch_terms.blade.php b/src/modules/Classes/resources/views/edit_batch_terms.blade.php deleted file mode 100644 index 33dfd1e..0000000 --- a/src/modules/Classes/resources/views/edit_batch_terms.blade.php +++ /dev/null @@ -1,65 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', trans('classes::batch.edit_batch')) - -@section('breadcrumbs') - - - -@endsection - -@section('scripts') - - - -@endsection - -@section('tools') - - {{ trans('classes::term.new_term') }} - -@endsection - -@section('tabs') - - @include('classes::partials.edit_batch_tabs') - -@endsection - -@section('tab') - - -
    - - @if($batch->terms->count()) - - @foreach($batch->terms as $term) - - @include('classes::partials.term') - - @endforeach - - @else - -
    -
    {{ trans('classes::term.empty_list') }}
    -
    - - @endif - -
    - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Classes/resources/views/edit_grade_classes.blade.php b/src/modules/Classes/resources/views/edit_grade_classes.blade.php deleted file mode 100644 index 093a61d..0000000 --- a/src/modules/Classes/resources/views/edit_grade_classes.blade.php +++ /dev/null @@ -1,58 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', trans('classes::grade.edit_grade')) - -@section('breadcrumbs') - - - -@endsection - -@section('tools') - -@can('add_edit_class') - {{ trans('classes::class.new_class') }} -@endcan - - -@endsection - -@section('tabs') - - @include('classes::partials.edit_grade_tabs') - -@endsection - -@section('tab') - - -
    - - - - - - - - - @foreach($grade->classes as $class) - - @include('classes::partials.class') - - @endforeach - -
    {{ trans('classes::class.name') }}
    - - -
    {{ trans('classes::class.empty_list') }}
    - -
    - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Classes/resources/views/edit_grade_details.blade.php b/src/modules/Classes/resources/views/edit_grade_details.blade.php deleted file mode 100644 index 899b54f..0000000 --- a/src/modules/Classes/resources/views/edit_grade_details.blade.php +++ /dev/null @@ -1,79 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $grade ? trans('classes::grade.edit_grade') : trans('classes::grade.new_grade')) - -@section('breadcrumbs') - -@if($grade) - - - -@endif - -@endsection - -@section('scripts') - - - -@endsection - -@section('tabs') - - @include('classes::partials.edit_grade_tabs') - -@endsection - -@section('tab') - -
    - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    -
    - -
    - - -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Classes/resources/views/grades_list.blade.php b/src/modules/Classes/resources/views/grades_list.blade.php deleted file mode 100644 index 09d7be7..0000000 --- a/src/modules/Classes/resources/views/grades_list.blade.php +++ /dev/null @@ -1,64 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('classes::grade.grades')) - -@section('count', $grades->total()) - -@section('tools') - - @can('add_edit_grade') - {{ trans('classes::grade.create_grade') }} - @endcan - -@endsection - -@section('table') - -@if($grades->count()) - - - - - - - - - - @foreach($grades as $grade) - - - - - - - - @endforeach - -
    {{ trans('classes::grade.name') }}{{ trans('classes::grade.classes') }}
    - - - @if($grade->classes->count()) - @foreach($grade->classes as $class) - {{ $class->name }} - @endforeach - @else - {{ trans('classes::grade.create_classes') }} - @endif - - @can('add_edit_grade') - {{ trans('common.edit') }} - @endcan -
    - -
    {{ $grades->render() }}
    - -@else - -
    -
    {{ trans('classes::grade.empty_list') }}
    -
    - -@endif - -@endsection - diff --git a/src/modules/Classes/resources/views/modals/edit_class.blade.php b/src/modules/Classes/resources/views/modals/edit_class.blade.php deleted file mode 100644 index 63e08c6..0000000 --- a/src/modules/Classes/resources/views/modals/edit_class.blade.php +++ /dev/null @@ -1,48 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Classes/resources/views/modals/edit_term.blade.php b/src/modules/Classes/resources/views/modals/edit_term.blade.php deleted file mode 100644 index 3b7826a..0000000 --- a/src/modules/Classes/resources/views/modals/edit_term.blade.php +++ /dev/null @@ -1,65 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Classes/resources/views/partials/class.blade.php b/src/modules/Classes/resources/views/partials/class.blade.php deleted file mode 100644 index 40838eb..0000000 --- a/src/modules/Classes/resources/views/partials/class.blade.php +++ /dev/null @@ -1,14 +0,0 @@ - - {{ $class->name }} - - @can('add_edit_class') - - - - - - - - @endcan - - \ No newline at end of file diff --git a/src/modules/Classes/resources/views/partials/edit_batch_tabs.blade.php b/src/modules/Classes/resources/views/partials/edit_batch_tabs.blade.php deleted file mode 100644 index 6c5dea4..0000000 --- a/src/modules/Classes/resources/views/partials/edit_batch_tabs.blade.php +++ /dev/null @@ -1,23 +0,0 @@ -@if(is_null($batch)) - - - -@else - - - -@endif \ No newline at end of file diff --git a/src/modules/Classes/resources/views/partials/edit_grade_tabs.blade.php b/src/modules/Classes/resources/views/partials/edit_grade_tabs.blade.php deleted file mode 100644 index b3b582a..0000000 --- a/src/modules/Classes/resources/views/partials/edit_grade_tabs.blade.php +++ /dev/null @@ -1,19 +0,0 @@ -@if(is_null($grade)) - - - -@else - - - -@endif \ No newline at end of file diff --git a/src/modules/Classes/resources/views/partials/term.blade.php b/src/modules/Classes/resources/views/partials/term.blade.php deleted file mode 100644 index 0864af5..0000000 --- a/src/modules/Classes/resources/views/partials/term.blade.php +++ /dev/null @@ -1,25 +0,0 @@ -
    -
    -
    -
    -
    -
    {{ $term->name }}
    -
    -
    -
    -
    {{ formatDate(toUserTz($term->start_date)) }}
    -
    -
    -
    -
    {{ formatDate(toUserTz($term->end_date)) }}
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/src/modules/Classes/resources/views/partials/view_batch_tabs.blade.php b/src/modules/Classes/resources/views/partials/view_batch_tabs.blade.php deleted file mode 100644 index 1b7ecde..0000000 --- a/src/modules/Classes/resources/views/partials/view_batch_tabs.blade.php +++ /dev/null @@ -1,11 +0,0 @@ - \ No newline at end of file diff --git a/src/modules/Classes/resources/views/partials/view_grade_tabs.blade.php b/src/modules/Classes/resources/views/partials/view_grade_tabs.blade.php deleted file mode 100644 index a85f369..0000000 --- a/src/modules/Classes/resources/views/partials/view_grade_tabs.blade.php +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/src/modules/Classes/resources/views/view_batch_details.blade.php b/src/modules/Classes/resources/views/view_batch_details.blade.php deleted file mode 100644 index 61e2339..0000000 --- a/src/modules/Classes/resources/views/view_batch_details.blade.php +++ /dev/null @@ -1,33 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $batch->name) - -@section('tools') - - @can('add_edit_batch') - - {{ trans('common.edit') }} - - @endcan - -@endsection - -@section('tabs') - - @include('classes::partials.view_batch_tabs') - -@endsection - -@section('tab') - -
    -
    -
    {{ trans('classes::batch.name') }}
    -
    {{ $batch->name }}
    -
    -
    - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Classes/resources/views/view_batch_grades.blade.php b/src/modules/Classes/resources/views/view_batch_grades.blade.php deleted file mode 100644 index b185a00..0000000 --- a/src/modules/Classes/resources/views/view_batch_grades.blade.php +++ /dev/null @@ -1,28 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $batch->name) - -@section('tools') - - @can('add_edit_batch') - {{ trans('common.edit') }} - @endcan - -@endsection - -@section('tabs') - - @include('classes::partials.view_batch_tabs') - -@endsection - -@section('tab') - -@foreach($batch->grades as $grade) - {{ $grade->name }} -@endforeach - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Classes/resources/views/view_batch_terms.blade.php b/src/modules/Classes/resources/views/view_batch_terms.blade.php deleted file mode 100644 index e704d3e..0000000 --- a/src/modules/Classes/resources/views/view_batch_terms.blade.php +++ /dev/null @@ -1,28 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $batch->name) - -@section('tools') - - @can('add_edit_batch') - {{ trans('common.edit') }} - @endcan - -@endsection - -@section('tabs') - - @include('classes::partials.view_batch_tabs') - -@endsection - -@section('tab') - -@foreach($batch->terms as $terms) - {{ $terms->name }} -@endforeach - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Classes/resources/views/view_grade_classes.blade.php b/src/modules/Classes/resources/views/view_grade_classes.blade.php deleted file mode 100644 index f7d8ca2..0000000 --- a/src/modules/Classes/resources/views/view_grade_classes.blade.php +++ /dev/null @@ -1,47 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $grade->name) - -@section('tools') - - @can('add_edit_class') - {{ trans('common.edit') }} - @endcan - -@endsection - -@section('tabs') - - @include('classes::partials.view_grade_tabs') - -@endsection - -@section('tab') - - -
    - - - - - - - - - @foreach($grade->classes as $class) - - @include('classes::partials.class') - - @endforeach - -
    {{ trans('classes::class.name') }}
    - - -
    {{ trans('classes::class.empty_list') }}
    - -
    - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Classes/resources/views/view_grade_details.blade.php b/src/modules/Classes/resources/views/view_grade_details.blade.php deleted file mode 100644 index 0173b97..0000000 --- a/src/modules/Classes/resources/views/view_grade_details.blade.php +++ /dev/null @@ -1,31 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $grade->name) - -@section('tools') - - @can('add_edit_batch') - {{ trans('common.edit') }} - @endcan - -@endsection - -@section('tabs') - - @include('classes::partials.view_grade_tabs') - -@endsection - -@section('tab') - -
    -
    -
    {{ trans('classes::grade.name') }}
    -
    {{ $grade->name }}
    -
    -
    - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Employees/Criteria/EmployeeListCriteria.php b/src/modules/Employees/Criteria/EmployeeListCriteria.php deleted file mode 100644 index f7c5172..0000000 --- a/src/modules/Employees/Criteria/EmployeeListCriteria.php +++ /dev/null @@ -1,41 +0,0 @@ - 'CONCAT(users.first_name, \' \', users.last_name)' - ]; - - protected $joins = [ - ['users', 'employees.user_id', 'users.id'] - ]; - - protected $form = [ - 'employee_department' => [ - 'type' => 'select', - 'itemsCallback' => 'employeeDepartments' - ] - ]; - - protected $eagerLoads = ['department']; - - public function callbackEmployeeDepartments() - { - return app()->make(EmployeeRepository::class)->getEmployeeDepartments()->get(); - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Controllers/EmployeeCategoryController.php b/src/modules/Employees/Http/Controllers/EmployeeCategoryController.php deleted file mode 100644 index e502b6e..0000000 --- a/src/modules/Employees/Http/Controllers/EmployeeCategoryController.php +++ /dev/null @@ -1,56 +0,0 @@ -printModal(view('employees::modals.edit_employee_category', [ - 'employee_category' => null, - 'category_form_validator' => $this->jsValidator(CreateEmployeeCategoryRequest::class) - ])); - } - - public function postEmployeeCategoryNew(CreateEmployeeCategoryRequest $request) - { - return $this->printPartial(view('employees::partials.employee_category', [ - 'employee_category' => $this->employeeRepository->createEmployeeCategory($request->all()), - ]), trans('employees::employee_category.employee_category_created')); - } - - public function getEmployeeCategoryEdit($id) - { - return $this->printModal(view('employees::modals.edit_employee_category', [ - 'employee_category' => $this->employeeRepository->findEmployeeCategory($id), - 'category_form_validator' => $this->jsValidator(UpdateEmployeeCategoryRequest::class) - ])); - } - - public function postEmployeeCategoryEdit(UpdateEmployeeCategoryRequest $request, $id) - { - return $this->printPartial(view('employees::partials.employee_category', [ - 'employee_category' => $this->employeeRepository->updateEmployeeCategory($request->all(), $id), - ]), trans('employees::employee_category.employee_category_updated')); - } - - public function getEmployeeCategoryList() - { - return view('employees::employee_category_list', [ - 'employee_categories' => $this->employeeRepository->getEmployeeCategories()->paginate(config('collejo.pagination.perpage')) - ]); - } - - public function __construct(EmployeeRepository $employeeRepository) - { - $this->employeeRepository = $employeeRepository; - } -} diff --git a/src/modules/Employees/Http/Controllers/EmployeeController.php b/src/modules/Employees/Http/Controllers/EmployeeController.php deleted file mode 100644 index ce7e7a7..0000000 --- a/src/modules/Employees/Http/Controllers/EmployeeController.php +++ /dev/null @@ -1,192 +0,0 @@ -authorize('view_employee_contact_details'); - - return view('employees::view_employee_details', [ - 'employee' => $this->employeeRepository->findEmployee($employeeId) - ]); - } - - public function getEmployeeAddressesView($employeeId) - { - $this->authorize('view_employee_contact_details'); - - return view('employees::view_employee_addreses', ['employee' => $this->employeeRepository->findEmployee($employeeId)]); - } - - public function getEmployeeAddressesEdit($employeeId) - { - $this->authorize('edit_employee_contact_details'); - - $this->authorize('edit_employee_contact_details'); - - return view('employees::edit_employee_addreses', ['employee' => $this->employeeRepository->findEmployee($employeeId)]); - } - - public function getEmployeeAddressNew($employeeId) - { - $this->authorize('edit_employee_contact_details'); - - return $this->printModal(view('employees::modals.edit_address', [ - 'address' => null, - 'employee' => $this->employeeRepository->findEmployee($employeeId) - ])); - } - - public function postEmployeeAddressNew(CreateAddressRequest $request, $employeeId) - { - $this->authorize('edit_employee_contact_details'); - - $address = $this->employeeRepository->createAddress($request->all(), $employeeId); - - return $this->printPartial(view('employees::partials.address', [ - 'employee' => $this->employeeRepository->findEmployee($employeeId), - 'address' => $address - ]), trans('employees::address.address_created')); - } - - public function getEmployeeAddressEdit($employeeId, $addressId) - { - $this->authorize('edit_employee_contact_details'); - - return $this->printModal(view('employees::modals.edit_address', [ - 'address' => $this->employeeRepository->findAddress($addressId, $employeeId), - 'employee' => $this->employeeRepository->findemployee($employeeId) - ])); - } - - public function postEmployeeAddressEdit(UpdateAddressRequest $request, $employeeId, $addressId) - { - $this->authorize('edit_employee_contact_details'); - - $address = $this->employeeRepository->updateAddress($request->all(), $addressId, $employeeId); - - return $this->printPartial(view('employees::partials.address', [ - 'employee' => $this->employeeRepository->findemployee($employeeId), - 'address' => $address - ]), trans('employees::address.address_updated')); - } - - public function getEmployeeAddressDelete($employeeId, $addressId) - { - $this->authorize('edit_employee_contact_details'); - - $this->employeeRepository->deleteAddress($addressId, $employeeId); - - return $this->printJson(true, [], trans('employees::address.address_deleted')); - } - - public function getEmployeeAccountView($employeeId) - { - $this->authorize('view_user_account_info'); - - $this->middleware('reauth'); - - return view('employees::view_employee_account', [ - 'employee' => $this->employeeRepository->findEmployee($employeeId) - ]); - } - - public function getEmployeeAccountEdit($employeeId) - { - $this->authorize('edit_user_account_info'); - - $this->middleware('reauth'); - - return view('employees::edit_employee_account', [ - 'employee' => $this->employeeRepository->findEmployee($employeeId), - 'account_form_validator' => $this->jsValidator(UpdateEmployeeAccountRequest::class) - ]); - } - - public function postEmployeeAccountEdit(UpdateEmployeeAccountRequest $request, $employeeId) - { - $this->authorize('edit_user_account_info'); - - $this->middleware('reauth'); - - $this->employeeRepository->updateEmployee($request->all(), $employeeId); - - return $this->printJson(true, [], trans('employees::employee.employee_updated')); - } - - - public function getEmployeeNew() - { - $this->authorize('create_employee'); - - return view('employees::edit_employee_details', [ - 'employee' => null, - 'employee_positions' => $this->employeeRepository->getEmployeePositions()->get(), - 'employee_departments' => $this->employeeRepository->getEmployeeDepartments()->get(), - 'employee_grades' => $this->employeeRepository->getEmployeeGrades()->get(), - 'employee_form_validator' => $this->jsValidator(CreateEmployeeDetailsRequest::class) - ]); - } - - public function postEmployeeNew(CreateEmployeeDetailsRequest $request) - { - $this->authorize('create_employee'); - - $employee = $this->employeeRepository->createEmployee($request->all()); - - return $this->printRedirect(route('employee.details.edit', $employee->id)); - } - - public function getEmployeeDetailsEdit($id) - { - $this->authorize('edit_employee_general_details'); - - return view('employees::edit_employee_details', [ - 'employee' => $this->employeeRepository->findEmployee($id), - 'employee_positions' => $this->employeeRepository->getEmployeePositions()->get(), - 'employee_departments' => $this->employeeRepository->getEmployeeDepartments()->get(), - 'employee_grades' => $this->employeeRepository->getEmployeeGrades()->get(), - 'employee_form_validator' => $this->jsValidator(UpdateEmployeeDetailsRequest::class) - ]); - } - - public function postEmployeeDetailsEdit(UpdateEmployeeDetailsRequest $request, $id) - { - $this->authorize('edit_employee_general_details'); - - $employee = $this->employeeRepository->updateEmployee($request->all(), $id); - - return $this->printJson(true, [], trans('employees::employee.employee_updated')); - } - - public function getEmployeeList(EmployeeListCriteria $criteria) - { - $this->authorize('list_employees'); - - return view('employees::employee_list', [ - 'employees' => $this->employeeRepository->getEmployees($criteria) - ->with('user', 'employeeDepartment', 'employeePosition', 'employeeGrade') - ->paginate(), - 'criteria' => $criteria - ]); - } - - public function __construct(EmployeeRepository $employeeRepository) - { - $this->employeeRepository = $employeeRepository; - } -} diff --git a/src/modules/Employees/Http/Controllers/EmployeeDepartmentController.php b/src/modules/Employees/Http/Controllers/EmployeeDepartmentController.php deleted file mode 100644 index d9bd0ca..0000000 --- a/src/modules/Employees/Http/Controllers/EmployeeDepartmentController.php +++ /dev/null @@ -1,56 +0,0 @@ -printModal(view('employees::modals.edit_employee_department', [ - 'employee_department' => null, - 'department_form_validator' => $this->jsValidator(CreateEmployeeDepartmentRequest::class) - ])); - } - - public function postEmployeeDepartmentNew(CreateEmployeeDepartmentRequest $request) - { - return $this->printPartial(view('employees::partials.employee_department', [ - 'employee_department' => $this->employeeRepository->createEmployeeDepartment($request->all()), - ]), trans('employees::employee_department.employee_department_created')); - } - - public function getEmployeeDepartmentEdit($id) - { - return $this->printModal(view('employees::modals.edit_employee_department', [ - 'employee_department' => $this->employeeRepository->findEmployeeDepartment($id), - 'department_form_validator' => $this->jsValidator(UpdateEmployeeDepartmentRequest::class) - ])); - } - - public function postEmployeeDepartmentEdit(UpdateEmployeeDepartmentRequest $request, $id) - { - return $this->printPartial(view('employees::partials.employee_department', [ - 'employee_department' => $this->employeeRepository->updateEmployeeDepartment($request->all(), $id), - ]), trans('employees::employee_department.employee_department_updated')); - } - - public function getEmployeeDepartmentList() - { - return view('employees::employee_department_list', [ - 'employee_departments' => $this->employeeRepository->getEmployeeDepartments()->paginate(config('collejo.pagination.perpage')) - ]); - } - - public function __construct(EmployeeRepository $employeeRepository) - { - $this->employeeRepository = $employeeRepository; - } -} diff --git a/src/modules/Employees/Http/Controllers/EmployeeGradeController.php b/src/modules/Employees/Http/Controllers/EmployeeGradeController.php deleted file mode 100644 index 26b0f2b..0000000 --- a/src/modules/Employees/Http/Controllers/EmployeeGradeController.php +++ /dev/null @@ -1,56 +0,0 @@ -printModal(view('employees::modals.edit_employee_grade', [ - 'employee_grade' => null, - 'grade_form_validator' => $this->jsValidator(CreateEmployeeGradeRequest::class) - ])); - } - - public function postEmployeeGradeNew(CreateEmployeeGradeRequest $request) - { - return $this->printPartial(view('employees::partials.employee_grade', [ - 'employee_grade' => $this->employeeRepository->createEmployeeGrade($request->all()), - ]), trans('employees::employee_grade.employee_grade_created')); - } - - public function getEmployeeGradeEdit($id) - { - return $this->printModal(view('employees::modals.edit_employee_grade', [ - 'employee_grade' => $this->employeeRepository->findEmployeeGrade($id), - 'grade_form_validator' => $this->jsValidator(UpdateEmployeeGradeRequest::class) - ])); - } - - public function postEmployeeGradeEdit(UpdateEmployeeGradeRequest $request, $id) - { - return $this->printPartial(view('employees::partials.employee_grade', [ - 'employee_grade' => $this->employeeRepository->updateEmployeeGrade($request->all(), $id), - ]), trans('employees::employee_grade.employee_grade_updated')); - } - - public function getEmployeeGradeList() - { - return view('employees::employee_grade_list', [ - 'employee_grades' => $this->employeeRepository->getEmployeeGrades()->paginate(config('collejo.pagination.perpage')) - ]); - } - - public function __construct(EmployeeRepository $employeeRepository) - { - $this->employeeRepository = $employeeRepository; - } -} diff --git a/src/modules/Employees/Http/Controllers/EmployeePositionController.php b/src/modules/Employees/Http/Controllers/EmployeePositionController.php deleted file mode 100644 index 9356c84..0000000 --- a/src/modules/Employees/Http/Controllers/EmployeePositionController.php +++ /dev/null @@ -1,58 +0,0 @@ -printModal(view('employees::modals.edit_employee_position', [ - 'employee_position' => null, - 'position_form_validator' => $this->jsValidator(CreateEmployeePositionRequest::class), - 'employee_categories' => $this->employeeRepository->getEmployeeCategories()->all() - ])); - } - - public function postEmployeePositionNew(CreateEmployeePositionRequest $request) - { - return $this->printPartial(view('employees::partials.employee_position', [ - 'employee_position' => $this->employeeRepository->createEmployeePosition($request->all()), - ]), trans('employees::employee_position.employee_position_created')); - } - - public function getEmployeePositionEdit($id) - { - return $this->printModal(view('employees::modals.edit_employee_position', [ - 'employee_position' => $this->employeeRepository->findEmployeePosition($id), - 'position_form_validator' => $this->jsValidator(UpdateEmployeePositionRequest::class), - 'employee_categories' => $this->employeeRepository->getEmployeeCategories()->all() - ])); - } - - public function postEmployeePositionEdit(UpdateEmployeePositionRequest $request, $id) - { - return $this->printPartial(view('employees::partials.employee_position', [ - 'employee_position' => $this->employeeRepository->updateEmployeePosition($request->all(), $id), - ]), trans('employees::employee_position.employee_position_updated')); - } - - public function getEmployeePositionList() - { - return view('employees::employee_position_list', [ - 'employee_positions' => $this->employeeRepository->getEmployeePositions()->paginate(config('collejo.pagination.perpage')) - ]); - } - - public function __construct(EmployeeRepository $employeeRepository) - { - $this->employeeRepository = $employeeRepository; - } -} diff --git a/src/modules/Employees/Http/Requests/CreateAddressRequest.php b/src/modules/Employees/Http/Requests/CreateAddressRequest.php deleted file mode 100644 index 08133df..0000000 --- a/src/modules/Employees/Http/Requests/CreateAddressRequest.php +++ /dev/null @@ -1,29 +0,0 @@ - 'required', - 'address' => 'required' - ]; - } - - public function attributes() - { - return [ - 'full_name' => trans('student::address.full_name'), - 'address' => trans('student::address.address'), - 'city' => trans('student::address.city'), - 'postal_code' => trans('student::address.postal_code'), - 'phone' => trans('student::address.phone'), - 'note' => trans('student::address.note'), - ]; - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/CreateEmployeeCategoryRequest.php b/src/modules/Employees/Http/Requests/CreateEmployeeCategoryRequest.php deleted file mode 100644 index 801d88b..0000000 --- a/src/modules/Employees/Http/Requests/CreateEmployeeCategoryRequest.php +++ /dev/null @@ -1,25 +0,0 @@ - 'required|unique:employee_categories', - 'code' => 'unique:employee_categories|max:5', - ]; - } - - public function attributes() - { - return [ - 'name' => trans('employees::employee_category.name'), - 'code' => trans('employees::employee_category.code') - ]; - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/CreateEmployeeDepartmentRequest.php b/src/modules/Employees/Http/Requests/CreateEmployeeDepartmentRequest.php deleted file mode 100644 index c33959f..0000000 --- a/src/modules/Employees/Http/Requests/CreateEmployeeDepartmentRequest.php +++ /dev/null @@ -1,25 +0,0 @@ - 'required|unique:employee_departments', - 'code' => 'unique:employee_departments|max:5', - ]; - } - - public function attributes() - { - return [ - 'name' => trans('employees::employee_department.name'), - 'code' => trans('employees::employee_department.code'), - ]; - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/CreateEmployeeDetailsRequest.php b/src/modules/Employees/Http/Requests/CreateEmployeeDetailsRequest.php deleted file mode 100644 index 0b9a327..0000000 --- a/src/modules/Employees/Http/Requests/CreateEmployeeDetailsRequest.php +++ /dev/null @@ -1,37 +0,0 @@ - 'required|unique:employees', - 'first_name' => 'required', - 'last_name' => 'required', - 'joined_on' => 'required', - 'employee_position_id' => 'required', - 'employee_department_id' => 'required', - 'employee_grade_id' => 'required', - 'date_of_birth' => 'required' - ]; - } - - public function attributes() - { - return [ - 'employee_number' => 'Employee Number', - 'first_name' => 'First Name', - 'last_name' => 'Last Name', - 'joined_on' => 'Joined Date', - 'employee_position_id' => 'Employee Position', - 'employee_department_id' => 'Employee Department', - 'employee_grade_id' => 'Employee Grade', - 'date_of_birth' => 'Date of Birth' - ]; - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/CreateEmployeeGradeRequest.php b/src/modules/Employees/Http/Requests/CreateEmployeeGradeRequest.php deleted file mode 100644 index 053f604..0000000 --- a/src/modules/Employees/Http/Requests/CreateEmployeeGradeRequest.php +++ /dev/null @@ -1,29 +0,0 @@ - 'required|unique:employee_grades', - 'code' => 'unique:employee_grades|max:5', - 'max_sessions_per_day' => 'numeric', - 'max_sessions_per_week' => 'numeric', - ]; - } - - public function attributes() - { - return [ - 'name' => trans('students::employee_grade.name'), - 'code' => trans('students::employee_grade.code'), - 'max_sessions_per_day' => trans('students::employee_grade.max_sessions_per_day'), - 'max_sessions_per_week' => trans('students::employee_grade.max_sessions_per_week'), - ]; - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/CreateEmployeePositionRequest.php b/src/modules/Employees/Http/Requests/CreateEmployeePositionRequest.php deleted file mode 100644 index dda11db..0000000 --- a/src/modules/Employees/Http/Requests/CreateEmployeePositionRequest.php +++ /dev/null @@ -1,23 +0,0 @@ - 'required|unique:employee_positions' - ]; - } - - public function attributes() - { - return [ - 'name' => trans('employees::employee_position.name') - ]; - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/UpdateAddressRequest.php b/src/modules/Employees/Http/Requests/UpdateAddressRequest.php deleted file mode 100644 index 51f7023..0000000 --- a/src/modules/Employees/Http/Requests/UpdateAddressRequest.php +++ /dev/null @@ -1,24 +0,0 @@ -rules(); - } - - public function attributes() - { - $createRequest = new CreateAddressRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/UpdateEmployeeAccountRequest.php b/src/modules/Employees/Http/Requests/UpdateEmployeeAccountRequest.php deleted file mode 100644 index 5535f03..0000000 --- a/src/modules/Employees/Http/Requests/UpdateEmployeeAccountRequest.php +++ /dev/null @@ -1,25 +0,0 @@ - 'email|unique:users,email,' . $this->get('uid'), - 'password' => 'required_with:email' - ]; - } - - public function attributes() - { - return [ - 'email' => trans('employees::employee.email'), - 'password' => trans('employees::employee.password') - ]; - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/UpdateEmployeeCategoryRequest.php b/src/modules/Employees/Http/Requests/UpdateEmployeeCategoryRequest.php deleted file mode 100644 index 8cc8201..0000000 --- a/src/modules/Employees/Http/Requests/UpdateEmployeeCategoryRequest.php +++ /dev/null @@ -1,26 +0,0 @@ -rules(), [ - 'name' => 'required|unique:employee_categories,name,' . $this->get('ecid'), - 'code' => 'max:5|unique:employee_categories,code,' . $this->get('ecid'), - ]); - } - - public function attributes() - { - $createRequest = new CreateEmployeeCategoryRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/UpdateEmployeeDepartmentRequest.php b/src/modules/Employees/Http/Requests/UpdateEmployeeDepartmentRequest.php deleted file mode 100644 index 0b83cbd..0000000 --- a/src/modules/Employees/Http/Requests/UpdateEmployeeDepartmentRequest.php +++ /dev/null @@ -1,26 +0,0 @@ -rules(), [ - 'name' => 'required|unique:employee_departments,name,' . $this->get('edid'), - 'code' => 'max:5|unique:employee_departments,code,' . $this->get('edid'), - ]); - } - - public function attributes() - { - $createRequest = new CreateEmployeeDepartmentRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/UpdateEmployeeDetailsRequest.php b/src/modules/Employees/Http/Requests/UpdateEmployeeDetailsRequest.php deleted file mode 100644 index b460f29..0000000 --- a/src/modules/Employees/Http/Requests/UpdateEmployeeDetailsRequest.php +++ /dev/null @@ -1,25 +0,0 @@ -rules(), [ - 'employee_number' => 'required|unique:employees,employee_number,' . $this->get('eid') - ]); - } - - public function attributes() - { - $createRequest = new CreateEmployeeDetailsRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/UpdateEmployeeGradeRequest.php b/src/modules/Employees/Http/Requests/UpdateEmployeeGradeRequest.php deleted file mode 100644 index 3e55c89..0000000 --- a/src/modules/Employees/Http/Requests/UpdateEmployeeGradeRequest.php +++ /dev/null @@ -1,26 +0,0 @@ -rules(), [ - 'name' => 'required|unique:employee_grades,name,' . $this->get('egid'), - 'code' => 'max:5|unique:employee_grades,code,' . $this->get('egid'), - ]); - } - - public function attributes() - { - $createRequest = new CreateEmployeeGradeRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/Requests/UpdateEmployeePositionRequest.php b/src/modules/Employees/Http/Requests/UpdateEmployeePositionRequest.php deleted file mode 100644 index fbe62c3..0000000 --- a/src/modules/Employees/Http/Requests/UpdateEmployeePositionRequest.php +++ /dev/null @@ -1,25 +0,0 @@ -rules(), [ - 'name' => 'required|unique:employee_positions,name,' . $this->get('epid') - ]); - } - - public function attributes() - { - $createRequest = new CreateEmployeePositionRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Employees/Http/menus.php b/src/modules/Employees/Http/menus.php deleted file mode 100644 index 681006e..0000000 --- a/src/modules/Employees/Http/menus.php +++ /dev/null @@ -1,29 +0,0 @@ -setParent($parent)->setPermission('list_employees'); - - - Menu::create('employee.new', trans('employees::employee.menu_employee_new')) - ->setParent($parent)->setPermission('create_employee'); - - Menu::group(function($parent){ - - Menu::create('employee_categories.list', trans('employees::employee_category.menu_categories')) - ->setParent($parent)->setPermission('list_employee_cetegories'); - - Menu::create('employee_positions.list', trans('employees::employee_position.menu_positions')) - ->setParent($parent)->setPermission('list_employee_positions'); - - Menu::create('employee_grades.list', trans('employees::employee_grade.menu_grades')) - ->setParent($parent)->setPermission('list_employee_grades'); - - Menu::create('employee_departments.list', trans('employees::employee_department.menu_departments')) - ->setParent($parent)->setPermission('list_employee_departments'); - - - })->setParent($parent); - -})->setOrder(3); diff --git a/src/modules/Employees/Http/routes.php b/src/modules/Employees/Http/routes.php deleted file mode 100644 index 7aa9fef..0000000 --- a/src/modules/Employees/Http/routes.php +++ /dev/null @@ -1,89 +0,0 @@ - 'dash/employees', 'middleware' => 'auth'], function() { - - Route::get('/list', 'EmployeeController@getEmployeeList')->name('employees.list'); -}); - -Route::group(['prefix' => 'dash/employee', 'middleware' => 'auth'], function() { - - Route::get('/new', 'EmployeeController@getEmployeeNew')->name('employee.new'); - Route::post('/new', 'EmployeeController@postEmployeeNew'); - - Route::get('/{id}/view', 'EmployeeController@getEmployeeDetailsView')->name('employee.details.view'); - Route::get('/{id}/edit', 'EmployeeController@getEmployeeDetailsEdit')->name('employee.details.edit'); - Route::post('/{id}/edit', 'EmployeeController@postEmployeeDetailsEdit'); - - Route::get('/{id}/contacts/view', 'EmployeeController@getEmployeeAddressesView')->name('employee.addresses.view'); - Route::get('/{id}/contacts/edit', 'EmployeeController@getEmployeeAddressesEdit')->name('employee.addresses.edit'); - - Route::get('/{id}/contact/new', 'EmployeeController@getEmployeeAddressNew')->name('employee.address.new'); - Route::post('/{id}/contact/new', 'EmployeeController@postEmployeeAddressNew'); - - Route::get('/{id}/contact/{cid}/edit', 'EmployeeController@getEmployeeAddressEdit')->name('employee.address.edit'); - Route::post('/{id}/contact/{cid}/edit', 'EmployeeController@postEmployeeAddressEdit'); - - Route::get('/{id}/contact/{cid}/delete', 'EmployeeController@getEmployeeAddressDelete')->name('employee.address.delete'); - - Route::get('/{id}/account/view', 'EmployeeController@getEmployeeAccountView')->name('employee.account.view'); - - Route::get('/{id}/account/edit', 'EmployeeController@getEmployeeAccountEdit')->name('employee.account.edit'); - Route::post('/{id}/account/edit', 'EmployeeController@postEmployeeAccountEdit'); - -}); - -Route::group(['prefix' => 'dash/employee_categories', 'middleware' => 'auth'], function() { - - Route::get('/list', 'EmployeeCategoryController@getEmployeeCategoryList')->name('employee_categories.list'); -}); - -Route::group(['prefix' => 'dash/employee_category', 'middleware' => 'auth'], function() { - - Route::get('/new', 'EmployeeCategoryController@getEmployeeCategoryNew')->name('employee_category.new'); - Route::post('/new', 'EmployeeCategoryController@postEmployeeCategoryNew'); - - Route::get('/{id}/edit', 'EmployeeCategoryController@getEmployeeCategoryEdit')->name('employee_category.edit'); - Route::post('/{id}/edit', 'EmployeeCategoryController@postEmployeeCategoryEdit'); -}); - -Route::group(['prefix' => 'dash/employee_departments', 'middleware' => 'auth'], function() { - - Route::get('/list', 'EmployeeDepartmentController@getEmployeeDepartmentList')->name('employee_departments.list'); -}); - -Route::group(['prefix' => 'dash/employee_department', 'middleware' => 'auth'], function() { - - Route::get('/new', 'EmployeeDepartmentController@getEmployeeDepartmentNew')->name('employee_department.new'); - Route::post('/new', 'EmployeeDepartmentController@postEmployeeDepartmentNew'); - - Route::get('/{id}/edit', 'EmployeeDepartmentController@getEmployeeDepartmentEdit')->name('employee_department.edit'); - Route::post('/{id}/edit', 'EmployeeDepartmentController@postEmployeeDepartmentEdit'); -}); - -Route::group(['prefix' => 'dash/employee_grades', 'middleware' => 'auth'], function() { - - Route::get('/list', 'EmployeeGradeController@getEmployeeGradeList')->name('employee_grades.list'); -}); - -Route::group(['prefix' => 'dash/employee_grade', 'middleware' => 'auth'], function() { - - Route::get('/new', 'EmployeeGradeController@getEmployeeGradeNew')->name('employee_grade.new'); - Route::post('/new', 'EmployeeGradeController@postEmployeeGradeNew'); - - Route::get('/{id}/edit', 'EmployeeGradeController@getEmployeeGradeEdit')->name('employee_grade.edit'); - Route::post('/{id}/edit', 'EmployeeGradeController@postEmployeeGradeEdit'); -}); - -Route::group(['prefix' => 'dash/employee_positions', 'middleware' => 'auth'], function() { - - Route::get('/list', 'EmployeePositionController@getEmployeePositionList')->name('employee_positions.list'); -}); - -Route::group(['prefix' => 'dash/employee_position', 'middleware' => 'auth'], function() { - - Route::get('/new', 'EmployeePositionController@getEmployeePositionNew')->name('employee_position.new'); - Route::post('/new', 'EmployeePositionController@postEmployeePositionNew'); - - Route::get('/{id}/edit', 'EmployeePositionController@getEmployeePositionEdit')->name('employee_position.edit'); - Route::post('/{id}/edit', 'EmployeePositionController@postEmployeePositionEdit'); -}); diff --git a/src/modules/Employees/Providers/EmployeesModuleServiceProvider.php b/src/modules/Employees/Providers/EmployeesModuleServiceProvider.php deleted file mode 100644 index cb206e6..0000000 --- a/src/modules/Employees/Providers/EmployeesModuleServiceProvider.php +++ /dev/null @@ -1,37 +0,0 @@ -initModule(); - } - - public function register() - { - $this->app->bind(EmployeeListCriteria::class); - } - - public function getPermissions() - { - return [ - 'view_employee_general_details' => ['edit_employee_general_details', 'view_employee_class_details', 'view_employee_contact_details', 'view_employee_recrutement_details', 'list_employees'], - 'view_employee_class_details' => ['assign_employee_to_class'], - 'view_employee_contact_details' => ['edit_employee_contact_details'], - 'view_employee_recrutement_details' => ['edit_employee_recrutement_details'], - 'list_employees' => ['create_employee'], - 'list_employee_positions' => ['add_edit_employee_position'], - 'add_edit_employee_position' => ['add_edit_employee_category'], - 'list_employee_grades' => ['add_edit_employee_grade'], - 'list_employee_departments' => ['add_edit_employee_department'], - ]; - } -} diff --git a/src/modules/Employees/resources/lang/en/address.php b/src/modules/Employees/resources/lang/en/address.php deleted file mode 100644 index 6633d53..0000000 --- a/src/modules/Employees/resources/lang/en/address.php +++ /dev/null @@ -1,17 +0,0 @@ - 'This user does not have any contacts defined.', - 'new_address' => 'New Contact', - 'name' => 'Name', - 'address' => 'Address', - 'city' => 'City', - 'postal_code' => 'Postal Code', - 'phone' => 'Phone', - 'notes' => 'Notes', - 'emergency' => 'Emergency', - - 'address_deleted' => 'Contact deleted.', - 'address_updated' => 'Contact updated.', - 'address_created' => 'Contact created.', -]; \ No newline at end of file diff --git a/src/modules/Employees/resources/lang/en/employee.php b/src/modules/Employees/resources/lang/en/employee.php deleted file mode 100644 index 85aa3a1..0000000 --- a/src/modules/Employees/resources/lang/en/employee.php +++ /dev/null @@ -1,34 +0,0 @@ - 'Employees', - 'menu_employee_list' => 'All Employees', - 'menu_employee_new' => 'New Employee', - - 'new_employee' => 'New Employee', - 'edit_employee' => 'Edit Employee', - 'employees_list' => 'Employees', - - 'employee_details' => 'Employee Details', - 'employee_contacts' => 'Employee Contacts', - 'employee_account' => 'Employee Account', - - 'employees' => 'Employees', - - 'picture' => 'Picture', - 'employee_number' => 'Employee Number', - 'name' => 'Name', - 'email' => 'Email', - 'password' => 'Password', - 'first_name' => 'First Name', - 'last_name' => 'Last Name', - 'joined_on' => 'Joined Date', - 'employee_category' => 'Employee Category', - 'employee_position' => 'Employee Position', - 'employee_grade' => 'Employee Grade', - 'employee_department' => 'Employee Department', - 'date_of_birth' => 'Date of Birth', - - 'empty_list' => 'There are no Employees in the system.', - 'employee_updated' => 'Employee updated', -]; \ No newline at end of file diff --git a/src/modules/Employees/resources/lang/en/employee_category.php b/src/modules/Employees/resources/lang/en/employee_category.php deleted file mode 100644 index a027b0a..0000000 --- a/src/modules/Employees/resources/lang/en/employee_category.php +++ /dev/null @@ -1,16 +0,0 @@ - 'Categories', - 'employee_categories' => 'Employee Categories', - 'edit_employee_category' => 'Edit Employee Category', - 'new_employee_category' => 'New Employee Category', - - 'name' => 'Name', - 'code' => 'Code', - - 'employee_category_created' => 'Employee Category created.', - 'employee_category_updated' => 'Employee Category updated.', - - 'empty_list' => 'There are no Employee Categories in the system.' -]; \ No newline at end of file diff --git a/src/modules/Employees/resources/lang/en/employee_department.php b/src/modules/Employees/resources/lang/en/employee_department.php deleted file mode 100644 index e882f3e..0000000 --- a/src/modules/Employees/resources/lang/en/employee_department.php +++ /dev/null @@ -1,17 +0,0 @@ - 'Departments', - 'employee_grades' => 'Employee Grades', - 'employee_departments' => 'Employee Departments', - 'edit_employee_department' => 'Edit Employee Department', - 'new_employee_department' => 'New Employee Department', - - 'name' => 'Name', - 'code' => 'Code', - - 'employee_department_created' => 'Employee Department created.', - 'employee_department_updated' => 'Employee Department updated.', - - 'empty_list' => 'There are no Employee Departments in the system.' -]; \ No newline at end of file diff --git a/src/modules/Employees/resources/lang/en/employee_grade.php b/src/modules/Employees/resources/lang/en/employee_grade.php deleted file mode 100644 index 64b276d..0000000 --- a/src/modules/Employees/resources/lang/en/employee_grade.php +++ /dev/null @@ -1,19 +0,0 @@ - 'Grades', - 'employee_grades' => 'Employee Grades', - 'edit_employee_grade' => 'Edit Employee Grade', - 'new_employee_grade' => 'New Employee Grade', - - 'name' => 'Name', - 'code' => 'Code', - 'Priority' => 'Priority', - 'max_sessions_per_day' => 'Max Sessions Per Day', - 'max_sessions_per_week' => 'Max Sessions Per Week', - - 'employee_grade_updated' => 'Employee Grade updated.', - 'employee_grade_created' => 'Employee Grade created.', - - 'empty_list' => 'There are no Employee Grades in the system.' -]; \ No newline at end of file diff --git a/src/modules/Employees/resources/lang/en/employee_position.php b/src/modules/Employees/resources/lang/en/employee_position.php deleted file mode 100644 index 4fd956a..0000000 --- a/src/modules/Employees/resources/lang/en/employee_position.php +++ /dev/null @@ -1,18 +0,0 @@ - 'Positions', - 'employee_positions' => 'Employee Positions', - - 'edit_employee_position' => 'Edit Employee Position', - 'new_employee_position' => 'New Employee Position', - - 'name' => 'Name', - 'employee_category' => 'Employee Category', - - 'employee_position_created' => 'Employee Position created.', - 'employee_position_updated' => 'Employee Position updated.', - - - 'empty_list' => 'There are no Employee Positiions in the system.' -]; \ No newline at end of file diff --git a/src/modules/Employees/resources/views/edit_employee_account.blade.php b/src/modules/Employees/resources/views/edit_employee_account.blade.php deleted file mode 100644 index 5bd492a..0000000 --- a/src/modules/Employees/resources/views/edit_employee_account.blade.php +++ /dev/null @@ -1,82 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', trans('employees::employee.edit_employee')) - -@section('breadcrumbs') - - - -@endsection - -@section('scripts') - - - -@endsection - -@section('tabs') - - @include('employees::partials.edit_employee_tabs') - -@endsection - -@section('tab') - -
    - - - - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - - -
    - -
    -
    -
    - -
    -
    -
    - -
    - -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Employees/resources/views/edit_employee_addreses.blade.php b/src/modules/Employees/resources/views/edit_employee_addreses.blade.php deleted file mode 100644 index cf3fabb..0000000 --- a/src/modules/Employees/resources/views/edit_employee_addreses.blade.php +++ /dev/null @@ -1,52 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $employee->name) - -@section('breadcrumbs') - - - -@endsection - -@section('tools') - - {{ trans('employees::address.new_address') }} - -@endsection - -@section('tabs') - - @include('employees::partials.edit_employee_tabs') - -@endsection - -@section('tab') - - -
    - -
    - - @foreach($employee->addresses as $address) - - @include('employees::partials.address') - - @endforeach - -
    - -
    -
    {{ trans('employees::address.empty_list') }}
    -
    - - -
    - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Employees/resources/views/edit_employee_details.blade.php b/src/modules/Employees/resources/views/edit_employee_details.blade.php deleted file mode 100644 index 9936acd..0000000 --- a/src/modules/Employees/resources/views/edit_employee_details.blade.php +++ /dev/null @@ -1,162 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $employee ? trans('employees::employee.edit_employee') : trans('employees::employee.new_employee')) - -@section('breadcrumbs') - -@if($employee) - - - -@endif - -@endsection - -@section('scripts') - - - -@endsection - -@section('tabs') - - @include('employees::partials.edit_employee_tabs') - -@endsection - -@section('tab') - -
    - - @if($employee) - - @endif - -
    -
    - -
    - {!! Uploader::renderUploader($employee ? $employee : null, 'picture', 'image_id', 'employee_pictures') !!} -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - - -
    - -
    -
    -
    - -
    -
    -
    - -
    - -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Employees/resources/views/employee_category_list.blade.php b/src/modules/Employees/resources/views/employee_category_list.blade.php deleted file mode 100644 index db90fb9..0000000 --- a/src/modules/Employees/resources/views/employee_category_list.blade.php +++ /dev/null @@ -1,44 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('employees::employee_category.employee_categories')) - -@section('count', $employee_categories->total()) - -@section('tools') - - {{ trans('common.create') }} - -@endsection - -@section('table') - -@if($employee_categories->count()) - - - - - - - - - - @foreach($employee_categories as $employee_category) - - @include('employees::partials.employee_category') - - @endforeach - -
    {{ trans('employees::employee_category.name') }}{{ trans('employees::employee_category.code') }}
    - -
    {{ $employee_categories->render() }}
    - -@else - -
    -
    {{ trans('employees::employee_category.empty_list') }}
    -
    - -@endif - -@endsection - diff --git a/src/modules/Employees/resources/views/employee_department_list.blade.php b/src/modules/Employees/resources/views/employee_department_list.blade.php deleted file mode 100644 index 553e901..0000000 --- a/src/modules/Employees/resources/views/employee_department_list.blade.php +++ /dev/null @@ -1,44 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('employees::employee_department.employee_departments')) - -@section('count', $employee_departments->total()) - -@section('tools') - - {{ trans('common.create') }} - -@endsection - -@section('table') - -@if($employee_departments->count()) - - - - - - - - - - @foreach($employee_departments as $employee_department) - - @include('employees::partials.employee_department') - - @endforeach - -
    {{ trans('employees::employee_department.name') }}{{ trans('employees::employee_department.code') }}
    - -
    {{ $employee_departments->render() }}
    - -@else - -
    -
    {{ trans('employees::employee_department.empty_list') }}
    -
    - -@endif - -@endsection - diff --git a/src/modules/Employees/resources/views/employee_grade_list.blade.php b/src/modules/Employees/resources/views/employee_grade_list.blade.php deleted file mode 100644 index 88b1663..0000000 --- a/src/modules/Employees/resources/views/employee_grade_list.blade.php +++ /dev/null @@ -1,44 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('employees::employee_grade.employee_grades')) - -@section('count', $employee_grades->total()) - -@section('tools') - - {{ trans('common.create') }} - -@endsection - -@section('table') - -@if($employee_grades->count()) - - - - - - - - - - @foreach($employee_grades as $employee_grade) - - @include('employees::partials.employee_grade') - - @endforeach - -
    {{ trans('employees::employee_grade.name') }}{{ trans('employees::employee_grade.code') }}
    - -
    {{ $employee_grades->render() }}
    - -@else - -
    -
    {{ trans('employees::employee_grade.empty_list') }}
    -
    - -@endif - -@endsection - diff --git a/src/modules/Employees/resources/views/employee_list.blade.php b/src/modules/Employees/resources/views/employee_list.blade.php deleted file mode 100644 index 9a297a9..0000000 --- a/src/modules/Employees/resources/views/employee_list.blade.php +++ /dev/null @@ -1,48 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('employees::employee.employees')) - -@section('count', $employees->total()) - -@section('tools') - - {{ trans('common.create_new') }} - -@endsection - -@section('table') - -@if($employees->count()) - - - - - - - - - - - - - - @foreach($employees as $employee) - - @include('employees::partials.employee') - - @endforeach - -
    {{ trans('employees::employee.name') }}{{ trans('employees::employee.employee_grade') }}{{ trans('employees::employee.employee_position') }}{{ trans('employees::employee.employee_category') }}{{ trans('employees::employee.employee_department') }}{{ trans('employees::employee.joined_on') }}
    - -
    {{ $employees->appends(Request::except('page'))->render() }}
    - -@else - -
    -
    {{ trans('employees::employee.empty_list') }}
    -
    - -@endif - -@endsection - diff --git a/src/modules/Employees/resources/views/employee_position_list.blade.php b/src/modules/Employees/resources/views/employee_position_list.blade.php deleted file mode 100644 index 517b5d3..0000000 --- a/src/modules/Employees/resources/views/employee_position_list.blade.php +++ /dev/null @@ -1,44 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('employees::employee_position.employee_positions')) - -@section('count', $employee_positions->total()) - -@section('tools') - - {{ trans('common.create') }} - -@endsection - -@section('table') - -@if($employee_positions->count()) - - - - - - - - - - @foreach($employee_positions as $employee_position) - - @include('employees::partials.employee_position') - - @endforeach - -
    {{ trans('employees::employee_position.name') }}{{ trans('employees::employee_position.employee_category') }}
    - -
    {{ $employee_positions->render() }}
    - -@else - -
    -
    {{ trans('employees::employee_position.empty_list') }}
    -
    - -@endif - -@endsection - diff --git a/src/modules/Employees/resources/views/modals/edit_address.blade.php b/src/modules/Employees/resources/views/modals/edit_address.blade.php deleted file mode 100644 index 45991ef..0000000 --- a/src/modules/Employees/resources/views/modals/edit_address.blade.php +++ /dev/null @@ -1,89 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Employees/resources/views/modals/edit_employee_category.blade.php b/src/modules/Employees/resources/views/modals/edit_employee_category.blade.php deleted file mode 100644 index f84971b..0000000 --- a/src/modules/Employees/resources/views/modals/edit_employee_category.blade.php +++ /dev/null @@ -1,58 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Employees/resources/views/modals/edit_employee_department.blade.php b/src/modules/Employees/resources/views/modals/edit_employee_department.blade.php deleted file mode 100644 index f69e811..0000000 --- a/src/modules/Employees/resources/views/modals/edit_employee_department.blade.php +++ /dev/null @@ -1,58 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Employees/resources/views/modals/edit_employee_grade.blade.php b/src/modules/Employees/resources/views/modals/edit_employee_grade.blade.php deleted file mode 100644 index a9911be..0000000 --- a/src/modules/Employees/resources/views/modals/edit_employee_grade.blade.php +++ /dev/null @@ -1,58 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Employees/resources/views/modals/edit_employee_position.blade.php b/src/modules/Employees/resources/views/modals/edit_employee_position.blade.php deleted file mode 100644 index c0d62c0..0000000 --- a/src/modules/Employees/resources/views/modals/edit_employee_position.blade.php +++ /dev/null @@ -1,66 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Employees/resources/views/partials/address.blade.php b/src/modules/Employees/resources/views/partials/address.blade.php deleted file mode 100644 index 9251f4e..0000000 --- a/src/modules/Employees/resources/views/partials/address.blade.php +++ /dev/null @@ -1,41 +0,0 @@ -
    -
    -
    -
    -
    -
    {{ $address->full_name }}
    -
    -
    -
    -
    {{ $address->address }}
    -
    -
    -
    -
    {{ $address->city }}
    -
    -
    -
    -
    {{ $address->postal_code }}
    -
    -
    -
    -
    {{ $address->phone }}
    -
    -
    -
    -
    {{ $address->note }}
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/src/modules/Employees/resources/views/partials/edit_employee_tabs.blade.php b/src/modules/Employees/resources/views/partials/edit_employee_tabs.blade.php deleted file mode 100644 index 7c601bb..0000000 --- a/src/modules/Employees/resources/views/partials/edit_employee_tabs.blade.php +++ /dev/null @@ -1,23 +0,0 @@ -@if(is_null($employee)) - - - -@else - - - -@endif \ No newline at end of file diff --git a/src/modules/Employees/resources/views/partials/employee.blade.php b/src/modules/Employees/resources/views/partials/employee.blade.php deleted file mode 100644 index b197bd6..0000000 --- a/src/modules/Employees/resources/views/partials/employee.blade.php +++ /dev/null @@ -1,14 +0,0 @@ - - -
    {{ $employee->name }}
    - {{ $employee->employee_number }} - - {{ $employee->employeeGrade->name }} - {{ $employee->employeePosition->name }} - {{ $employee->employeePosition->employeeCategory->name }} - {{ $employee->employeeDepartment->name }} - {{ formatDate(toUserTz($employee->joined_on)) }} - - {{ trans('common.edit') }} - - \ No newline at end of file diff --git a/src/modules/Employees/resources/views/partials/employee_category.blade.php b/src/modules/Employees/resources/views/partials/employee_category.blade.php deleted file mode 100644 index 8dad42c..0000000 --- a/src/modules/Employees/resources/views/partials/employee_category.blade.php +++ /dev/null @@ -1,9 +0,0 @@ - - -
    {{ $employee_category->name }}
    - - {{ $employee_category->code }} - - {{ trans('common.edit') }} - - \ No newline at end of file diff --git a/src/modules/Employees/resources/views/partials/employee_department.blade.php b/src/modules/Employees/resources/views/partials/employee_department.blade.php deleted file mode 100644 index ea2a8a8..0000000 --- a/src/modules/Employees/resources/views/partials/employee_department.blade.php +++ /dev/null @@ -1,9 +0,0 @@ - - -
    {{ $employee_department->name }}
    - - {{ $employee_department->code }} - - {{ trans('common.edit') }} - - \ No newline at end of file diff --git a/src/modules/Employees/resources/views/partials/employee_grade.blade.php b/src/modules/Employees/resources/views/partials/employee_grade.blade.php deleted file mode 100644 index c163e2c..0000000 --- a/src/modules/Employees/resources/views/partials/employee_grade.blade.php +++ /dev/null @@ -1,9 +0,0 @@ - - -
    {{ $employee_grade->name }}
    - - {{ $employee_grade->code }} - - {{ trans('common.edit') }} - - \ No newline at end of file diff --git a/src/modules/Employees/resources/views/partials/employee_position.blade.php b/src/modules/Employees/resources/views/partials/employee_position.blade.php deleted file mode 100644 index f5ca926..0000000 --- a/src/modules/Employees/resources/views/partials/employee_position.blade.php +++ /dev/null @@ -1,9 +0,0 @@ - - -
    {{ $employee_position->name }}
    - - {{ $employee_position->employeeCategory->name }} - - {{ trans('common.edit') }} - - \ No newline at end of file diff --git a/src/modules/Employees/resources/views/partials/view_employee_tabs.blade.php b/src/modules/Employees/resources/views/partials/view_employee_tabs.blade.php deleted file mode 100644 index 0c5a970..0000000 --- a/src/modules/Employees/resources/views/partials/view_employee_tabs.blade.php +++ /dev/null @@ -1,11 +0,0 @@ - diff --git a/src/modules/Employees/resources/views/view_employee_account.blade.php b/src/modules/Employees/resources/views/view_employee_account.blade.php deleted file mode 100644 index cab58f1..0000000 --- a/src/modules/Employees/resources/views/view_employee_account.blade.php +++ /dev/null @@ -1,28 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $employee->name) - -@section('tools') - -@can('edit_user_account_info') - {{ trans('common.edit') }} -@endcan - -@endsection - -@section('tabs') - - @include('employees::partials.view_employee_tabs') - -@endsection - -@section('tab') - -
    -
    -
    {{ trans('employees::employee.email') }}
    -
    {{ $employee->user->email }}
    -
    -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Employees/resources/views/view_employee_addreses.blade.php b/src/modules/Employees/resources/views/view_employee_addreses.blade.php deleted file mode 100644 index 9fb650d..0000000 --- a/src/modules/Employees/resources/views/view_employee_addreses.blade.php +++ /dev/null @@ -1,42 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $employee->name) - -@section('tools') - - {{ trans('common.edit') }} - -@endsection - -@section('tabs') - - @include('employees::partials.view_employee_tabs') - -@endsection - -@section('tab') - - -
    - -
    - - @foreach($employee->addresses as $address) - - @include('employees::partials.address') - - @endforeach - -
    - -
    -
    {{ trans('employees::address.empty_list') }}
    -
    - - -
    - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Employees/resources/views/view_employee_details.blade.php b/src/modules/Employees/resources/views/view_employee_details.blade.php deleted file mode 100644 index ca15c48..0000000 --- a/src/modules/Employees/resources/views/view_employee_details.blade.php +++ /dev/null @@ -1,65 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $employee->name) - -@section('tools') - - {{ trans('common.edit') }} - -@endsection - -@section('tabs') - - @include('employees::partials.view_employee_tabs') - -@endsection - -@section('tab') - - -
    -
    -
    - @if($employee->picture) - - @else - - @endif -
    -
    -
    -
    {{ trans('employees::employee.employee_number') }}
    -
    {{ $employee->employee_number }}
    -
    -
    -
    {{ trans('employees::employee.joined_on') }}
    -
    {{ formatDate(toUserTz($employee->joined_on)) }}
    -
    -
    -
    {{ trans('employees::employee.name') }}
    -
    {{ $employee->name }}
    -
    -
    -
    {{ trans('employees::employee.date_of_birth') }}
    -
    {{ $employee->date_of_birth }}
    -
    -
    -
    {{ trans('employees::employee.employee_category') }}
    -
    {{ $employee->employeePosition->employeeCategory->name }}
    -
    -
    -
    {{ trans('employees::employee.employee_position') }}
    -
    {{ $employee->employeePosition->name }}
    -
    -
    -
    {{ trans('employees::employee.employee_grade') }}
    -
    {{ $employee->employeeGrade->name }}
    -
    -
    -
    {{ trans('employees::employee.employee_department') }}
    -
    {{ $employee->employeeDepartment->name }}
    -
    -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Media/Http/Controllers/MediaController.php b/src/modules/Media/Http/Controllers/MediaController.php deleted file mode 100644 index ed083d3..0000000 --- a/src/modules/Media/Http/Controllers/MediaController.php +++ /dev/null @@ -1,43 +0,0 @@ -printPartial(view('media::partials.file', [ - 'media' => $media, - 'maxFiles' => intval($request::get('max')), - 'fieldName' => $request::get('name') - ])); - } - - throw new \Exception('a file must be uploaded'); - } - - public function getMedia($bucketName, $fileName) - { - $parts = explode('.', $fileName); - $parts = explode('_', $parts[0]); - - if (!count($parts)) { - abort(404); - } - - $id = $parts[0]; - $size = isset($parts[1]) ? $parts[1] : 'original'; - - return Uploader::getMedia($id, $bucketName, $size); - } -} diff --git a/src/modules/Media/Http/routes.php b/src/modules/Media/Http/routes.php deleted file mode 100644 index 57a61f3..0000000 --- a/src/modules/Media/Http/routes.php +++ /dev/null @@ -1,7 +0,0 @@ - 'media'], function() { - Route::post('upload', 'MediaController@postUpload')->name('media.upload'); - Route::get('{bucket}/{iid}', 'MediaController@getMedia')->name('media.get'); -}); - diff --git a/src/modules/Media/Providers/MediaModuleServiceProvider.php b/src/modules/Media/Providers/MediaModuleServiceProvider.php deleted file mode 100644 index ddc1065..0000000 --- a/src/modules/Media/Providers/MediaModuleServiceProvider.php +++ /dev/null @@ -1,27 +0,0 @@ -initModule(); - } - - public function register() - { - - } - - public function getPermissions() - { - return []; - } -} diff --git a/src/modules/Media/resources/lang/en/uploader.php b/src/modules/Media/resources/lang/en/uploader.php deleted file mode 100644 index 776d925..0000000 --- a/src/modules/Media/resources/lang/en/uploader.php +++ /dev/null @@ -1,5 +0,0 @@ - 'Upload', -]; diff --git a/src/modules/Media/resources/views/partials/file.blade.php b/src/modules/Media/resources/views/partials/file.blade.php deleted file mode 100644 index c486eb2..0000000 --- a/src/modules/Media/resources/views/partials/file.blade.php +++ /dev/null @@ -1,7 +0,0 @@ -@if($media) -
    - - - -
    -@endif \ No newline at end of file diff --git a/src/modules/Media/resources/views/upload.blade.php b/src/modules/Media/resources/views/upload.blade.php deleted file mode 100644 index a591603..0000000 --- a/src/modules/Media/resources/views/upload.blade.php +++ /dev/null @@ -1,58 +0,0 @@ - - -
    -
    - - - - - -
    -
    -
    -
    - -
    - @if($maxFiles) - @foreach($model->$relationship as $media) - @include('media::partials.file', ['media' => $media]) - @endforeach - @else - @include('media::partials.file', ['media' => $model ? $model->$relationship : null]) - @endif -
    -
    \ No newline at end of file diff --git a/src/modules/Media/src - Shortcut.lnk b/src/modules/Media/src - Shortcut.lnk deleted file mode 100644 index cfbb9b1..0000000 Binary files a/src/modules/Media/src - Shortcut.lnk and /dev/null differ diff --git a/src/modules/Students/Criteria/GuardiansSearchCriteria.php b/src/modules/Students/Criteria/GuardiansSearchCriteria.php deleted file mode 100644 index 12476b9..0000000 --- a/src/modules/Students/Criteria/GuardiansSearchCriteria.php +++ /dev/null @@ -1,31 +0,0 @@ - 'CONCAT(users.first_name, \' \', users.last_name)' - ]; - - protected $joins = [ - ['users', 'guardians.user_id', 'users.id'] - ]; - - protected $form = [ - 'ssn' => [ - 'type' => 'text', - 'label' => 'SSN' - ] - ]; -} \ No newline at end of file diff --git a/src/modules/Students/Criteria/StudentListCriteria.php b/src/modules/Students/Criteria/StudentListCriteria.php deleted file mode 100644 index d8716f1..0000000 --- a/src/modules/Students/Criteria/StudentListCriteria.php +++ /dev/null @@ -1,64 +0,0 @@ - 'CONCAT(users.first_name, \' \', users.last_name)', - 'batch_id' => 'batches.id', - 'class_id' => 'classes.id', - ]; - - protected $joins = [ - ['users', 'students.user_id', 'users.id'], - ['class_student', 'students.id', 'class_student.student_id'], - ['batches', 'class_student.batch_id', 'batches.id'], - ['classes', 'class_student.class_id', 'classes.id'] - ]; - - protected $form = [ - 'student_category' => [ - 'type' => 'select', - 'itemsCallback' => 'studentCategories' - ], - 'batch' => [ - 'type' => 'select', - 'itemsCallback' => 'batches' - ], - 'class' => [ - 'type' => 'select', - 'itemsCallback' => 'classes' - ] - ]; - - public function callbackStudentCategories() - { - return app()->make(StudentRepository::class)->getStudentCategories()->get(); - } - - public function callbackBatches() - { - return app()->make(ClassRepository::class)->activeBatches()->get(); - } - - public function callbackClasses() - { - return app()->make(ClassRepository::class)->getClasses()->get(); - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Controllers/GuardianController.php b/src/modules/Students/Http/Controllers/GuardianController.php deleted file mode 100644 index 6305461..0000000 --- a/src/modules/Students/Http/Controllers/GuardianController.php +++ /dev/null @@ -1,193 +0,0 @@ -authorize('edit_guardian_contact_details'); - - $this->guardianRepository->deleteAddress($addressId, $studentId); - - return $this->printJson(true, [], trans('students::address.address_deleted')); - } - - public function postGuardianAddressEdit(UpdateAddressRequest $request, $studentId, $addressId) - { - $this->authorize('edit_guardian_contact_details'); - - $address = $this->guardianRepository->updateAddress($request->all(), $addressId, $studentId); - - return $this->printPartial(view('students::partials.guardian_address', [ - 'guardian' => $this->guardianRepository->findGuardian($studentId), - 'address' => $address - ]), trans('students::address.address_updated')); - } - - public function getGuardianAddressEdit($studentId, $addressId) - { - $this->authorize('edit_guardian_contact_details'); - - return $this->printModal(view('students::modals.edit_address', [ - 'address' => $this->guardianRepository->findAddress($addressId, $studentId), - 'guardian' => $this->guardianRepository->findGuardian($studentId) - ])); - } - - public function postGuardianAddressNew(CreateAddressRequest $request, $studentId) - { - $this->authorize('edit_guardian_contact_details'); - - $address = $this->guardianRepository->createAddress($request->all(), $studentId); - - return $this->printPartial(view('students::partials.guardian_address', [ - 'guardian' => $this->guardianRepository->findGuardian($studentId), - 'address' => $address - ]), trans('students::address.address_created')); - } - - public function getGuardianAddressNew($studentId) - { - $this->authorize('edit_guardian_contact_details'); - - return $this->printModal(view('students::modals.edit_guardian_address', [ - 'address' => null, - 'guardian' => $this->guardianRepository->findGuardian($studentId) - ])); - } - - public function getGuardianAddressesView($studentId) - { - $this->authorize('view_guardian_contact_details'); - - return view('students::view_guardian_addreses', ['guardian' => $this->guardianRepository->findGuardian($studentId)]); - } - - public function getGuardianAddressesEdit($studentId) - { - $this->authorize('view_guardian_contact_details'); - - return view('students::edit_guardian_addreses', ['guardian' => $this->guardianRepository->findGuardian($studentId)]); - } - - public function getGuardianNew() - { - $this->authorize('create_guardian'); - - return $this->printModal(view('students::modals.edit_guardian', [ - 'guardian' => null, - 'guradian_form_validator' => $this->jsValidator(CreateGuardianRequest::class) - ])); - } - - public function postGuardianNew(CreateGuardianRequest $request) - { - $this->authorize('create_guardian'); - - $guardian = $this->guardianRepository->createGuardian($request->all()); - - return $this->printJson(true, ['guardian' => [ - 'id' => $guardian->id, - 'name' => $guardian->name - ]]); - } - - public function getGuardianDetailView($guardianId) - { - $this->authorize('list_guardians'); - - return view('students::view_guardian_details', [ - 'guardian' => $this->guardianRepository->findGuardian($guardianId) - ]); - } - - public function getGuardianDetailEdit($guardianId) - { - $this->authorize('edit_guardian'); - - return view('students::edit_guardian_details', [ - 'guardian' => $this->guardianRepository->findGuardian($guardianId), - 'guardian_form_validator' => $this->jsValidator(UpdateGuardianRequest::class) - ]); - } - - public function postGuardianDetailEdit(UpdateGuardianRequest $request, $guardianId) - { - $this->authorize('edit_guardian'); - - $this->guardianRepository->updateGuardian($request->all(), $guardianId); - - return $this->printJson(true, [], trans('students::guardian.guardian_updated')); - } - - public function getGuardianAccountView($guardianId) - { - $this->middleware('reauth'); - - $this->authorize('view_user_account_info'); - - return view('students::view_guardian_account', [ - 'guardian' => $this->guardianRepository->findGuardian($guardianId) - ]); - } - - public function getGuardianAccountEdit($guardianId) - { - $this->middleware('reauth'); - - $this->authorize('edit_user_account_info'); - - return view('students::edit_guardian_account', [ - 'guardian' => $this->guardianRepository->findGuardian($guardianId), - 'account_form_validator' => $this->jsValidator(UpdateGuardianAccountRequest::class) - ]); - } - - public function postGuardianAccountEdit(UpdateGuardianAccountRequest $request, $guardianId) - { - $this->authorize('edit_user_account_info'); - - $this->guardianRepository->updateGuardian($request->all(), $guardianId); - - return $this->printJson(true, [], trans('students::student.student_updated')); - } - - public function getGuardiansSearch(GuardiansSearchCriteria $criteria) - { - $this->authorize('list_guardians'); - - return $this->printJson(true, $this->guardianRepository->search($criteria)->get(['id']) - ->map(function($item){ - return ['id' => $item->id, 'name' => $item->name]; - }) - ); - } - - public function getGuardiansList(GuardiansSearchCriteria $criteria) - { - $this->authorize('list_guardians'); - - return view('students::guardians_list', [ - 'criteria' => $criteria, - 'guardians' => $this->guardianRepository->getGuardians($criteria)->with('user', 'students') - ->paginate(config('collejo.pagination.perpage')) - ]); - } - - public function __construct(GuardianRepository $guardianRepository) - { - $this->guardianRepository = $guardianRepository; - } -} diff --git a/src/modules/Students/Http/Controllers/StudentCategoryController.php b/src/modules/Students/Http/Controllers/StudentCategoryController.php deleted file mode 100644 index 972f0ea..0000000 --- a/src/modules/Students/Http/Controllers/StudentCategoryController.php +++ /dev/null @@ -1,67 +0,0 @@ -authorize('add_edit_student_category'); - - return $this->printModal(view('students::modals.edit_student_category', [ - 'student_category' => null, - 'category_form_validator' => $this->jsValidator(CreateStudentCategoryRequest::class) - ])); - } - - public function postStudentCategoryNew(CreateStudentCategoryRequest $request) - { - $this->authorize('add_edit_student_category'); - - - return $this->printPartial(view('students::partials.student_category', [ - 'student_category' => $this->studentRepository->createStudentCategory($request->all()), - ]), trans('students::student_category.student_category_created')); - } - - public function getStudentCategoryEdit($id) - { - $this->authorize('add_edit_student_category'); - - return $this->printModal(view('students::modals.edit_student_category', [ - 'student_category' => $this->studentRepository->findStudentCategory($id), - 'category_form_validator' => $this->jsValidator(UpdateStudentCategoryRequest::class) - ])); - } - - public function postStudentCategoryEdit(UpdateStudentCategoryRequest $request, $id) - { - $this->authorize('add_edit_student_category'); - - return $this->printPartial(view('students::partials.student_category', [ - 'student_category' => $this->studentRepository->updateStudentCategory($request->all(), $id), - ]), trans('students::student_category.student_category_updated')); - } - - public function getStudentCategoriesList() - { - $this->authorize('list_student_categories'); - - return view('students::student_categories_list', [ - 'student_categories' => $this->studentRepository->getStudentCategories()->paginate(config('collejo.pagination.perpage')) - ]); - } - - public function __construct(StudentRepository $studentRepository) - { - $this->studentRepository = $studentRepository; - } -} diff --git a/src/modules/Students/Http/Controllers/StudentController.php b/src/modules/Students/Http/Controllers/StudentController.php deleted file mode 100644 index 7bd859e..0000000 --- a/src/modules/Students/Http/Controllers/StudentController.php +++ /dev/null @@ -1,318 +0,0 @@ -authorize('assign_student_to_class'); - - $this->studentRepository->assignToClass($request->get('batch_id'), $request->get('grade_id'), $request->get('class_id'), $request->get('current') == 'true', $studentId); - - return $this->printPartial(view('students::partials.student', [ - 'student' => $this->studentRepository->findStudent($studentId), - ]), trans('students::student.student_updated')); - } - - public function getStudentClassAssign($studentId) - { - $this->authorize('assign_student_to_class'); - - return $this->printModal(view('students::modals.assign_class', [ - 'student' => $this->studentRepository->findStudent($studentId), - 'batches' => $this->classRepository->activeBatches()->get(), - 'assign_form' => $this->jsValidator(AssignClassRequest::class) - ])); - } - - public function getStudentGuardianRemove($studentId, $guardianId) - { - $this->authorize('assign_guardian_to_student'); - - $this->studentRepository->removeGuardian($guardianId, $studentId); - - return $this->printJson(true, [], trans('students::student.student_updated')); - } - - public function postStudentGuardianAssign(AssignGuardianRequest $request, $studentId) - { - $this->authorize('assign_guardian_to_student'); - - $this->studentRepository->assignGuardian($request->get('guardian_id'), $studentId); - - if ($request->get('target') == 'guardians') { - return $this->printPartial(view('students::partials.student_guardian', [ - 'guardian' => $this->guardianRepository->findGuardian($request->get('guardian_id')), - ]), trans('students::student.student_updated')); - } - - return $this->printPartial(view('students::partials.student', [ - 'student' => $this->studentRepository->findStudent($studentId), - ]), trans('students::student.student_updated')); - } - - public function getStudentGuardianAssign($studentId) - { - $this->authorize('assign_guardian_to_student'); - - return $this->printModal(view('students::modals.assign_guardian', [ - 'student' => $this->studentRepository->findStudent($studentId), - 'assign_form' => $this->jsValidator(AssignGuardianRequest::class) - ])); - } - - public function getStudentDetailEdit($studentId) - { - $this->authorize('edit_student_general_details'); - - return view('students::edit_student_details', [ - 'student' => $this->studentRepository->findStudent($studentId), - 'student_categories' => $this->studentRepository->getStudentCategories()->paginate(), - 'student_form_validator' => $this->jsValidator(UpdateStudentRequest::class) - ]); - } - - public function postStudentDetailEdit(UpdateStudentRequest $request, $studentId) - { - $this->authorize('edit_student_general_details'); - - $this->studentRepository->updateStudent($request->all(), $studentId); - - return $this->printJson(true, [], trans('students::student.student_updated')); - } - - public function getStudentAddressesView($studentId) - { - $this->authorize('view_student_contact_details'); - - return view('students::view_student_addreses', ['student' => $this->studentRepository->findStudent($studentId)]); - } - - public function getStudentAddressesEdit($studentId) - { - $this->authorize('edit_student_contact_details'); - - return view('students::edit_student_addreses', ['student' => $this->studentRepository->findStudent($studentId)]); - } - - public function getStudentAddressNew($studentId) - { - $this->authorize('edit_student_contact_details'); - - return $this->printModal(view('students::modals.edit_student_address', [ - 'address' => null, - 'student' => $this->studentRepository->findStudent($studentId) - ])); - } - - public function postStudentAddressNew(CreateAddressRequest $request, $studentId) - { - $this->authorize('edit_student_contact_details'); - - $address = $this->studentRepository->createAddress($request->all(), $studentId); - - return $this->printPartial(view('students::partials.student_address', [ - 'student' => $this->studentRepository->findStudent($studentId), - 'address' => $address - ]), trans('students::address.address_created')); - } - - public function getStudentAddressEdit($studentId, $addressId) - { - $this->authorize('edit_student_contact_details'); - - return $this->printModal(view('students::modals.edit_address', [ - 'address' => $this->studentRepository->findAddress($addressId, $studentId), - 'student' => $this->studentRepository->findStudent($studentId) - ])); - } - - public function postStudentAddressEdit(UpdateAddressRequest $request, $studentId, $addressId) - { - $this->authorize('edit_student_contact_details'); - - $address = $this->studentRepository->updateAddress($request->all(), $addressId, $studentId); - - return $this->printPartial(view('students::partials.student_address', [ - 'student' => $this->studentRepository->findStudent($studentId), - 'address' => $address - ]), trans('students::address.address_updated')); - } - - public function getStudentAddressDelete($studentId, $addressId) - { - $this->authorize('edit_student_contact_details'); - - $this->studentRepository->deleteAddress($addressId, $studentId); - - return $this->printJson(true, [], trans('students::address.address_deleted')); - } - - public function postStudentAccountEdit(UpdateStudentAccountRequest $request, $studentId) - { - $this->authorize('edit_user_account_info'); - - $this->middleware('reauth'); - - $this->studentRepository->updateStudent($request->all(), $studentId); - - return $this->printJson(true, [], trans('students::student.student_updated')); - } - - public function getStudentAccountEdit($studentId) - { - $this->authorize('edit_user_account_info'); - - $this->middleware('reauth'); - - return view('students::edit_student_account', [ - 'student' => $this->studentRepository->findStudent($studentId), - 'account_form_validator' => $this->jsValidator(UpdateStudentAccountRequest::class) - ]); - } - - public function getStudentAccountView($studentId) - { - $this->authorize('view_user_account_info'); - - $this->middleware('reauth'); - - return view('students::view_student_account', [ - 'student' => $this->studentRepository->findStudent($studentId) - ]); - } - - public function getStudentGuardiansEdit($studentId) - { - $student = $this->studentRepository->findStudent($studentId); - - $this->authorize('view_student_guardian_details', $student); - - return view('students::edit_student_guardians', [ - 'student' => $student - ]); - } - - public function getStudentGuardiansView($studentId) - { - $student = $this->studentRepository->findStudent($studentId); - - $this->authorize('view_student_guardian_details', $student); - - return view('students::view_student_guardians_details', [ - 'student' => $student - ]); - } - - public function getStudentClassChange($studentId) - { - $student = $this->studentRepository->findStudent($studentId); - - $this->authorize('assign_student_to_class', $student); - - - } - - public function postStudentClassChange($studentId) - { - $student = $this->studentRepository->findStudent($studentId); - - $this->authorize('assign_student_to_class', $student); - - - } - - public function getStudentClassesEdit($studentId) - { - $student = $this->studentRepository->findStudent($studentId); - - $this->authorize('assign_student_to_class', $student); - - return view('students::edit_classes_details', [ - 'student' => $student - ]); - } - - public function getStudentClassesView($studentId) - { - $student = $this->studentRepository->findStudent($studentId); - - $this->authorize('view_student_class_details', $student); - - return view('students::view_classes_details', [ - 'student' => $student, - 'classRepository' => $this->classRepository - ]); - } - - public function getStudentDetailView($studentId) - { - $student = $this->studentRepository->findStudent($studentId); - - $this->authorize('view_student_general_details', $student); - - return view('students::view_student_details', [ - 'student' => $student - ]); - } - - public function getStudentList(StudentListCriteria $criteria) - { - $this->authorize('list_students'); - - return view('students::students_list', [ - 'criteria' => $criteria, - 'students' => $this->studentRepository->getStudents($criteria) - ->with('guardians', 'user') - ->paginate() - ]); - } - - public function postStudentNew(CreateStudentRequest $request) - { - $this->authorize('create_student'); - - $student = $this->studentRepository->createStudent($request->all()); - - return $this->printRedirect(route('student.details.edit', $student->id)); - } - - public function getStudentNew() - { - $this->authorize('create_student'); - - return view('students::edit_student_details', [ - 'student' => null, - 'student_categories' => $this->studentRepository->getStudentCategories()->paginate(), - 'student_form_validator' => $this->jsValidator(CreateStudentRequest::class) - ]); - } - - public function __construct(StudentRepository $studentRepository, ClassRepository $classRepository, GuardianRepository $guardianRepository) - { - $this->studentRepository = $studentRepository; - $this->classRepository = $classRepository; - $this->guardianRepository = $guardianRepository; - } -} diff --git a/src/modules/Students/Http/Requests/AssignClassRequest.php b/src/modules/Students/Http/Requests/AssignClassRequest.php deleted file mode 100644 index e5182b7..0000000 --- a/src/modules/Students/Http/Requests/AssignClassRequest.php +++ /dev/null @@ -1,25 +0,0 @@ - 'required', - 'batch_id' => 'required' - ]; - } - - public function attributes() - { - return [ - 'class_id' => trans('students::student.class'), - 'batch_id' => trans('students::student.batch') - ]; - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/AssignGuardianRequest.php b/src/modules/Students/Http/Requests/AssignGuardianRequest.php deleted file mode 100644 index 90e21d9..0000000 --- a/src/modules/Students/Http/Requests/AssignGuardianRequest.php +++ /dev/null @@ -1,25 +0,0 @@ - 'required', - 'guardian_id' => 'required' - ]; - } - - public function attributes() - { - return [ - 'student_id' => trans('students::student.student'), - 'guardian_id' => trans('students::student.guardian') - ]; - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/CreateAddressRequest.php b/src/modules/Students/Http/Requests/CreateAddressRequest.php deleted file mode 100644 index fbbc6b8..0000000 --- a/src/modules/Students/Http/Requests/CreateAddressRequest.php +++ /dev/null @@ -1,29 +0,0 @@ - 'required', - 'address' => 'required' - ]; - } - - public function attributes() - { - return [ - 'full_name' => trans('student::address.full_name'), - 'address' => trans('student::address.address'), - 'city' => trans('student::address.city'), - 'postal_code' => trans('student::address.postal_code'), - 'phone' => trans('student::address.phone'), - 'note' => trans('student::address.note'), - ]; - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/CreateGuardianRequest.php b/src/modules/Students/Http/Requests/CreateGuardianRequest.php deleted file mode 100644 index 18231a9..0000000 --- a/src/modules/Students/Http/Requests/CreateGuardianRequest.php +++ /dev/null @@ -1,39 +0,0 @@ - 'required', - 'last_name' => 'required', - 'ssn' => 'required|unique:guardians,ssn', - 'email' => 'email|unique:users,email', - 'full_name' => 'required', - 'address' => 'required', - 'city' => 'required', - 'phone' => 'required' - ]; - } - - public function attributes() - { - return [ - 'first_name' => trans('students::guardian.first_name'), - 'last_name' => trans('students::guardian.last_name'), - 'ssn' => trans('students::guardian.ssn'), - 'email' => trans('students::guardian.email'), - 'full_name' => trans('students::address.name'), - 'address' => trans('students::address.address'), - 'city' => trans('students::address.city'), - 'postal_code' => trans('students::address.postal_code'), - 'phone' => trans('students::address.phone'), - 'notes' => trans('students::address.notes'), - ]; - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/CreateStudentCategoryRequest.php b/src/modules/Students/Http/Requests/CreateStudentCategoryRequest.php deleted file mode 100644 index aad86fc..0000000 --- a/src/modules/Students/Http/Requests/CreateStudentCategoryRequest.php +++ /dev/null @@ -1,25 +0,0 @@ - 'required|unique:student_categories', - 'code' => 'unique:student_categories|max:5', - ]; - } - - public function attributes() - { - return [ - 'name' => trans('students::student_category.name'), - 'code' => trans('students::student_category.code') - ]; - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/CreateStudentRequest.php b/src/modules/Students/Http/Requests/CreateStudentRequest.php deleted file mode 100644 index e6575d6..0000000 --- a/src/modules/Students/Http/Requests/CreateStudentRequest.php +++ /dev/null @@ -1,33 +0,0 @@ - 'required|unique:students', - 'admitted_on' => 'required', - 'student_category_id' => 'required', - 'first_name' => 'required', - 'last_name' => 'required', - 'date_of_birth' => 'required' - ]; - } - - public function attributes() - { - return [ - 'admission_number' => trans('students::student.admission_number'), - 'admitted_on' => trans('students::student.admitted_on'), - 'student_category_id' => trans('students::student.student_category_id'), - 'first_name' => trans('students::student.first_name'), - 'last_name' => trans('students::student.last_name'), - 'date_of_birth' => trans('students::student.date_of_birth'), - ]; - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/UpdateAddressRequest.php b/src/modules/Students/Http/Requests/UpdateAddressRequest.php deleted file mode 100644 index 2e6d001..0000000 --- a/src/modules/Students/Http/Requests/UpdateAddressRequest.php +++ /dev/null @@ -1,24 +0,0 @@ -rules(); - } - - public function attributes() - { - $createRequest = new CreateAddressRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/UpdateGuardianAccountRequest.php b/src/modules/Students/Http/Requests/UpdateGuardianAccountRequest.php deleted file mode 100644 index 5998540..0000000 --- a/src/modules/Students/Http/Requests/UpdateGuardianAccountRequest.php +++ /dev/null @@ -1,25 +0,0 @@ - 'email|unique:users,email,' . $this->get('uid'), - 'password' => 'required_with:email' - ]; - } - - public function attributes() - { - return [ - 'email' => trans('students::guardian.email'), - 'password' => trans('students::guardian.password') - ]; - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/UpdateGuardianRequest.php b/src/modules/Students/Http/Requests/UpdateGuardianRequest.php deleted file mode 100644 index 68348ca..0000000 --- a/src/modules/Students/Http/Requests/UpdateGuardianRequest.php +++ /dev/null @@ -1,25 +0,0 @@ -rules())->only('first_name', 'last_name', 'ssn')->toArray(), [ - 'ssn' => 'required|unique:guardians,ssn,' . $this->get('gid') - ]); - } - - public function attributes() - { - $createRequest = new CreateGuardianRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/UpdateStudentAccountRequest.php b/src/modules/Students/Http/Requests/UpdateStudentAccountRequest.php deleted file mode 100644 index 0390b38..0000000 --- a/src/modules/Students/Http/Requests/UpdateStudentAccountRequest.php +++ /dev/null @@ -1,25 +0,0 @@ - 'email|unique:users,email,' . $this->get('uid'), - 'password' => 'required_with:email' - ]; - } - - public function attributes() - { - return [ - 'email' => trans('students::student.email'), - 'password' => trans('students::student.password') - ]; - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/UpdateStudentCategoryRequest.php b/src/modules/Students/Http/Requests/UpdateStudentCategoryRequest.php deleted file mode 100644 index 9cc67c9..0000000 --- a/src/modules/Students/Http/Requests/UpdateStudentCategoryRequest.php +++ /dev/null @@ -1,27 +0,0 @@ -rules(), [ - 'name' => 'required|unique:student_categories,name,' . $this->get('scid'), - 'code' => 'required|max:5|unique:student_categories,code,' . $this->get('scid') - ]); - } - - public function attributes() - { - $createRequest = new CreateStudentCategoryRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/Requests/UpdateStudentRequest.php b/src/modules/Students/Http/Requests/UpdateStudentRequest.php deleted file mode 100644 index 4e39689..0000000 --- a/src/modules/Students/Http/Requests/UpdateStudentRequest.php +++ /dev/null @@ -1,25 +0,0 @@ -rules(), [ - 'admission_number' => 'required|unique:students,admission_number,' . $this->get('sid') - ]); - } - - public function attributes() - { - $createRequest = new CreateStudentRequest(); - - return $createRequest->attributes(); - } -} \ No newline at end of file diff --git a/src/modules/Students/Http/menus.php b/src/modules/Students/Http/menus.php deleted file mode 100644 index e77ef0a..0000000 --- a/src/modules/Students/Http/menus.php +++ /dev/null @@ -1,26 +0,0 @@ -setParent($parent)->setPermission('list_students'); - - Menu::create('student.new', trans('students::student.menu_student_new')) - ->setParent($parent)->setPermission('create_student'); - - - Menu::group(function($parent){ - - Menu::create('guardians.list', trans('students::guardian.menu_guardians')) - ->setParent($parent)->setPermission('list_guardians'); - - })->setParent($parent); - - Menu::group(function($parent){ - - Menu::create('student_categories.list', trans('students::student_category.menu_categories')) - ->setParent($parent)->setPermission('list_student_categories'); - - })->setParent($parent); - -})->setOrder(2); diff --git a/src/modules/Students/Http/routes.php b/src/modules/Students/Http/routes.php deleted file mode 100644 index 13917c4..0000000 --- a/src/modules/Students/Http/routes.php +++ /dev/null @@ -1,99 +0,0 @@ - 'dash/students', 'middleware' => 'auth'], function() { - - Route::get('/list', 'StudentController@getStudentList')->name('students.list'); - -}); - -Route::group(['prefix' => 'dash/student', 'middleware' => 'auth'], function() { - - Route::get('/new', 'StudentController@getStudentNew')->name('student.new'); - Route::post('/new', 'StudentController@postStudentNew'); - - Route::get('/{id}/details/view', 'StudentController@getStudentDetailView')->name('student.details.view'); - - Route::get('/{id}/details/edit', 'StudentController@getStudentDetailEdit')->name('student.details.edit'); - Route::post('/{id}/details/edit', 'StudentController@postStudentDetailEdit'); - - Route::get('/{id}/guardians/view', 'StudentController@getStudentGuardiansView')->name('student.guardians.view'); - Route::get('/{id}/guardians/edit', 'StudentController@getStudentGuardiansEdit')->name('student.guardians.edit'); - Route::post('/{id}/guardians/edit', 'StudentController@postStudentGuardiansEdit'); - - Route::get('/{id}/contacts/view', 'StudentController@getStudentAddressesView')->name('student.addresses.view'); - Route::get('/{id}/contacts/edit', 'StudentController@getStudentAddressesEdit')->name('student.addresses.edit'); - - Route::get('/{id}/contact/new', 'StudentController@getStudentAddressNew')->name('student.address.new'); - Route::post('/{id}/contact/new', 'StudentController@postStudentAddressNew'); - - Route::get('/{id}/contact/{cid}/edit', 'StudentController@getStudentAddressEdit')->name('student.address.edit'); - Route::post('/{id}/contact/{cid}/edit', 'StudentController@postStudentAddressEdit'); - - Route::get('/{id}/contact/{cid}/delete', 'StudentController@getStudentAddressDelete')->name('student.address.delete'); - - Route::get('/{id}/classes/view', 'StudentController@getStudentClassesView')->name('student.classes.view'); - Route::get('/{id}/classes/edit', 'StudentController@getStudentClassesEdit')->name('student.classes.edit'); - - Route::get('/{id}/account/view', 'StudentController@getStudentAccountView')->name('student.account.view')->middleware('reauth'); - - Route::get('/{id}/account/edit', 'StudentController@getStudentAccountEdit')->name('student.account.edit')->middleware('reauth'); - Route::post('/{id}/account/edit', 'StudentController@postStudentAccountEdit')->middleware('reauth'); - - Route::get('/{id}/assign_class', 'StudentController@getStudentClassAssign')->name('student.assign_class'); - Route::post('/{id}/assign_class', 'StudentController@postStudentClassAssign'); - - Route::get('/{id}/assign_guardian', 'StudentController@getStudentGuardianAssign')->name('student.assign_guardian'); - Route::post('/{id}/assign_guardian', 'StudentController@postStudentGuardianAssign'); - - Route::get('/{id}/remove_guardian/{gid}', 'StudentController@getStudentGuardianRemove')->name('student.remove_guardian'); - -}); - -Route::group(['prefix' => 'dash/student_categories', 'middleware' => 'auth'], function() { - - Route::get('/list', 'StudentCategoryController@getStudentCategoriesList')->name('student_categories.list'); -}); - -Route::group(['prefix' => 'dash/student_category', 'middleware' => 'auth'], function() { - - Route::get('/new', 'StudentCategoryController@getStudentCategoryNew')->name('student_category.new'); - Route::post('/new', 'StudentCategoryController@postStudentCategoryNew'); - - Route::get('/{id}/edit', 'StudentCategoryController@getStudentCategoryEdit')->name('student_category.edit'); - Route::post('/{id}/edit', 'StudentCategoryController@postStudentCategoryEdit'); -}); - - -Route::group(['prefix' => 'dash/guardians', 'middleware' => 'auth'], function() { - - Route::get('/search', 'GuardianController@getGuardiansSearch')->middleware('ajax')->name('guardians.search'); - - Route::get('/list', 'GuardianController@getGuardiansList')->name('guardians.list'); -}); - -Route::group(['prefix' => 'dash/guardian', 'middleware' => 'auth'], function() { - - Route::get('/new', 'GuardianController@getGuardianNew')->name('guardian.new'); - Route::post('/new', 'GuardianController@postGuardianNew'); - - Route::get('/{id}/details/view', 'GuardianController@getGuardianDetailView')->name('guardian.details.view'); - - Route::get('/{id}/details/edit', 'GuardianController@getGuardianDetailEdit')->name('guardian.details.edit'); - Route::post('/{id}/details/edit', 'GuardianController@postGuardianDetailEdit'); - - Route::get('/{id}/contacts/view', 'GuardianController@getGuardianAddressesView')->name('guardian.addresses.view'); - Route::get('/{id}/contacts/edit', 'GuardianController@getGuardianAddressesEdit')->name('guardian.addresses.edit'); - - Route::get('/{id}/contact/new', 'GuardianController@getGuardianAddressNew')->name('guardian.address.new'); - Route::post('/{id}/contact/new', 'GuardianController@postGuardianAddressNew'); - - Route::get('/{id}/contact/{cid}/edit', 'GuardianController@getGuardianAddressEdit')->name('guardian.address.edit'); - Route::post('/{id}/contact/{cid}/edit', 'GuardianController@postGuardianAddressEdit'); - - Route::get('/{id}/contact/{cid}/delete', 'GuardianController@getGuardianAddressDelete')->name('guardian.address.delete'); - - Route::get('/{id}/account/view', 'GuardianController@getGuardianAccountView')->name('guardian.account.view')->middleware('reauth'); - - Route::get('/{id}/account/edit', 'GuardianController@getGuardianAccountEdit')->name('guardian.account.edit')->middleware('reauth'); - Route::post('/{id}/account/edit', 'GuardianController@postGuardianAccountEdit')->middleware('reauth'); -}); diff --git a/src/modules/Students/Providers/StudentsModuleServiceProvider.php b/src/modules/Students/Providers/StudentsModuleServiceProvider.php deleted file mode 100644 index 610b5ef..0000000 --- a/src/modules/Students/Providers/StudentsModuleServiceProvider.php +++ /dev/null @@ -1,60 +0,0 @@ -initModule(); - } - - public function getPermissions() - { - return [ - 'view_student_general_details' => ['list_students', 'view_student_class_details'], - 'view_student_class_details' => ['assign_student_to_class', 'view_student_class_history_details'], - 'view_student_guardian_details' => [], - 'edit_student_general_details' => ['create_student'], - 'view_student_contact_details' => ['edit_student_contact_details'], - 'list_students' => ['assign_guardian_to_student', 'list_guardians', 'list_student_categories'], - 'assign_student_to_class' => [], - 'list_guardians' => ['assign_guardian_to_student', 'create_guardian', 'edit_guardian'], - 'edit_guardian' => ['edit_guardian_contact_details'], - 'view_guardian_contact_details' => ['edit_guardian_contact_details'], - 'list_student_categories' => ['add_edit_student_category'], - ]; - } - - public function getGates() - { - return [ - 'view_student_general_details' => function($user, $student){ - return $user->hasPermission('view_student_general_details') && - ($user->hasRole('guardian') && $user->guardian && $user->guardian->students->contains($student->id) || - $user->hasRole('student') && $user->student && $user->student->id == $student->id || - $user->hasRole('employee') && $user->employee && $user->employee->classes->contains($student->id) || - $user->hasRole('admin')); - }, - 'view_student_class_history_details' => function($user, $student){ - return $user->hasPermission('view_student_general_details') && - ($user->hasRole('guardian') && $user->guardian && $user->guardian->students->contains($student->id) || - $user->hasRole('student') && $user->student && $user->student->id == $student->id || - $user->hasRole('employee') && $user->employee && $user->employee->classes->contains($student->id) || - $user->hasRole('admin')); - } - ]; - } - - public function register() - { - $this->app->bind(StudentListCriteria::class); - } - -} diff --git a/src/modules/Students/Providers/StudentsWidgetServiceProvider.php b/src/modules/Students/Providers/StudentsWidgetServiceProvider.php deleted file mode 100644 index b6b74da..0000000 --- a/src/modules/Students/Providers/StudentsWidgetServiceProvider.php +++ /dev/null @@ -1,23 +0,0 @@ -initWidgets(); - } - - public function register() - { - - } -} diff --git a/src/modules/Students/Widgets/GuardianStudents.php b/src/modules/Students/Widgets/GuardianStudents.php deleted file mode 100644 index 893ebf4..0000000 --- a/src/modules/Students/Widgets/GuardianStudents.php +++ /dev/null @@ -1,14 +0,0 @@ - 'This user does not have any contacts defined.', - 'new_address' => 'New Contact', - 'name' => 'Name', - 'address' => 'Address', - 'city' => 'City', - 'postal_code' => 'Postal Code', - 'phone' => 'Phone', - 'notes' => 'Notes', - 'emergency' => 'Emergency', - - 'address_deleted' => 'Contact deleted.', - 'address_updated' => 'Contact updated.', - 'address_created' => 'Contact created.', -]; \ No newline at end of file diff --git a/src/modules/Students/resources/lang/en/guardian.php b/src/modules/Students/resources/lang/en/guardian.php deleted file mode 100644 index b32fb5a..0000000 --- a/src/modules/Students/resources/lang/en/guardian.php +++ /dev/null @@ -1,27 +0,0 @@ - 'Guardians', - 'guardians' => 'Guardians', - 'students' => 'Students', - - 'create_guardian' => 'Create Guardian', - 'edit_guardian' => 'Edit Guardian', - - 'first_name' => 'First Name', - 'last_name' => 'Last Name', - 'name' => 'Name', - 'ssn' => 'Social Security Number', - - 'email' => 'Email', - 'password' => 'Password', - - 'guardian_details' => 'Guardian Details', - 'account_details' => 'Account Details', - 'contact_details' => 'Contact Details', - - 'guardians_list' => 'Guardians List', - 'empty_list' => 'There are no Guardians in the system.', - - 'widget_children_in_school' => 'Children In School' -]; \ No newline at end of file diff --git a/src/modules/Students/resources/lang/en/student.php b/src/modules/Students/resources/lang/en/student.php deleted file mode 100644 index a2e3e1c..0000000 --- a/src/modules/Students/resources/lang/en/student.php +++ /dev/null @@ -1,44 +0,0 @@ - 'Students', - 'menu_students_list' => 'All Students', - 'menu_student_new' => 'New Student', - 'menu_student_new' => 'New Student', - - 'students' => 'Students', - 'students_list' => 'Students List', - 'edit_student' => 'Edit Student', - 'new_student' => 'New Student', - 'student_details' => 'Student Details', - 'classes_details' => 'Class Details', - 'guardians_details' => 'Guardian Details', - 'contact_details' => 'Contact Details', - 'account_details' => 'Account Details', - 'assign_class' => 'Assign Class', - 'change_class' => 'Change Current Class', - 'guardians' => 'Guardians/Parents', - - 'picture' => 'Picture', - 'student_category' => 'Student Category', - 'first_name' => 'First Name', - 'last_name' => 'Last Name', - 'name' => 'Name', - 'email' => 'Email', - 'password' => 'Password', - 'admission_date' => 'Admission Date', - 'admission_number' => 'Admission Number', - 'date_of_birth' => 'Date of Birth', - - 'batch' => 'Batch', - 'class' => 'Class', - 'grade' => trans('entities.grade.singular'), - - 'assign_guardian' => 'Assign Guardian', - 'find_guardians' => 'Find Guardians/Parents', - - 'guardian_remove_confirm' => 'Are you sure you want to remove this guardian?', - - 'empty_list' => 'There are no Students in the system.', - 'student_updated' => 'Student updated.', -]; \ No newline at end of file diff --git a/src/modules/Students/resources/lang/en/student_category.php b/src/modules/Students/resources/lang/en/student_category.php deleted file mode 100644 index 5f285be..0000000 --- a/src/modules/Students/resources/lang/en/student_category.php +++ /dev/null @@ -1,16 +0,0 @@ - 'Categories', - 'student_categories' => 'Student Categories', - 'new_student_category' => 'New Student Category', - 'name' => 'Name', - 'code' => 'Code', - 'count' => 'Total Students', - - 'view_students' => 'View Students', - - 'empty_list' => 'There are no Student Categries in the system.', - 'student_category_created' => 'Student Category created.', - 'student_category_updated' => 'Student Category updated.', -]; \ No newline at end of file diff --git a/src/modules/Students/resources/views/edit_classes_details.blade.php b/src/modules/Students/resources/views/edit_classes_details.blade.php deleted file mode 100644 index 6700509..0000000 --- a/src/modules/Students/resources/views/edit_classes_details.blade.php +++ /dev/null @@ -1,36 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $student->name) - -@section('tools') - -@can('assign_student_to_class') - {{ trans('students::student.change_class') }} -@endcan - -@endsection - -@section('tabs') - - @include('students::partials.edit_student_tabs') - -@endsection - -@section('tab') - - -
    - - @foreach($student->classes as $class) - -
    -
    {{ $class->name }}
    -
    {{ formatDate(toUserTz($class->pivot->created_at)) }}
    -
    - - @endforeach - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/edit_guardian_account.blade.php b/src/modules/Students/resources/views/edit_guardian_account.blade.php deleted file mode 100644 index ead3bf3..0000000 --- a/src/modules/Students/resources/views/edit_guardian_account.blade.php +++ /dev/null @@ -1,82 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', trans('students::guardian.edit_guardian')) - -@section('breadcrumbs') - - - -@endsection - -@section('scripts') - - - -@endsection - -@section('tabs') - - @include('students::partials.edit_guardian_tabs') - -@endsection - -@section('tab') - -
    - - - - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - - -
    - -
    -
    -
    - -
    -
    -
    - -
    - -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/edit_guardian_addreses.blade.php b/src/modules/Students/resources/views/edit_guardian_addreses.blade.php deleted file mode 100644 index c9e82ca..0000000 --- a/src/modules/Students/resources/views/edit_guardian_addreses.blade.php +++ /dev/null @@ -1,52 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $guardian->name) - -@section('breadcrumbs') - - - -@endsection - -@section('tools') - - {{ trans('students::address.new_address') }} - -@endsection - -@section('tabs') - - @include('students::partials.edit_guardian_tabs') - -@endsection - -@section('tab') - - -
    - -
    - - @foreach($guardian->addresses as $address) - - @include('students::partials.guardian_address') - - @endforeach - -
    - -
    -
    {{ trans('students::address.empty_list') }}
    -
    - - -
    - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/edit_guardian_details.blade.php b/src/modules/Students/resources/views/edit_guardian_details.blade.php deleted file mode 100644 index 7cdd392..0000000 --- a/src/modules/Students/resources/views/edit_guardian_details.blade.php +++ /dev/null @@ -1,94 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $guardian ? trans('students::guardian.edit_guardian') : trans('students::guardian.new_guardian')) - -@section('breadcrumbs') - -@if($guardian) - - - -@endif - -@endsection - -@section('scripts') - - - -@endsection - -@section('tabs') - - @include('students::partials.edit_guardian_tabs') - -@endsection - -@section('tab') - -
    - - @if($guardian) - - - @endif - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - - -
    - -
    -
    -
    - -
    -
    -
    - -
    - -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/edit_student_account.blade.php b/src/modules/Students/resources/views/edit_student_account.blade.php deleted file mode 100644 index d305fd8..0000000 --- a/src/modules/Students/resources/views/edit_student_account.blade.php +++ /dev/null @@ -1,82 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', trans('students::student.edit_student')) - -@section('breadcrumbs') - - - -@endsection - -@section('scripts') - - - -@endsection - -@section('tabs') - - @include('students::partials.edit_student_tabs') - -@endsection - -@section('tab') - -
    - - - - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - - -
    - -
    -
    -
    - -
    -
    -
    - -
    - -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/edit_student_addreses.blade.php b/src/modules/Students/resources/views/edit_student_addreses.blade.php deleted file mode 100644 index f11a37a..0000000 --- a/src/modules/Students/resources/views/edit_student_addreses.blade.php +++ /dev/null @@ -1,52 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $student->name) - -@section('breadcrumbs') - - - -@endsection - -@section('tools') - - {{ trans('students::address.new_address') }} - -@endsection - -@section('tabs') - - @include('students::partials.edit_student_tabs') - -@endsection - -@section('tab') - - -
    - -
    - - @foreach($student->addresses as $address) - - @include('students::partials.student_address') - - @endforeach - -
    - -
    -
    {{ trans('students::address.empty_list') }}
    -
    - - -
    - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/edit_student_details.blade.php b/src/modules/Students/resources/views/edit_student_details.blade.php deleted file mode 100644 index bd6a6f9..0000000 --- a/src/modules/Students/resources/views/edit_student_details.blade.php +++ /dev/null @@ -1,133 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $student ? trans('students::student.edit_student') : trans('students::student.new_student')) - -@section('breadcrumbs') - -@if($student) - - - -@endif - -@endsection - -@section('scripts') - - - -@endsection - -@section('tabs') - - @include('students::partials.edit_student_tabs') - -@endsection - -@section('tab') - -
    - - @if($student) - - - @endif - -
    -
    - -
    - {!! Uploader::renderUploader($student ? $student : null, 'picture', 'image_id', 'student_pictures') !!} -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - - -
    - -
    -
    -
    - -
    -
    -
    - -
    - -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/edit_student_guardians.blade.php b/src/modules/Students/resources/views/edit_student_guardians.blade.php deleted file mode 100644 index 4956884..0000000 --- a/src/modules/Students/resources/views/edit_student_guardians.blade.php +++ /dev/null @@ -1,45 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $student->name) - -@section('tools') - -@can('assign_guardian_to_student') - {{ trans('students::student.assign_guardian') }} -@endcan - -@endsection - -@section('tabs') - - @include('students::partials.edit_student_tabs') - -@endsection - -@section('tab') - - - - - - - - - - - - @foreach($student->guardians as $guardian) - - @include('students::partials.student_guardian') - - @endforeach - -
    {{ trans('students::guardian.name') }}{{ trans('students::guardian.students') }}
    - - - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/guardians_list.blade.php b/src/modules/Students/resources/views/guardians_list.blade.php deleted file mode 100644 index d02694f..0000000 --- a/src/modules/Students/resources/views/guardians_list.blade.php +++ /dev/null @@ -1,38 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('students::guardian.guardians')) - -@section('count', $guardians->total()) - -@section('table') - -@if($guardians->count()) - - - - - - - - - - @foreach($guardians as $guardian) - - @include('students::partials.guardian') - - @endforeach - -
    {{ trans('students::guardian.name') }}{{ trans('students::guardian.students') }}
    - -
    {{ $guardians->render() }}
    - -@else - -
    -
    {{ trans('students::guardian.empty_list') }}
    -
    - -@endif - -@endsection - diff --git a/src/modules/Students/resources/views/modals/assign_class.blade.php b/src/modules/Students/resources/views/modals/assign_class.blade.php deleted file mode 100644 index d915bab..0000000 --- a/src/modules/Students/resources/views/modals/assign_class.blade.php +++ /dev/null @@ -1,113 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Students/resources/views/modals/assign_guardian.blade.php b/src/modules/Students/resources/views/modals/assign_guardian.blade.php deleted file mode 100644 index 7cf3d82..0000000 --- a/src/modules/Students/resources/views/modals/assign_guardian.blade.php +++ /dev/null @@ -1,53 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Students/resources/views/modals/edit_guardian.blade.php b/src/modules/Students/resources/views/modals/edit_guardian.blade.php deleted file mode 100644 index 9fa4dfb..0000000 --- a/src/modules/Students/resources/views/modals/edit_guardian.blade.php +++ /dev/null @@ -1,123 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Students/resources/views/modals/edit_guardian_address.blade.php b/src/modules/Students/resources/views/modals/edit_guardian_address.blade.php deleted file mode 100644 index 6cdbdef..0000000 --- a/src/modules/Students/resources/views/modals/edit_guardian_address.blade.php +++ /dev/null @@ -1,89 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Students/resources/views/modals/edit_student_address.blade.php b/src/modules/Students/resources/views/modals/edit_student_address.blade.php deleted file mode 100644 index 2c6b348..0000000 --- a/src/modules/Students/resources/views/modals/edit_student_address.blade.php +++ /dev/null @@ -1,89 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Students/resources/views/modals/edit_student_category.blade.php b/src/modules/Students/resources/views/modals/edit_student_category.blade.php deleted file mode 100644 index a2b9f52..0000000 --- a/src/modules/Students/resources/views/modals/edit_student_category.blade.php +++ /dev/null @@ -1,58 +0,0 @@ - - - \ No newline at end of file diff --git a/src/modules/Students/resources/views/partials/edit_guardian_tabs.blade.php b/src/modules/Students/resources/views/partials/edit_guardian_tabs.blade.php deleted file mode 100644 index b5cdc2c..0000000 --- a/src/modules/Students/resources/views/partials/edit_guardian_tabs.blade.php +++ /dev/null @@ -1,26 +0,0 @@ -@if(is_null($guardian)) - - - -@else - - - -@endif \ No newline at end of file diff --git a/src/modules/Students/resources/views/partials/edit_student_tabs.blade.php b/src/modules/Students/resources/views/partials/edit_student_tabs.blade.php deleted file mode 100644 index 173222a..0000000 --- a/src/modules/Students/resources/views/partials/edit_student_tabs.blade.php +++ /dev/null @@ -1,38 +0,0 @@ -@if(is_null($student)) - - - -@else - - - -@endif \ No newline at end of file diff --git a/src/modules/Students/resources/views/partials/guardian.blade.php b/src/modules/Students/resources/views/partials/guardian.blade.php deleted file mode 100644 index 09edcd6..0000000 --- a/src/modules/Students/resources/views/partials/guardian.blade.php +++ /dev/null @@ -1,16 +0,0 @@ - - -
    {{ $guardian->name }}
    - {{ $guardian->ssn }} - - - @if($guardian->students->count()) - @foreach($guardian->students as $student) - {{ $student->name }} - @endforeach - @endif - - - {{ trans('common.edit') }} - - \ No newline at end of file diff --git a/src/modules/Students/resources/views/partials/guardian_address.blade.php b/src/modules/Students/resources/views/partials/guardian_address.blade.php deleted file mode 100644 index 4d63bb2..0000000 --- a/src/modules/Students/resources/views/partials/guardian_address.blade.php +++ /dev/null @@ -1,41 +0,0 @@ -
    -
    -
    -
    -
    -
    {{ $address->full_name }}
    -
    -
    -
    -
    {{ $address->address }}
    -
    -
    -
    -
    {{ $address->city }}
    -
    -
    -
    -
    {{ $address->postal_code }}
    -
    -
    -
    -
    {{ $address->phone }}
    -
    -
    -
    -
    {{ $address->note }}
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/src/modules/Students/resources/views/partials/student.blade.php b/src/modules/Students/resources/views/partials/student.blade.php deleted file mode 100644 index 5262474..0000000 --- a/src/modules/Students/resources/views/partials/student.blade.php +++ /dev/null @@ -1,42 +0,0 @@ - - -
    {{ $student->name }}
    - {{ $student->admission_number }} - - {{ formatDate(toUserTz($student->admitted_on)) }} - - @if($student->batch) - {{ $student->batch->name }} - @endif - - - @if($student->grade) - {{ $student->grade->name }} - @endif - - - @if($student->class) - {{ $student->class->name }} - @else - @can('assign_student_to_class') - {{ trans('students::student.assign_class') }} - @endcan - @endif - - - @if($student->guardians->count()) - @foreach($student->guardians as $guardian) - {{ $guardian->name }}
    - @endforeach - @else - @can('assign_guardian_to_student') - {{ trans('students::student.assign_guardian') }} - @endcan - @endif - - - @can('edit_student_general_details') - {{ trans('common.edit') }} - @endcan - - \ No newline at end of file diff --git a/src/modules/Students/resources/views/partials/student_address.blade.php b/src/modules/Students/resources/views/partials/student_address.blade.php deleted file mode 100644 index 53f9f33..0000000 --- a/src/modules/Students/resources/views/partials/student_address.blade.php +++ /dev/null @@ -1,41 +0,0 @@ -
    -
    -
    -
    -
    -
    {{ $address->full_name }}
    -
    -
    -
    -
    {{ $address->address }}
    -
    -
    -
    -
    {{ $address->city }}
    -
    -
    -
    -
    {{ $address->postal_code }}
    -
    -
    -
    -
    {{ $address->phone }}
    -
    -
    -
    -
    {{ $address->note }}
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/src/modules/Students/resources/views/partials/student_category.blade.php b/src/modules/Students/resources/views/partials/student_category.blade.php deleted file mode 100644 index b5d7296..0000000 --- a/src/modules/Students/resources/views/partials/student_category.blade.php +++ /dev/null @@ -1,16 +0,0 @@ - - {{ $student_category->name }} - {{ $student_category->code }} - {{ $student_category->students()->count() }} - - @can('list_students') - {{ trans('students::student_category.view_students') }} - @endcan - - - @can('add_edit_student_category') - {{ trans('common.edit') }} - @endcan - - \ No newline at end of file diff --git a/src/modules/Students/resources/views/partials/student_guardian.blade.php b/src/modules/Students/resources/views/partials/student_guardian.blade.php deleted file mode 100644 index 94045a2..0000000 --- a/src/modules/Students/resources/views/partials/student_guardian.blade.php +++ /dev/null @@ -1,17 +0,0 @@ - - -
    {{ $guardian->name }}
    - {{ $guardian->ssn }} - - - @if($guardian->students->count()) - @foreach($guardian->students as $student) - {{ $student->name }} - @endforeach - @endif - - - {{ trans('common.remove') }} - {{ trans('common.edit') }} - - \ No newline at end of file diff --git a/src/modules/Students/resources/views/partials/view_guardian_tabs.blade.php b/src/modules/Students/resources/views/partials/view_guardian_tabs.blade.php deleted file mode 100644 index 7621339..0000000 --- a/src/modules/Students/resources/views/partials/view_guardian_tabs.blade.php +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/modules/Students/resources/views/partials/view_student_tabs.blade.php b/src/modules/Students/resources/views/partials/view_student_tabs.blade.php deleted file mode 100644 index a3173d0..0000000 --- a/src/modules/Students/resources/views/partials/view_student_tabs.blade.php +++ /dev/null @@ -1,25 +0,0 @@ - diff --git a/src/modules/Students/resources/views/student_categories_list.blade.php b/src/modules/Students/resources/views/student_categories_list.blade.php deleted file mode 100644 index 6ed51b5..0000000 --- a/src/modules/Students/resources/views/student_categories_list.blade.php +++ /dev/null @@ -1,48 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('students::student_category.student_categories')) - -@section('count', $student_categories->total()) - -@section('tools') - -@can('add_edit_student_category') - {{ trans('common.create_new') }} -@endcan - -@endsection - -@section('table') - -@if($student_categories->count()) - - - - - - - - - - - - @foreach($student_categories as $student_category) - - @include('students::partials.student_category') - - @endforeach - -
    {{ trans('students::student_category.name') }}{{ trans('students::student_category.code') }}{{ trans('students::student_category.count') }}
    - -
    {{ $student_categories->render() }}
    - -@else - -
    -
    {{ trans('students::student_category.empty_list') }}
    -
    - -@endif - -@endsection - diff --git a/src/modules/Students/resources/views/students_list.blade.php b/src/modules/Students/resources/views/students_list.blade.php deleted file mode 100644 index 57805e6..0000000 --- a/src/modules/Students/resources/views/students_list.blade.php +++ /dev/null @@ -1,50 +0,0 @@ -@extends('collejo::dash.sections.table_view') - -@section('title', trans('students::student.students')) - -@section('count', $students->total()) - -@section('tools') - -@can('create_student') - {{ trans('common.create_new') }} -@endcan - -@endsection - -@section('table') - -@if($students->count()) - - - - - - - - - - - - - - @foreach($students as $student) - - @include('students::partials.student') - - @endforeach - -
    {{ trans('students::student.name') }}{{ trans('students::student.admission_date') }}{{ trans('students::student.batch') }}{{ trans('students::student.grade') }}{{ trans('students::student.class') }}{{ trans('students::student.guardians') }}
    - -
    {{ $students->appends(Request::except('page'))->render() }}
    - -@else - -
    -
    {{ trans('students::student.empty_list') }}
    -
    - -@endif - -@endsection - diff --git a/src/modules/Students/resources/views/view_classes_details.blade.php b/src/modules/Students/resources/views/view_classes_details.blade.php deleted file mode 100644 index bdb9295..0000000 --- a/src/modules/Students/resources/views/view_classes_details.blade.php +++ /dev/null @@ -1,46 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $student->name) - -@section('tools') - -@can('assign_student_to_class') - {{ trans('common.edit') }} -@endcan - -@endsection - -@section('tabs') - - @include('students::partials.view_student_tabs') - -@endsection - -@section('tab') - - -
    - - @foreach($student->classes as $class) - -
    -
    - @can('view_batch_details') - {{ $classRepository->findBatch($class->pivot->batch_id)->name }} - @endcan - - @cannot('view_batch_details') - {{ $classRepository->findBatch($class->pivot->batch_id)->name }} - @endcannot -
    -
    {{ $class->grade->name }}
    -
    {{ $class->name }}
    -
    {{ formatDate(toUserTz($class->pivot->created_at)) }}
    -
    - - @endforeach - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/view_guardian_account.blade.php b/src/modules/Students/resources/views/view_guardian_account.blade.php deleted file mode 100644 index 3bf93e0..0000000 --- a/src/modules/Students/resources/views/view_guardian_account.blade.php +++ /dev/null @@ -1,28 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $guardian->name) - -@section('tools') - -@can('edit_user_account_info') - {{ trans('common.edit') }} -@endcan - -@endsection - -@section('tabs') - - @include('students::partials.view_guardian_tabs') - -@endsection - -@section('tab') - -
    -
    -
    {{ trans('students::guardian.email') }}
    -
    {{ $guardian->user->email }}
    -
    -
    - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/view_guardian_addreses.blade.php b/src/modules/Students/resources/views/view_guardian_addreses.blade.php deleted file mode 100644 index 9d50799..0000000 --- a/src/modules/Students/resources/views/view_guardian_addreses.blade.php +++ /dev/null @@ -1,42 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $guardian->name) - -@section('tools') - - {{ trans('common.edit') }} - -@endsection - -@section('tabs') - - @include('students::partials.view_guardian_tabs') - -@endsection - -@section('tab') - - -
    - -
    - - @foreach($guardian->addresses as $address) - - @include('students::partials.guardian_address') - - @endforeach - -
    - -
    -
    {{ trans('students::address.empty_list') }}
    -
    - - -
    - -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/view_student_details.blade.php b/src/modules/Students/resources/views/view_student_details.blade.php deleted file mode 100644 index 3b1e1e4..0000000 --- a/src/modules/Students/resources/views/view_student_details.blade.php +++ /dev/null @@ -1,49 +0,0 @@ -@extends('collejo::dash.sections.tab_view') - -@section('title', $student->name) - -@section('tools') - -@can('edit_student_general_details') - {{ trans('common.edit') }} -@endcan - -@endsection - -@section('tabs') - - @include('students::partials.view_student_tabs') - -@endsection - -@section('tab') - - -
    -
    - @if($student->picture) - - @else - - @endif -
    -
    -
    {{ trans('students::student.admission_number') }}
    -
    {{ $student->admission_number }}
    -
    -
    -
    {{ trans('students::student.admission_date') }}
    -
    {{ formatDate(toUserTz($student->admitted_on)) }}
    -
    -
    -
    {{ trans('students::student.name') }}
    -
    {{ $student->name }}
    -
    -
    -
    {{ trans('students::student.date_of_birth') }}
    -
    {{ $student->date_of_birth }}
    -
    -
    - - -@endsection \ No newline at end of file diff --git a/src/modules/Students/resources/views/widgets/guardian_students.blade.php b/src/modules/Students/resources/views/widgets/guardian_students.blade.php deleted file mode 100644 index 7ecf667..0000000 --- a/src/modules/Students/resources/views/widgets/guardian_students.blade.php +++ /dev/null @@ -1,32 +0,0 @@ -@if(Auth::user()->guardian) -
    -
    -

    {{ trans('students::guardian.widget_children_in_school') }}

    -
    -
    - -
    - - @foreach(Auth::user()->guardian->students as $student) - -
    - @if($student->picture) - - @else - - @endif -

    {{ $student->name }}

    - @if($student->grade) -
    {{ $student->grade->name }}
    - @endif - @if($student->class) -
    {{ $student->class->name }}
    - @endif -
    - - @endforeach - -
    -
    -
    -@endif \ No newline at end of file diff --git a/src/package.json b/src/package.json deleted file mode 100644 index 70fee50..0000000 --- a/src/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "private": true, - "scripts": { - "prod": "gulp --production", - "dev": "gulp watch" - }, - "devDependencies": { - "bootstrap-sass": "^3.0.0", - "gulp": "^3.9.1", - "gulp-shell": "^0.5.2", - "laravel-elixir": "^5.0.0", - "run-sequence": "^1.2.1" - }, - "dependencies": { - "blueimp-file-upload": "^9.12.5", - "bootbox": "^4.4.0", - "bootstrap": "^3.3.6", - "bootstrap-sass": "^3.3.6", - "c3": "^0.4.11", - "d3": "^3.5.17", - "eonasdan-bootstrap-datetimepicker": "^4.15.35", - "font-awesome": "^4.6.3", - "gulp-clean-css": "^2.0.13", - "gulp-exec": "^2.1.2", - "gulp-minify": "0.0.14", - "jquery": "1.9.1", - "jquery-form": "^3.50.0", - "jquery-validation": "^1.15.0", - "moment": "^2.13.0", - "selectize": "^0.12.1" - } -} diff --git a/src/resources/assets/build/css/collejo.css b/src/resources/assets/build/css/collejo.css deleted file mode 100644 index 9655a9d..0000000 --- a/src/resources/assets/build/css/collejo.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";.animated{animation-duration:1s;animation-fill-mode:both}.animated.infinite{animation-iteration-count:infinite}.animated.hinge{animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{animation-duration:.75s}@keyframes bounce{20%,53%,80%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translate3d(0,0,0)}40%,43%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0)}70%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0)}90%{transform:translate3d(0,-4px,0)}}.bounce{animation-name:bounce;transform-origin:center bottom}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.flash{animation-name:flash}@keyframes pulse{from,to{transform:scale3d(1,1,1)}50%{transform:scale3d(1.05,1.05,1.05)}}.pulse{animation-name:pulse}@keyframes rubberBand{from,to{transform:scale3d(1,1,1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}}.rubberBand{animation-name:rubberBand}@keyframes shake{from,to{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.shake{animation-name:shake}@keyframes headShake{0%{transform:translateX(0)}6.5%{transform:translateX(-6px) rotateY(-9deg)}18.5%{transform:translateX(5px) rotateY(7deg)}31.5%{transform:translateX(-3px) rotateY(-5deg)}43.5%{transform:translateX(2px) rotateY(3deg)}50%{transform:translateX(0)}}.headShake{animation-timing-function:ease-in-out;animation-name:headShake}@keyframes swing{20%{transform:rotate3d(0,0,1,15deg)}40%{transform:rotate3d(0,0,1,-10deg)}60%{transform:rotate3d(0,0,1,5deg)}80%{transform:rotate3d(0,0,1,-5deg)}to{transform:rotate3d(0,0,1,0deg)}}.swing{transform-origin:top center;animation-name:swing}@keyframes tada{from,to{transform:scale3d(1,1,1)}10%,20%{transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.tada{animation-name:tada}@keyframes wobble{from,to{transform:none}15%{transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.wobble{animation-name:wobble}@keyframes jello{11.1%,from,to{transform:none}22.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{transform:skewX(6.25deg) skewY(6.25deg)}44.4%{transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{transform:skewX(.39063deg) skewY(.39063deg)}88.8%{transform:skewX(-.19531deg) skewY(-.19531deg)}}.jello{animation-name:jello;transform-origin:center}@keyframes bounceIn{20%,40%,60%,80%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scale3d(1,1,1)}}.bounceIn{animation-name:bounceIn}@keyframes bounceInDown{60%,75%,90%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}.bounceInDown{animation-name:bounceInDown}@keyframes bounceInLeft{60%,75%,90%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}.bounceInLeft{animation-name:bounceInLeft}@keyframes bounceInRight{60%,75%,90%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}.bounceInRight{animation-name:bounceInRight}@keyframes bounceInUp{60%,75%,90%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translate3d(0,0,0)}}.bounceInUp{animation-name:bounceInUp}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{animation-name:bounceOut}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.bounceOutDown{animation-name:bounceOutDown}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}.bounceOutLeft{animation-name:bounceOutLeft}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}.bounceOutRight{animation-name:bounceOutRight}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}.bounceOutUp{animation-name:bounceOutUp}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.fadeIn{animation-name:fadeIn}@keyframes fadeInDown{from{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:none}}.fadeInDown{animation-name:fadeInDown}@keyframes fadeInDownBig{from{opacity:0;transform:translate3d(0,-2000px,0)}to{opacity:1;transform:none}}.fadeInDownBig{animation-name:fadeInDownBig}@keyframes fadeInLeft{from{opacity:0;transform:translate3d(-100%,0,0)}to{opacity:1;transform:none}}.fadeInLeft{animation-name:fadeInLeft}@keyframes fadeInLeftBig{from{opacity:0;transform:translate3d(-2000px,0,0)}to{opacity:1;transform:none}}.fadeInLeftBig{animation-name:fadeInLeftBig}@keyframes fadeInRight{from{opacity:0;transform:translate3d(100%,0,0)}to{opacity:1;transform:none}}.fadeInRight{animation-name:fadeInRight}@keyframes fadeInRightBig{from{opacity:0;transform:translate3d(2000px,0,0)}to{opacity:1;transform:none}}.fadeInRightBig{animation-name:fadeInRightBig}@keyframes fadeInUp{from{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:none}}.fadeInUp{animation-name:fadeInUp}@keyframes fadeInUpBig{from{opacity:0;transform:translate3d(0,2000px,0)}to{opacity:1;transform:none}}.fadeInUpBig{animation-name:fadeInUpBig}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.fadeOut{animation-name:fadeOut}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.fadeOutDown{animation-name:fadeOutDown}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;transform:translate3d(0,2000px,0)}}.fadeOutDownBig{animation-name:fadeOutDownBig}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0)}}.fadeOutLeft{animation-name:fadeOutLeft}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{animation-name:fadeOutLeftBig}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;transform:translate3d(100%,0,0)}}.fadeOutRight{animation-name:fadeOutRight}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;transform:translate3d(2000px,0,0)}}.fadeOutRightBig{animation-name:fadeOutRightBig}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}.fadeOutUp{animation-name:fadeOutUp}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{animation-name:fadeOutUpBig}@keyframes flip{from{transform:perspective(400px) rotate3d(0,1,0,-360deg);animation-timing-function:ease-out}40%{transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);animation-timing-function:ease-out}50%{transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);animation-timing-function:ease-in}80%{transform:perspective(400px) scale3d(.95,.95,.95);animation-timing-function:ease-in}to{transform:perspective(400px);animation-timing-function:ease-in}}.animated.flip{backface-visibility:visible;animation-name:flip}.flipInX,.flipInY,.flipOutX,.flipOutY{backface-visibility:visible!important}@keyframes flipInX{from{transform:perspective(400px) rotate3d(1,0,0,90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1,0,0,-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{transform:perspective(400px)}}.flipInX{animation-name:flipInX}@keyframes flipInY{from{transform:perspective(400px) rotate3d(0,1,0,90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(0,1,0,-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{transform:perspective(400px)}}.flipInY{animation-name:flipInY}@keyframes flipOutX{from{transform:perspective(400px)}30%{transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{animation-name:flipOutX}@keyframes flipOutY{from{transform:perspective(400px)}30%{transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{animation-name:flipOutY}@keyframes lightSpeedIn{from{transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{transform:skewX(20deg);opacity:1}80%{transform:skewX(-5deg);opacity:1}to{transform:none;opacity:1}}.lightSpeedIn{animation-name:lightSpeedIn;animation-timing-function:ease-out}@keyframes lightSpeedOut{from{opacity:1}to{transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{animation-name:lightSpeedOut;animation-timing-function:ease-in}@keyframes rotateIn{from{transform-origin:center;transform:rotate3d(0,0,1,-200deg);opacity:0}to{transform-origin:center;transform:none;opacity:1}}.rotateIn{animation-name:rotateIn}@keyframes rotateInDownLeft{from{transform-origin:left bottom;transform:rotate3d(0,0,1,-45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInDownLeft{animation-name:rotateInDownLeft}@keyframes rotateInDownRight{from{transform-origin:right bottom;transform:rotate3d(0,0,1,45deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInDownRight{animation-name:rotateInDownRight}@keyframes rotateInUpLeft{from{transform-origin:left bottom;transform:rotate3d(0,0,1,45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInUpLeft{animation-name:rotateInUpLeft}@keyframes rotateInUpRight{from{transform-origin:right bottom;transform:rotate3d(0,0,1,-90deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInUpRight{animation-name:rotateInUpRight}@keyframes rotateOut{from{transform-origin:center;opacity:1}to{transform-origin:center;transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{animation-name:rotateOut}@keyframes rotateOutDownLeft{from{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{animation-name:rotateOutDownLeft}@keyframes rotateOutDownRight{from{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{animation-name:rotateOutDownRight}@keyframes rotateOutUpLeft{from{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{animation-name:rotateOutUpLeft}@keyframes rotateOutUpRight{from{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{animation-name:rotateOutUpRight}@keyframes hinge{0%{transform-origin:top left;animation-timing-function:ease-in-out}20%,60%{transform:rotate3d(0,0,1,80deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate3d(0,0,1,60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0,700px,0);opacity:0}}.hinge{animation-name:hinge}@keyframes rollIn{from{opacity:0;transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;transform:none}}.rollIn{animation-name:rollIn}@keyframes rollOut{from{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{animation-name:rollOut}@keyframes zoomIn{from{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{animation-name:zoomIn}@keyframes zoomInDown{from{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{animation-name:zoomInDown}@keyframes zoomInLeft{from{opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{animation-name:zoomInLeft}@keyframes zoomInRight{from{opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{animation-name:zoomInRight}@keyframes zoomInUp{from{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{animation-name:zoomInUp}@keyframes zoomOut{from{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{animation-name:zoomOut}@keyframes zoomOutDown{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{animation-name:zoomOutDown}@keyframes zoomOutLeft{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(-2000px,0,0);transform-origin:left center}}.zoomOutLeft{animation-name:zoomOutLeft}@keyframes zoomOutRight{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(2000px,0,0);transform-origin:right center}}.zoomOutRight{animation-name:zoomOutRight}@keyframes zoomOutUp{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{animation-name:zoomOutUp}@keyframes slideInDown{from{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translate3d(0,0,0)}}.slideInDown{animation-name:slideInDown}@keyframes slideInLeft{from{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translate3d(0,0,0)}}.slideInLeft{animation-name:slideInLeft}@keyframes slideInRight{from{transform:translate3d(100%,0,0);visibility:visible}to{transform:translate3d(0,0,0)}}.slideInRight{animation-name:slideInRight}@keyframes slideInUp{from{transform:translate3d(0,100%,0);visibility:visible}to{transform:translate3d(0,0,0)}}.slideInUp{animation-name:slideInUp}@keyframes slideOutDown{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(0,100%,0)}}.slideOutDown{animation-name:slideOutDown}@keyframes slideOutLeft{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(-100%,0,0)}}.slideOutLeft{animation-name:slideOutLeft}@keyframes slideOutRight{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(100%,0,0)}}.slideOutRight{animation-name:slideOutRight}@keyframes slideOutUp{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(0,-100%,0)}}.slideOutUp{animation-name:slideOutUp}.selectize-control.plugin-drag_drop.multi>.selectize-input>div.ui-sortable-placeholder{visibility:visible!important;background:#f2f2f2!important;background:rgba(0,0,0,.06)!important;border:0!important;box-shadow:inset 0 0 12px 4px #fff}.checkbox-row input[type=checkbox],.invisible{visibility:hidden}.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after{content:'!';visibility:hidden}.selectize-control.plugin-drag_drop .ui-sortable-helper{box-shadow:0 2px 5px rgba(0,0,0,.2)}.selectize-dropdown-header{position:relative;border-bottom:1px solid #d0d0d0;background:#f8f8f8;border-radius:4px 4px 0 0}.selectize-dropdown-header-close{position:absolute;right:12px;top:50%;color:#333;opacity:.4;margin-top:-12px;line-height:20px;font-size:20px!important}.selectize-dropdown-header-close:hover{color:#000}.selectize-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0 none;float:left;box-sizing:border-box}.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0 none}.selectize-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.selectize-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0 none}.selectize-control.plugin-remove_button [data-value]{position:relative;padding-right:24px!important}.selectize-control.plugin-remove_button [data-value] .remove{z-index:1;position:absolute;top:0;right:0;bottom:0;width:17px;text-align:center;font-weight:700;font-size:12px;color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:1px 0 0;border-left:1px solid transparent;border-radius:0 2px 2px 0;box-sizing:border-box}.selectize-control,.selectize-input{position:relative}.label,.selectize-input>*,sub,sup{vertical-align:baseline}.selectize-control.plugin-remove_button [data-value] .remove:hover{background:rgba(0,0,0,.05)}.selectize-control.plugin-remove_button [data-value].active .remove{border-left-color:transparent}.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover{background:0 0}.selectize-control.plugin-remove_button .disabled [data-value] .remove{border-left-color:rgba(77,77,77,0)}.selectize-dropdown,.selectize-input,.selectize-input input{color:#333;font-family:inherit;font-size:inherit;line-height:20px;-webkit-font-smoothing:inherit}.selectize-control.single .selectize-input.input-active,.selectize-input{background:#fff;cursor:text;display:inline-block}.selectize-input{border:1px solid #ccc;padding:6px 12px;display:inline-block;width:100%;overflow:hidden;z-index:1;box-sizing:border-box;border-radius:4px}.selectize-control.multi .selectize-input.has-items{padding:5px 12px 2px}.selectize-input.full{background-color:#fff}.selectize-input.disabled,.selectize-input.disabled *{cursor:default!important}.selectize-input>*{display:-moz-inline-stack;display:inline-block;zoom:1;*display:inline}.selectize-control.multi .selectize-input>div{cursor:pointer;margin:0 3px 3px 0;padding:1px 3px;background:#efefef;color:#333;border:0 solid transparent}.selectize-control.multi .selectize-input>div.active{background:#428bca;color:#fff;border:0 solid transparent}.selectize-control.multi .selectize-input.disabled>div,.selectize-control.multi .selectize-input.disabled>div.active{color:grey;background:#fff;border:0 solid rgba(77,77,77,0)}.selectize-input>input{display:inline-block!important;padding:0!important;min-height:0!important;max-height:none!important;max-width:100%!important;margin:0!important;text-indent:0!important;border:0!important;background:0 0!important;line-height:inherit!important;-webkit-user-select:auto!important;box-shadow:none!important}.img-responsive,.img-thumbnail,.table,label{max-width:100%}.selectize-input>input::-ms-clear{display:none}.selectize-input>input:focus{outline:0!important}.selectize-input::after{content:' ';display:block;clear:left}.selectize-input.dropdown-active::before{content:' ';position:absolute;background:#fff;height:1px;bottom:0;left:0;right:0}.selectize-dropdown{position:absolute;box-sizing:border-box}.selectize-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.selectize-dropdown [data-selectable] .highlight{background:rgba(255,237,40,.4);border-radius:1px}.selectize-dropdown .optgroup-header,.selectize-dropdown [data-selectable]{padding:3px 12px}.selectize-dropdown .optgroup:first-child .optgroup-header{border-top:0 none}.selectize-dropdown .optgroup-header{color:#777;background:#fff;cursor:default;font-size:12px;line-height:1.42857143}.selectize-dropdown .active{background-color:#f5f5f5;color:#262626}.selectize-dropdown .active.create{color:#262626}.selectize-dropdown .create{color:rgba(51,51,51,.5)}.selectize-dropdown-content{overflow-y:auto;overflow-x:hidden;max-height:200px}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.selectize-control.single .selectize-input,.selectize-control.single .selectize-input input{cursor:pointer}.selectize-control.single .selectize-input.input-active,.selectize-control.single .selectize-input.input-active input{cursor:text}.selectize-control.single .selectize-input:after{content:' ';display:block;position:absolute;top:50%;right:17px;margin-top:-3px;width:0;height:0;border-style:solid;border-width:5px 5px 0;border-color:#333 transparent transparent}.selectize-control.single .selectize-input.dropdown-active:after{margin-top:-4px;border-width:0 5px 5px;border-color:transparent transparent #333}.selectize-control.rtl.single .selectize-input:after{left:17px;right:auto}.selectize-control.rtl .selectize-input>input{margin:0 4px 0 -2px!important}.selectize-control .selectize-input.disabled{opacity:.5;background-color:#fff}.selectize-dropdown,.selectize-dropdown.form-control{height:auto;padding:0;margin:2px 0 0;z-index:1000;background:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.selectize-dropdown .optgroup:first-child:before{display:none}.selectize-dropdown .optgroup:before{content:' ';display:block;height:1px;margin:9px -12px;overflow:hidden;background-color:#e5e5e5}.selectize-input.dropdown-active::before,[hidden],template{display:none}body,figure{margin:0}.selectize-dropdown-content{padding:5px 0}.selectize-dropdown-header{padding:6px 12px}.selectize-input{min-height:34px}.selectize-input.dropdown-active{border-radius:4px}.selectize-input.focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.has-error .selectize-input{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .selectize-input:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.selectize-control.multi .selectize-input.has-items{padding-left:9px;padding-right:9px}.selectize-control.multi .selectize-input>div{border-radius:3px}.form-control.selectize-control{padding:0;border:none;background:0 0;box-shadow:none;border-radius:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}img{border:0;vertical-align:middle}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.popover,.tooltip,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.btn-danger.dropdown-toggle,.open>.btn-default.dropdown-toggle,.open>.btn-info.dropdown-toggle,.open>.btn-primary.dropdown-toggle,.open>.btn-warning.dropdown-toggle{background-image:none}.img-thumbnail,body{background-color:#fff}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Roboto,sans-serif;font-size:14px;line-height:1.428571429;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2487ca;text-decoration:none}a:focus,a:hover{color:#185c89;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.img-responsive{display:block;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.428571429;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.428571429}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.dash-content .table td.tools-column,.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#2487ca}a.text-primary:focus,a.text-primary:hover{color:#1c6a9f}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#2487ca}a.bg-primary:focus,a.bg-primary:hover{background-color:#1c6a9f}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd{margin-left:0}.dl-horizontal dd:after,.dl-horizontal dd:before{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dropdown-menu>li>a,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.pager:after,.panel-body:after,.row:after,footer{clear:both}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,.panel .panel-footer blockquote.tools-footer,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,.panel .panel-footer blockquote.tools-footer .small:before,.panel .panel-footer blockquote.tools-footer footer:before,.panel .panel-footer blockquote.tools-footer small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,.panel .panel-footer blockquote.tools-footer .small:after,.panel .panel-footer blockquote.tools-footer footer:after,.panel .panel-footer blockquote.tools-footer small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container-fluid:after,.container-fluid:before,.container:after,.container:before,.row:after,.row:before{display:table;content:" "}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{display:block;width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.428571429;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:46px;line-height:46px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-feedback label~.form-control-feedback{top:25px}.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=incrementHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=incrementMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=decrementHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=decrementMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=showHours]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=showMinutes]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=togglePeriod]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=clear]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=today]::after~.form-control-feedback,.bootstrap-datetimepicker-widget .has-feedback label.picker-switch::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=incrementHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=incrementMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=decrementHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=decrementMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=showHours]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=showMinutes]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=togglePeriod]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=clear]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=today]::after~.form-control-feedback,.has-feedback .bootstrap-datetimepicker-widget label.picker-switch::after~.form-control-feedback,.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{content:" ";display:table}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.428571429;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#2487ca;border-color:#2079b4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#1c6a9f;border-color:#0d3048}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#1c6a9f;border-color:#175680}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#175680;border-color:#0d3048}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#2487ca;border-color:#2079b4}.btn-primary .badge{color:#2487ca;background-color:#fff}.btn-success{color:#fff;background-color:#27ae60;border-color:#295}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#1e8449;border-color:#0b311b}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#1e8449;border-color:#176739}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#176739;border-color:#0b311b}.btn-success.active,.btn-success:active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#27ae60;border-color:#295}.btn-success .badge{color:#27ae60;background-color:#fff}.btn-info{color:#fff;background-color:#2980b9;border-color:#2472a4}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#20638f;border-color:#0d293c}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#20638f;border-color:#194f72}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#194f72;border-color:#0d293c}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2980b9;border-color:#2472a4}.btn-info .badge{color:#2980b9;background-color:#fff}.btn-warning{color:#fff;background-color:#e67e22;border-color:#d67118}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#bf6516;border-color:#64350b}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#bf6516;border-color:#9f5412}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#9f5412;border-color:#64350b}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#e67e22;border-color:#d67118}.btn-warning .badge{color:#e67e22;background-color:#fff}.btn-danger{color:#fff;background-color:#c0392b;border-color:#ab3326}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#962d22;border-color:#43140f}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#962d22;border-color:#79241b}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#79241b;border-color:#43140f}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c0392b;border-color:#ab3326}.btn-danger .badge{color:#c0392b;background-color:#fff}.btn-link{color:#2487ca;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#185c89;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right,.panel .panel-footer .dropdown-menu.tools-footer{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.428571429;white-space:nowrap}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#2487ca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.panel .panel-footer .tools-footer>.dropdown-menu,.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after,.btn-toolbar:before{content:" ";display:table}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{content:" ";display:table}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group,.input-group-btn,.input-group-btn>.btn{position:relative}.input-group{display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after,.nav:before{content:" ";display:table}.nav>li,.nav>li>a{display:block;position:relative}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#2487ca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li,.nav-tabs.nav-justified>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#2487ca}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:after,.navbar:before{content:" ";display:table}.navbar:after{clear:both}.navbar-header:after,.navbar-header:before{content:" ";display:table}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse:after,.navbar-collapse:before{content:" ";display:table}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.carousel-inner,.embed-responsive,.media,.media-body,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-danger,.progress-striped .progress-bar-info,.progress-striped .progress-bar-success,.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.btn-group-sm>.navbar-btn.btn,.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.btn-group-xs>.navbar-btn.btn,.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#090909;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.428571429;text-decoration:none;color:#2487ca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#185c89;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#2487ca;border-color:#2487ca;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:after,.pager:before{content:" ";display:table}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#2487ca}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#1c6a9f}.label-success{background-color:#27ae60}.label-success[href]:focus,.label-success[href]:hover{background-color:#1e8449}.label-info{background-color:#2980b9}.label-info[href]:focus,.label-info[href]:hover{background-color:#20638f}.label-warning{background-color:#e67e22}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#bf6516}.label-danger{background-color:#c0392b}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#962d22}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#2487ca;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#2487ca}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#2487ca;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#27ae60}.progress-bar-info{background-color:#2980b9}.progress-bar-warning{background-color:#e67e22}.progress-bar-danger{background-color:#c0392b}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right,.panel .panel-footer .media>.tools-footer{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#2487ca;border-color:#2487ca}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c5e2f5}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#2487ca}.panel-primary>.panel-heading{color:#fff;background-color:#2487ca;border-color:#2487ca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#2487ca}.panel-primary>.panel-heading .badge{color:#2487ca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#2487ca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-family:Roboto,sans-serif;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.428571429;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before{display:table;content:" "}.modal.fade .modal-dialog{transition:transform .3s ease-out}.modal.in .modal-dialog{transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;text-align:left;text-align:start;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;text-align:start;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.carousel-caption,.carousel-control{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.6);text-align:center}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{width:100%}.carousel-inner>.item{display:none;position:relative;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:transform .6s ease-in-out;backface-visibility:hidden;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;background-color:transparent}.carousel-control.left{background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before{content:" ";display:table}.center-block{display:block;margin-left:auto;margin-right:auto}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}.panel .panel-footer .tools-footer,.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.6.3);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2?v=4.6.3) format("woff2"),url(../fonts/fontawesome-webfont.woff?v=4.6.3) format("woff"),url(../fonts/fontawesome-webfont.ttf?v=4.6.3) format("truetype"),url(../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.brand-text,.dash-content .section h2{font-family:Raleway,Helvetica,Arial}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right,.panel .panel-footer .fa.tools-footer{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after,.bootstrap-datetimepicker-widget .btn[data-action=clear]::after,.bootstrap-datetimepicker-widget .btn[data-action=today]::after,.bootstrap-datetimepicker-widget .picker-switch::after,.bootstrap-datetimepicker-widget table th.next::after,.bootstrap-datetimepicker-widget table th.prev::after,.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}body.setup-layout .container{max-width:730px}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before,.panel .panel-footer .bootstrap-datetimepicker-widget.dropdown-menu.tools-footer:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after,.panel .panel-footer .bootstrap-datetimepicker-widget.dropdown-menu.tools-footer:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after{content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after{content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after{content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after{content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after{content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after{content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after{content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action=clear]::after{content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action=today]::after{content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch::after{content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:4px}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#777}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:0 solid transparent;border-bottom-color:#2487ca;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#2487ca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget table td span:hover{background:#eee}.bootstrap-datetimepicker-widget table td span.active{background-color:#2487ca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td span.old{color:#777}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.input-group.date .input-group-addon{cursor:pointer}body{height:100%}h2{padding-bottom:15px}label.error{color:#c0392b;font-size:10px}.input-group-sm>.input-group-btn>.selectize-control.btn .selectize-input input,.input-group-sm>.selectize-control.form-control .selectize-input input,.input-group-sm>.selectize-control.input-group-addon .selectize-input input,.selectize-control.input-sm .selectize-input input,footer{font-size:12px}.form-control.error{border-color:#c0392b}.form-control.error:active,.form-control.error:focus{box-shadow:inset 0 1px 1px rgba(192,57,43,.075),0 0 8px rgba(192,57,43,.6)}.spinner-wrap{display:inline-block}.spinner-wrap.inline{position:absolute;right:-10px;top:10px;z-index:3}.spinner-wrap.inline .spinner{border:.25rem solid #2487ca;border-top-color:#fff}.input-group .spinner-wrap.inline{right:-25px}.progress{height:10px}.btn{text-transform:uppercase}.btn .spinner-wrap{margin-left:10px}.spinner{display:inline-block;border-radius:50%;width:15px;height:15px;border:.25rem solid rgba(255,255,255,.2);border-top-color:#fff;animation:spin 1s infinite linear}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.loading-wrap{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.loading-wrap .dot{width:10px;height:10px;border:2px solid #fff;border-radius:50%;float:left;margin:0 5px;transform:scale(0);animation:dotfx 1s ease infinite 0s}.loading-wrap .dot:nth-child(2){animation:dotfx 1s ease infinite .3s}.loading-wrap .dot:nth-child(3){animation:dotfx 1s ease infinite .6s}@keyframes dotfx{50%{transform:scale(1);opacity:1}100%{opacity:0}}.modal{transition:all .3s ease-out!important}.checkbox-row label,.selectize-input{transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.modal.in .modal-dialog{transform:scale(1,1)!important}.modal.fade .modal-dialog{transform:translate(0,0)}.label a{color:#fff;text-decoration:none}footer{padding-bottom:5px}.section-content{margin-bottom:0}.selectize-input{box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.selectize-input.locked{background:#eee;cursor:not-allowed;opacity:1}.selectize-control.error .selectize-input{border-color:#c0392b}.selectize-control.error .selectize-input.focus{box-shadow:inset 0 1px 1px rgba(192,57,43,.075),0 0 8px rgba(192,57,43,.6)}.selectize-control.plugin-allow-clear .clear-selection{position:absolute;top:7px;right:35px;z-index:10;color:#777;cursor:pointer}.selectize-control.plugin-allow-clear .clear-selection.disabled{color:#eee}.form-inline .selectize-control{min-width:225px}.selectize-dropdown.form-control{position:absolute}.input-group-sm>.input-group-btn>.selectize-control.btn .selectize-input,.input-group-sm>.selectize-control.form-control .selectize-input,.input-group-sm>.selectize-control.input-group-addon .selectize-input,.selectize-control.input-sm .selectize-input{font-size:12px;padding-top:4px;padding-bottom:3px;min-height:30px;overflow:inherit;border-radius:3px}.input-group-sm>.input-group-btn>.selectize-control.btn .clear-selection,.input-group-sm>.selectize-control.form-control .clear-selection,.input-group-sm>.selectize-control.input-group-addon .clear-selection,.selectize-control.input-sm .clear-selection{top:5px;right:30px}.input-group .form-control:not(:first-child):not(:last-child) .selectize-input{border-bottom-right-radius:0;border-top-right-radius:0;border-right:0}ul.list-indented>li{margin-left:25px}.label{margin:0 2px}.file-uploader .upload-block{float:left;border:thin solid #eee;border-radius:3px}.file-uploader .upload-block .fileinput-button{padding:0;text-align:center;opacity:.2;background:#eee}.file-uploader .upload-block .fileinput-button i.fa{color:#777;opacity:.3}.file-uploader .upload-block .fileinput-button:hover{opacity:.4}.file-uploader .upload-block .fileinput-button.disabled{background:#eee}.file-uploader .upload-block .progress{height:5px;margin-right:5px;margin-left:5px;position:absolute;bottom:5px;margin-bottom:0}.file-uploader .delete-img{color:#c0392b;position:absolute;top:0;right:-20px;padding:5px;z-index:20;display:none}.file-uploader:hover .delete-img{display:inline}.file-uploader .uploaded-files{float:left}.file-uploader .uploaded-files .block{float:left;border:thin solid #eee;border-radius:3px}.file-uploader.single .upload-block{position:relative;z-index:10}.file-uploader.single .uploaded-files{position:absolute;z-index:9}.file-uploader.small .block{width:80px}.file-uploader.small .upload-block,.file-uploader.small .upload-block .fileinput-button{width:80px;height:80px;line-height:80px}.file-uploader.small .upload-block .fileinput-button i.fa,.file-uploader.small .upload-block i.fa{font-size:20px}.file-uploader.small .upload-block .fileinput-button .progress,.file-uploader.small .upload-block .progress{width:70px}.file-uploader.large .block{width:160px}.file-uploader.large .upload-block,.file-uploader.large .upload-block .fileinput-button{width:160px;height:160px;line-height:160px}.file-uploader.large .upload-block .fileinput-button i.fa,.file-uploader.large .upload-block i.fa{font-size:40px}.file-uploader.large .upload-block .fileinput-button .progress,.file-uploader.large .upload-block .progress{width:150px}.fileinput-button{position:relative;overflow:hidden;display:inline-block}.fileinput-button input{position:absolute;top:0;right:0;margin:0;opacity:0;-ms-filter:'alpha(opacity=0)';font-size:200px!important;direction:ltr;cursor:pointer}@media screen\9{.fileinput-button input{filter:alpha(opacity=0);font-size:100%;height:100%}}.checkbox-row{position:relative;margin:15px 0}.checkbox-row.disabled label{background:#eee!important;cursor:not-allowed}.checkbox-row.disabled label:after{content:none}.checkbox-row.disabled label:hover::after{opacity:0}.checkbox-row.disabled input[type=checkbox]:checked+label:after{content:''!important;opacity:1!important}.checkbox-row label{width:22px;height:22px;cursor:pointer;position:absolute;top:0;left:0;border:1px solid #ccc;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);background:#fff}.checkbox-row label:after{content:'';width:9px;height:5px;position:absolute;top:6px;left:6px;border:3px solid #555;border-top:none;border-right:none;background:0 0;opacity:0;transform:rotate(-45deg)}.checkbox-row label:hover::after{opacity:.5}.checkbox-row span{font-weight:400;margin-left:30px;width:290px;position:absolute}.checkbox-row input[type=checkbox]:checked+label:after{opacity:1}.tabs-left,.tabs-right{border-bottom:none;padding-top:2px}.tabs-left{border-right:1px solid #ddd;padding-top:0;margin-top:2px}.tabs-right{border-left:1px solid #ddd}.tabs-left>li,.tabs-right>li{float:none;margin-bottom:2px}.tabs-left>li{margin-right:-1px}.tabs-right>li{margin-left:-1px}.tabs-left>li.active>a,.tabs-left>li.active>a:focus,.tabs-left>li.active>a:hover{border-bottom-color:#ddd;border-right-color:transparent}.tabs-right>li.active>a,.tabs-right>li.active>a:focus,.tabs-right>li.active>a:hover{border-bottom:1px solid #ddd;border-left-color:transparent}.tabs-left>li>a{border-radius:4px 0 0 4px;margin-right:0;display:block}.tabs-right>li>a{border-radius:0 4px 4px 0;margin-right:0}.tab-content{border-top:1px solid #ddd;border-right:1px solid #ddd;border-bottom:1px solid #ddd;margin-left:-30px;margin-top:2px}.nav-tabs>li>a:hover{border-color:transparent #ddd transparent transparent}.auth-row{min-height:100%;height:auto!important;margin-bottom:50px}body.error-layout .error-page,body.setup-layout .setup-incomplete{min-height:350px}.form-auth{margin-top:20%;background:#fff;padding:30px}body.error-layout,body.setup-layout{padding-top:20px;padding-bottom:20px}@media (max-width:991px){.form-auth{margin-top:30px}}body.auth-body{background:url(/images/auth-bg.jpg);background-size:cover}body.setup-layout .header h3{margin-top:0;margin-bottom:0;line-height:40px}body.setup-layout .header h3 a{text-decoration:none;color:#777}body.setup-layout .setup-incomplete i.fa{font-size:100px;color:#f7f7f7;margin-top:50px;margin-bottom:30px}body.setup-layout .container-narrow>hr{margin:30px 0}@media screen and (min-width:768px){body.setup-layout .footer,body.setup-layout .header,body.setup-layout .marketing{padding-right:0;padding-left:0}body.setup-layout .header{margin-bottom:30px}body.setup-layout .jumbotron{border-bottom:0}body.error-layout .footer,body.error-layout .header,body.error-layout .marketing{padding-right:0;padding-left:0}}.dash-content,.dash-content .section .tab-pane .columns,.dash-content .section .tab-pane .form-horizontal,.dashboard-section{padding-top:15px}body.error-layout .header h3{margin-top:0;margin-bottom:0;line-height:40px}body.error-layout .header h3 a{text-decoration:none;color:#777}body.error-layout .error-page i.fa{font-size:100px;color:#f7f7f7;margin-top:50px;margin-bottom:30px}@media (min-width:768px){body.error-layout .container{max-width:730px}}body.error-layout .container-narrow>hr{margin:30px 0}body{background:#eee}.dash-content .section .tab-content,.dash-content .section-content{background:#fff}.navbar-brand img{float:left;margin:-5px}.navbar-brand span{display:inline-block;float:left;padding-left:10px;font-size:20px}.landing-screen i.fa{font-size:100px;color:#f7f7f7;margin-top:50px;margin-bottom:30px}.dash-content{margin-top:50px}.dash-content .section h2{margin:0}.dash-content .section .tab-pane{padding:15px}.dash-content .section .tab-pane .columns .placeholder,.dash-content .section .tab-pane .form-horizontal .placeholder{margin-top:-15px}.dash-content .section-content.section-content-transparent{background:0 0}.dash-content .table td.tools-column{width:150px;height:40px}.dash-content .table td.tools-column a{display:none}.dash-content .table tr:hover .tools-column a{display:inline-block}.dash-content .criteria-filter label{margin-right:15px}.dash-content .criteria-filter .panel-body{padding:15px 15px 5px}.dash-content .criteria-filter .form-group{margin-right:25px;margin-bottom:10px}.dash-content .criteria-filter .btn-col{margin-right:0}.panel .panel-footer .tools-footer{display:none}.panel .panel-footer .tools-footer a{margin-left:10px}.panel .panel-footer .label{margin-top:5px}.panel:hover .tools-footer{display:block}.placeholder{background:-webkit-repeating-linear-gradient(135deg,#fff,#fff 25%,#F7F7F7 25%,#F7F7F7 50%,#fff 50%) top left fixed;background:repeating-linear-gradient(-45deg,#fff,#fff 25%,#F7F7F7 25%,#F7F7F7 50%,#fff 50%) top left fixed;background-size:30px 30px;text-align:center;padding:30px 15px;margin:0 -15px;color:#777}.placeholder-row{padding:15px}.placeholder-row .placeholder{margin:0}.breadcrumb{padding:8px 0;background:0 0}.pagination-row{width:100%;text-align:center}footer{margin-top:10px}.modal-section{padding:15px} \ No newline at end of file diff --git a/src/resources/assets/build/js/collejo-min.js b/src/resources/assets/build/js/collejo-min.js deleted file mode 100644 index ad08f70..0000000 --- a/src/resources/assets/build/js/collejo-min.js +++ /dev/null @@ -1,22 +0,0 @@ -if(function(t,e){function n(t){var e=t.length,n=lt.type(t);return!lt.isWindow(t)&&(!(1!==t.nodeType||!e)||("array"===n||"function"!==n&&(0===e||"number"==typeof e&&e>0&&e-1 in t)))}function i(t){var e=St[t]={};return lt.each(t.match(ct)||[],function(t,n){e[n]=!0}),e}function r(t,n,i,r){if(lt.acceptData(t)){var a,o,s=lt.expando,l="string"==typeof n,u=t.nodeType,c=u?lt.cache:t,d=u?t[s]:t[s]&&s;if(d&&c[d]&&(r||c[d].data)||!l||i!==e)return d||(u?t[s]=d=J.pop()||lt.guid++:d=s),c[d]||(c[d]={},u||(c[d].toJSON=lt.noop)),"object"!=typeof n&&"function"!=typeof n||(r?c[d]=lt.extend(c[d],n):c[d].data=lt.extend(c[d].data,n)),a=c[d],r||(a.data||(a.data={}),a=a.data),i!==e&&(a[lt.camelCase(n)]=i),l?(o=a[n],null==o&&(o=a[lt.camelCase(n)])):o=a,o}}function a(t,e,n){if(lt.acceptData(t)){var i,r,a,o=t.nodeType,l=o?lt.cache:t,u=o?t[lt.expando]:lt.expando;if(l[u]){if(e&&(a=n?l[u]:l[u].data)){lt.isArray(e)?e=e.concat(lt.map(e,lt.camelCase)):e in a?e=[e]:(e=lt.camelCase(e),e=e in a?[e]:e.split(" "));for(i=0,r=e.length;i=0===n})}function h(t){var e=Xt.split("|"),n=t.createDocumentFragment();if(n.createElement)for(;e.length;)n.createElement(e.pop());return n}function f(t,e){return t.getElementsByTagName(e)[0]||t.appendChild(t.ownerDocument.createElement(e))}function p(t){var e=t.getAttributeNode("type");return t.type=(e&&e.specified)+"/"+t.type,t}function g(t){var e=re.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function m(t,e){for(var n,i=0;null!=(n=t[i]);i++)lt._data(n,"globalEval",!e||lt._data(e[i],"globalEval"))}function v(t,e){if(1===e.nodeType&<.hasData(t)){var n,i,r,a=lt._data(t),o=lt._data(e,a),s=a.events;if(s){delete o.handle,o.events={};for(n in s)for(i=0,r=s[n].length;i").css("cssText","display:block !important")).appendTo(e.documentElement),e=(ue[0].contentWindow||ue[0].contentDocument).document,e.write(""),e.close(),n=P(t,e),ue.detach()),_e[t]=n),n}function P(t,e){var n=lt(e.createElement(t)).appendTo(e.body),i=lt.css(n[0],"display");return n.remove(),i}function M(t,e,n,i){var r;if(lt.isArray(e))lt.each(e,function(e,r){n||Ae.test(t)?i(t,r):M(t+"["+("object"==typeof r?e:"")+"]",r,n,i)});else if(n||"object"!==lt.type(e))i(t,e);else for(r in e)M(t+"["+r+"]",e[r],n,i)}function E(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var i,r=0,a=e.toLowerCase().match(ct)||[];if(lt.isFunction(n))for(;i=a[r++];)"+"===i[0]?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(n)):(t[i]=t[i]||[]).push(n)}}function D(t,e,n,i){function r(s){var l;return a[s]=!0,lt.each(t[s]||[],function(t,s){var u=s(e,n,i);return"string"!=typeof u||o||a[u]?o?!(l=u):void 0:(e.dataTypes.unshift(u),r(u),!1)}),l}var a={},o=t===ze;return r(e.dataTypes[0])||!a["*"]&&r("*")}function O(t,n){var i,r,a=lt.ajaxSettings.flatOptions||{};for(r in n)n[r]!==e&&((a[r]?t:i||(i={}))[r]=n[r]);return i&<.extend(!0,t,i),t}function L(t,n,i){var r,a,o,s,l=t.contents,u=t.dataTypes,c=t.responseFields;for(s in c)s in i&&(n[c[s]]=i[s]);for(;"*"===u[0];)u.shift(),a===e&&(a=t.mimeType||n.getResponseHeader("Content-Type"));if(a)for(s in l)if(l[s]&&l[s].test(a)){u.unshift(s);break}if(u[0]in i)o=u[0];else{for(s in i){if(!u[0]||t.converters[s+" "+u[0]]){o=s;break}r||(r=s)}o=o||r}if(o)return o!==u[0]&&u.unshift(o),i[o]}function I(t,e){var n,i,r,a,o={},s=0,l=t.dataTypes.slice(),u=l[0];if(t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l[1])for(r in t.converters)o[r.toLowerCase()]=t.converters[r];for(;i=l[++s];)if("*"!==i){if("*"!==u&&u!==i){if(r=o[u+" "+i]||o["* "+i],!r)for(n in o)if(a=n.split(" "),a[1]===i&&(r=o[u+" "+a[0]]||o["* "+a[0]])){r===!0?r=o[n]:o[n]!==!0&&(i=a[0],l.splice(s--,0,i));break}if(r!==!0)if(r&&t["throws"])e=r(e);else try{e=r(e)}catch(c){return{state:"parsererror",error:r?c:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:e}}function N(){try{return new t.XMLHttpRequest}catch(e){}}function R(){try{return new t.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function F(){return setTimeout(function(){Ze=e}),Ze=lt.now()}function V(t,e){lt.each(e,function(e,n){for(var i=(an[e]||[]).concat(an["*"]),r=0,a=i.length;r)[^>]*|#([\w-]*))$/,ft=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,pt=/^[\],:{}\s]*$/,gt=/(?:^|:|,)(?:\s*\[)+/g,mt=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,vt=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,yt=/^-ms-/,xt=/-([\da-z])/gi,_t=function(t,e){return e.toUpperCase()},bt=function(t){(U.addEventListener||"load"===t.type||"complete"===U.readyState)&&(wt(),lt.ready())},wt=function(){U.addEventListener?(U.removeEventListener("DOMContentLoaded",bt,!1),t.removeEventListener("load",bt,!1)):(U.detachEvent("onreadystatechange",bt),t.detachEvent("onload",bt))};lt.fn=lt.prototype={jquery:tt,constructor:lt,init:function(t,n,i){var r,a;if(!t)return this;if("string"==typeof t){if(r="<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3?[null,t,null]:ht.exec(t),!r||!r[1]&&n)return!n||n.jquery?(n||i).find(t):this.constructor(n).find(t);if(r[1]){if(n=n instanceof lt?n[0]:n,lt.merge(this,lt.parseHTML(r[1],n&&n.nodeType?n.ownerDocument||n:U,!0)),ft.test(r[1])&<.isPlainObject(n))for(r in n)lt.isFunction(this[r])?this[r](n[r]):this.attr(r,n[r]);return this}if(a=U.getElementById(r[2]),a&&a.parentNode){if(a.id!==r[2])return i.find(t);this.length=1,this[0]=a}return this.context=U,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):lt.isFunction(t)?i.ready(t):(t.selector!==e&&(this.selector=t.selector,this.context=t.context),lt.makeArray(t,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return it.call(this)},get:function(t){return null==t?this.toArray():t<0?this[this.length+t]:this[t]},pushStack:function(t){var e=lt.merge(this.constructor(),t);return e.prevObject=this,e.context=this.context,e},each:function(t,e){return lt.each(this,t,e)},ready:function(t){return lt.ready.promise().done(t),this},slice:function(){return this.pushStack(it.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n0||(B.resolveWith(U,[lt]),lt.fn.trigger&<(U).trigger("ready").off("ready"))}},isFunction:function(t){return"function"===lt.type(t)},isArray:Array.isArray||function(t){return"array"===lt.type(t)},isWindow:function(t){return null!=t&&t==t.window},isNumeric:function(t){return!isNaN(parseFloat(t))&&isFinite(t)},type:function(t){return null==t?String(t):"object"==typeof t||"function"==typeof t?Z[at.call(t)]||"object":typeof t},isPlainObject:function(t){if(!t||"object"!==lt.type(t)||t.nodeType||lt.isWindow(t))return!1;try{if(t.constructor&&!ot.call(t,"constructor")&&!ot.call(t.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var i;for(i in t);return i===e||ot.call(t,i)},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},error:function(t){throw new Error(t)},parseHTML:function(t,e,n){if(!t||"string"!=typeof t)return null;"boolean"==typeof e&&(n=e,e=!1),e=e||U;var i=ft.exec(t),r=!n&&[];return i?[e.createElement(i[1])]:(i=lt.buildFragment([t],e,r),r&<(r).remove(),lt.merge([],i.childNodes))},parseJSON:function(e){return t.JSON&&t.JSON.parse?t.JSON.parse(e):null===e?e:"string"==typeof e&&(e=lt.trim(e),e&&pt.test(e.replace(mt,"@").replace(vt,"]").replace(gt,"")))?new Function("return "+e)():void lt.error("Invalid JSON: "+e)},parseXML:function(n){var i,r;if(!n||"string"!=typeof n)return null;try{t.DOMParser?(r=new DOMParser,i=r.parseFromString(n,"text/xml")):(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(n))}catch(a){i=e}return i&&i.documentElement&&!i.getElementsByTagName("parsererror").length||lt.error("Invalid XML: "+n),i},noop:function(){},globalEval:function(e){e&<.trim(e)&&(t.execScript||function(e){t.eval.call(t,e)})(e)},camelCase:function(t){return t.replace(yt,"ms-").replace(xt,_t)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,i){var r,a=0,o=t.length,s=n(t);if(i){if(s)for(;a-1;)u.splice(i,1),n&&(i<=o&&o--,i<=s&&s--)}),this},has:function(t){return t?lt.inArray(t,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=c=r=e,this},disabled:function(){return!u},lock:function(){return c=e,r||h.disable(),this},locked:function(){return!c},fireWith:function(t,e){return e=e||[],e=[t,e.slice?e.slice():e],!u||a&&!c||(n?c.push(e):d(e)),this},fire:function(){return h.fireWith(this,arguments),this},fired:function(){return!!a}};return h},lt.extend({Deferred:function(t){var e=[["resolve","done",lt.Callbacks("once memory"),"resolved"],["reject","fail",lt.Callbacks("once memory"),"rejected"],["notify","progress",lt.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return r.done(arguments).fail(arguments),this},then:function(){var t=arguments;return lt.Deferred(function(n){lt.each(e,function(e,a){var o=a[0],s=lt.isFunction(t[e])&&t[e];r[a[1]](function(){var t=s&&s.apply(this,arguments);t&<.isFunction(t.promise)?t.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[o+"With"](this===i?n.promise():this,s?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?lt.extend(t,i):i}},r={};return i.pipe=i.then,lt.each(e,function(t,a){var o=a[2],s=a[3];i[a[1]]=o.add,s&&o.add(function(){n=s},e[1^t][2].disable,e[2][2].lock),r[a[0]]=function(){return r[a[0]+"With"](this===r?i:this,arguments),this},r[a[0]+"With"]=o.fireWith}),i.promise(r),t&&t.call(r,r),r},when:function(t){var e,n,i,r=0,a=it.call(arguments),o=a.length,s=1!==o||t&<.isFunction(t.promise)?o:0,l=1===s?t:lt.Deferred(),u=function(t,n,i){return function(r){n[t]=this,i[t]=arguments.length>1?it.call(arguments):r,i===e?l.notifyWith(n,i):--s||l.resolveWith(n,i)}};if(o>1)for(e=new Array(o),n=new Array(o),i=new Array(o);r
    a",n=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0],!n||!i||!n.length)return{};a=U.createElement("select"),s=a.appendChild(U.createElement("option")),r=d.getElementsByTagName("input")[0],i.style.cssText="top:1px;float:left;opacity:.5",e={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(i.getAttribute("style")),hrefNormalized:"/a"===i.getAttribute("href"),opacity:/^0.5/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:!!r.value,optSelected:s.selected,enctype:!!U.createElement("form").enctype,html5Clone:"<:nav>"!==U.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===U.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},r.checked=!0,e.noCloneChecked=r.cloneNode(!0).checked,a.disabled=!0,e.optDisabled=!s.disabled;try{delete d.test}catch(h){e.deleteExpando=!1}r=U.createElement("input"),r.setAttribute("value",""),e.input=""===r.getAttribute("value"),r.value="t",r.setAttribute("type","radio"),e.radioValue="t"===r.value,r.setAttribute("checked","t"),r.setAttribute("name","t"),o=U.createDocumentFragment(),o.appendChild(r),e.appendChecked=r.checked,e.checkClone=o.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){e.noCloneEvent=!1}),d.cloneNode(!0).click());for(c in{submit:!0,change:!0,focusin:!0})d.setAttribute(l="on"+c,"t"),e[c+"Bubbles"]=l in t||d.attributes[l].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",e.clearCloneStyle="content-box"===d.style.backgroundClip,lt(function(){var n,i,r,a="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",o=U.getElementsByTagName("body")[0];o&&(n=U.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",o.appendChild(n).appendChild(d),d.innerHTML="
    t
    ",r=d.getElementsByTagName("td"),r[0].style.cssText="padding:0;margin:0;border:0;display:none",u=0===r[0].offsetHeight,r[0].style.display="",r[1].style.display="none",e.reliableHiddenOffsets=u&&0===r[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",e.boxSizing=4===d.offsetWidth,e.doesNotIncludeMarginInBodyOffset=1!==o.offsetTop,t.getComputedStyle&&(e.pixelPosition="1%"!==(t.getComputedStyle(d,null)||{}).top,e.boxSizingReliable="4px"===(t.getComputedStyle(d,null)||{width:"4px"}).width,i=d.appendChild(U.createElement("div")),i.style.cssText=d.style.cssText=a,i.style.marginRight=i.style.width="0",d.style.width="1px",e.reliableMarginRight=!parseFloat((t.getComputedStyle(i,null)||{}).marginRight)),typeof d.style.zoom!==q&&(d.innerHTML="",d.style.cssText=a+"width:1px;padding:1px;display:inline;zoom:1",e.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
    ",d.firstChild.style.width="5px",e.shrinkWrapBlocks=3!==d.offsetWidth,e.inlineBlockNeedsLayout&&(o.style.zoom=1)),o.removeChild(n),n=d=r=i=null)}),n=a=o=s=i=r=null,e}();var Tt=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Ct=/([A-Z])/g;lt.extend({cache:{},expando:"jQuery"+(tt+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(t){return t=t.nodeType?lt.cache[t[lt.expando]]:t[lt.expando],!!t&&!s(t)},data:function(t,e,n){return r(t,e,n)},removeData:function(t,e){return a(t,e)},_data:function(t,e,n){return r(t,e,n,!0)},_removeData:function(t,e){return a(t,e,!0)},acceptData:function(t){if(t.nodeType&&1!==t.nodeType&&9!==t.nodeType)return!1;var e=t.nodeName&<.noData[t.nodeName.toLowerCase()];return!e||e!==!0&&t.getAttribute("classid")===e}}),lt.fn.extend({data:function(t,n){var i,r,a=this[0],s=0,l=null;if(t===e){if(this.length&&(l=lt.data(a),1===a.nodeType&&!lt._data(a,"parsedAttrs"))){for(i=a.attributes;s1,null,!0)},removeData:function(t){return this.each(function(){lt.removeData(this,t)})}}),lt.extend({queue:function(t,e,n){var i;if(t)return e=(e||"fx")+"queue",i=lt._data(t,e),n&&(!i||lt.isArray(n)?i=lt._data(t,e,lt.makeArray(n)):i.push(n)),i||[]},dequeue:function(t,e){e=e||"fx";var n=lt.queue(t,e),i=n.length,r=n.shift(),a=lt._queueHooks(t,e),o=function(){lt.dequeue(t,e)};"inprogress"===r&&(r=n.shift(),i--),a.cur=r,r&&("fx"===e&&n.unshift("inprogress"),delete a.stop,r.call(t,o,a)),!i&&a&&a.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return lt._data(t,n)||lt._data(t,n,{empty:lt.Callbacks("once memory").add(function(){lt._removeData(t,e+"queue"),lt._removeData(t,n)})})}}),lt.fn.extend({queue:function(t,n){var i=2;return"string"!=typeof t&&(n=t,t="fx",i--),arguments.length1)},removeAttr:function(t){return this.each(function(){lt.removeAttr(this,t)})},prop:function(t,e){return lt.access(this,lt.prop,t,e,arguments.length>1)},removeProp:function(t){return t=lt.propFix[t]||t,this.each(function(){try{this[t]=e,delete this[t]}catch(n){}})},addClass:function(t){var e,n,i,r,a,o=0,s=this.length,l="string"==typeof t&&t;if(lt.isFunction(t))return this.each(function(e){lt(this).addClass(t.call(this,e,this.className))});if(l)for(e=(t||"").match(ct)||[];o=0;)i=i.replace(" "+r+" "," ");n.className=t?lt.trim(i):""}return this},toggleClass:function(t,e){var n=typeof t,i="boolean"==typeof e;return lt.isFunction(t)?this.each(function(n){lt(this).toggleClass(t.call(this,n,this.className,e),e)}):this.each(function(){if("string"===n)for(var r,a=0,o=lt(this),s=e,l=t.match(ct)||[];r=l[a++];)s=i?s:!o.hasClass(r),o[s?"addClass":"removeClass"](r);else n!==q&&"boolean"!==n||(this.className&<._data(this,"__className__",this.className),this.className=this.className||t===!1?"":lt._data(this,"__className__")||"")})},hasClass:function(t){for(var e=" "+t+" ",n=0,i=this.length;n=0)return!0;return!1},val:function(t){var n,i,r,a=this[0];{if(arguments.length)return r=lt.isFunction(t),this.each(function(n){var a,o=lt(this);1===this.nodeType&&(a=r?t.call(this,n,o.val()):t,null==a?a="":"number"==typeof a?a+="":lt.isArray(a)&&(a=lt.map(a,function(t){return null==t?"":t+""})),i=lt.valHooks[this.type]||lt.valHooks[this.nodeName.toLowerCase()],i&&"set"in i&&i.set(this,a,"value")!==e||(this.value=a))});if(a)return i=lt.valHooks[a.type]||lt.valHooks[a.nodeName.toLowerCase()],i&&"get"in i&&(n=i.get(a,"value"))!==e?n:(n=a.value,"string"==typeof n?n.replace(Mt,""):null==n?"":n)}}}),lt.extend({valHooks:{option:{get:function(t){var e=t.attributes.value;return!e||e.specified?t.value:t.text}},select:{get:function(t){for(var e,n,i=t.options,r=t.selectedIndex,a="select-one"===t.type||r<0,o=a?null:[],s=a?r+1:i.length,l=r<0?s:a?r:0;l=0}),n.length||(t.selectedIndex=-1),n}}},attr:function(t,n,i){var r,a,o,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return typeof t.getAttribute===q?lt.prop(t,n,i):(a=1!==s||!lt.isXMLDoc(t),a&&(n=n.toLowerCase(),r=lt.attrHooks[n]||(Ot.test(n)?kt:At)),i===e?r&&a&&"get"in r&&null!==(o=r.get(t,n))?o:(typeof t.getAttribute!==q&&(o=t.getAttribute(n)),null==o?e:o):null!==i?r&&a&&"set"in r&&(o=r.set(t,i,n))!==e?o:(t.setAttribute(n,i+""),i):void lt.removeAttr(t,n))},removeAttr:function(t,e){var n,i,r=0,a=e&&e.match(ct);if(a&&1===t.nodeType)for(;n=a[r++];)i=lt.propFix[n]||n,Ot.test(n)?!It&&Lt.test(n)?t[lt.camelCase("default-"+n)]=t[i]=!1:t[i]=!1:lt.attr(t,n,""),t.removeAttribute(It?n:i)},attrHooks:{type:{set:function(t,e){if(!lt.support.radioValue&&"radio"===e&<.nodeName(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(t,n,i){var r,a,o,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return o=1!==s||!lt.isXMLDoc(t),o&&(n=lt.propFix[n]||n,a=lt.propHooks[n]),i!==e?a&&"set"in a&&(r=a.set(t,i,n))!==e?r:t[n]=i:a&&"get"in a&&null!==(r=a.get(t,n))?r:t[n]},propHooks:{tabIndex:{get:function(t){var n=t.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):Et.test(t.nodeName)||Dt.test(t.nodeName)&&t.href?0:e}}}}),kt={get:function(t,n){var i=lt.prop(t,n),r="boolean"==typeof i&&t.getAttribute(n),a="boolean"==typeof i?Nt&&It?null!=r:Lt.test(n)?t[lt.camelCase("default-"+n)]:!!r:t.getAttributeNode(n);return a&&a.value!==!1?n.toLowerCase():e; -},set:function(t,e,n){return e===!1?lt.removeAttr(t,n):Nt&&It||!Lt.test(n)?t.setAttribute(!It&<.propFix[n]||n,n):t[lt.camelCase("default-"+n)]=t[n]=!0,n}},Nt&&It||(lt.attrHooks.value={get:function(t,n){var i=t.getAttributeNode(n);return lt.nodeName(t,"input")?t.defaultValue:i&&i.specified?i.value:e},set:function(t,e,n){return lt.nodeName(t,"input")?void(t.defaultValue=e):At&&At.set(t,e,n)}}),It||(At=lt.valHooks.button={get:function(t,n){var i=t.getAttributeNode(n);return i&&("id"===n||"name"===n||"coords"===n?""!==i.value:i.specified)?i.value:e},set:function(t,n,i){var r=t.getAttributeNode(i);return r||t.setAttributeNode(r=t.ownerDocument.createAttribute(i)),r.value=n+="","value"===i||n===t.getAttribute(i)?n:e}},lt.attrHooks.contenteditable={get:At.get,set:function(t,e,n){At.set(t,""!==e&&e,n)}},lt.each(["width","height"],function(t,e){lt.attrHooks[e]=lt.extend(lt.attrHooks[e],{set:function(t,n){if(""===n)return t.setAttribute(e,"auto"),n}})})),lt.support.hrefNormalized||(lt.each(["href","src","width","height"],function(t,n){lt.attrHooks[n]=lt.extend(lt.attrHooks[n],{get:function(t){var i=t.getAttribute(n,2);return null==i?e:i}})}),lt.each(["href","src"],function(t,e){lt.propHooks[e]={get:function(t){return t.getAttribute(e,4)}}})),lt.support.style||(lt.attrHooks.style={get:function(t){return t.style.cssText||e},set:function(t,e){return t.style.cssText=e+""}}),lt.support.optSelected||(lt.propHooks.selected=lt.extend(lt.propHooks.selected,{get:function(t){var e=t.parentNode;return e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex),null}})),lt.support.enctype||(lt.propFix.enctype="encoding"),lt.support.checkOn||lt.each(["radio","checkbox"],function(){lt.valHooks[this]={get:function(t){return null===t.getAttribute("value")?"on":t.value}}}),lt.each(["radio","checkbox"],function(){lt.valHooks[this]=lt.extend(lt.valHooks[this],{set:function(t,e){if(lt.isArray(e))return t.checked=lt.inArray(lt(t).val(),e)>=0}})});var Rt=/^(?:input|select|textarea)$/i,Ft=/^key/,Vt=/^(?:mouse|contextmenu)|click/,jt=/^(?:focusinfocus|focusoutblur)$/,Gt=/^([^.]*)(?:\.(.+)|)$/;lt.event={global:{},add:function(t,n,i,r,a){var o,s,l,u,c,d,h,f,p,g,m,v=lt._data(t);if(v){for(i.handler&&(u=i,i=u.handler,a=u.selector),i.guid||(i.guid=lt.guid++),(s=v.events)||(s=v.events={}),(d=v.handle)||(d=v.handle=function(t){return typeof lt===q||t&<.event.triggered===t.type?e:lt.event.dispatch.apply(d.elem,arguments)},d.elem=t),n=(n||"").match(ct)||[""],l=n.length;l--;)o=Gt.exec(n[l])||[],p=m=o[1],g=(o[2]||"").split(".").sort(),c=lt.event.special[p]||{},p=(a?c.delegateType:c.bindType)||p,c=lt.event.special[p]||{},h=lt.extend({type:p,origType:m,data:r,handler:i,guid:i.guid,selector:a,needsContext:a&<.expr.match.needsContext.test(a),namespace:g.join(".")},u),(f=s[p])||(f=s[p]=[],f.delegateCount=0,c.setup&&c.setup.call(t,r,g,d)!==!1||(t.addEventListener?t.addEventListener(p,d,!1):t.attachEvent&&t.attachEvent("on"+p,d))),c.add&&(c.add.call(t,h),h.handler.guid||(h.handler.guid=i.guid)),a?f.splice(f.delegateCount++,0,h):f.push(h),lt.event.global[p]=!0;t=null}},remove:function(t,e,n,i,r){var a,o,s,l,u,c,d,h,f,p,g,m=lt.hasData(t)&<._data(t);if(m&&(c=m.events)){for(e=(e||"").match(ct)||[""],u=e.length;u--;)if(s=Gt.exec(e[u])||[],f=g=s[1],p=(s[2]||"").split(".").sort(),f){for(d=lt.event.special[f]||{},f=(i?d.delegateType:d.bindType)||f,h=c[f]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=a=h.length;a--;)o=h[a],!r&&g!==o.origType||n&&n.guid!==o.guid||s&&!s.test(o.namespace)||i&&i!==o.selector&&("**"!==i||!o.selector)||(h.splice(a,1),o.selector&&h.delegateCount--,d.remove&&d.remove.call(t,o));l&&!h.length&&(d.teardown&&d.teardown.call(t,p,m.handle)!==!1||lt.removeEvent(t,f,m.handle),delete c[f])}else for(f in c)lt.event.remove(t,f+e[u],n,i,!0);lt.isEmptyObject(c)&&(delete m.handle,lt._removeData(t,"events"))}},trigger:function(n,i,r,a){var o,s,l,u,c,d,h,f=[r||U],p=ot.call(n,"type")?n.type:n,g=ot.call(n,"namespace")?n.namespace.split("."):[];if(l=d=r=r||U,3!==r.nodeType&&8!==r.nodeType&&!jt.test(p+lt.event.triggered)&&(p.indexOf(".")>=0&&(g=p.split("."),p=g.shift(),g.sort()),s=p.indexOf(":")<0&&"on"+p,n=n[lt.expando]?n:new lt.Event(p,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=g.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=e,n.target||(n.target=r),i=null==i?[n]:lt.makeArray(i,[n]),c=lt.event.special[p]||{},a||!c.trigger||c.trigger.apply(r,i)!==!1)){if(!a&&!c.noBubble&&!lt.isWindow(r)){for(u=c.delegateType||p,jt.test(u+p)||(l=l.parentNode);l;l=l.parentNode)f.push(l),d=l;d===(r.ownerDocument||U)&&f.push(d.defaultView||d.parentWindow||t)}for(h=0;(l=f[h++])&&!n.isPropagationStopped();)n.type=h>1?u:c.bindType||p,o=(lt._data(l,"events")||{})[n.type]&<._data(l,"handle"),o&&o.apply(l,i),o=s&&l[s],o&<.acceptData(l)&&o.apply&&o.apply(l,i)===!1&&n.preventDefault();if(n.type=p,!a&&!n.isDefaultPrevented()&&(!c._default||c._default.apply(r.ownerDocument,i)===!1)&&("click"!==p||!lt.nodeName(r,"a"))&<.acceptData(r)&&s&&r[p]&&!lt.isWindow(r)){d=r[s],d&&(r[s]=null),lt.event.triggered=p;try{r[p]()}catch(m){}lt.event.triggered=e,d&&(r[s]=d)}return n.result}},dispatch:function(t){t=lt.event.fix(t);var n,i,r,a,o,s=[],l=it.call(arguments),u=(lt._data(this,"events")||{})[t.type]||[],c=lt.event.special[t.type]||{};if(l[0]=t,t.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,t)!==!1){for(s=lt.event.handlers.call(this,t,u),n=0;(a=s[n++])&&!t.isPropagationStopped();)for(t.currentTarget=a.elem,o=0;(r=a.handlers[o++])&&!t.isImmediatePropagationStopped();)t.namespace_re&&!t.namespace_re.test(r.namespace)||(t.handleObj=r,t.data=r.data,i=((lt.event.special[r.origType]||{}).handle||r.handler).apply(a.elem,l),i!==e&&(t.result=i)===!1&&(t.preventDefault(),t.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(t,n){var i,r,a,o,s=[],l=n.delegateCount,u=t.target;if(l&&u.nodeType&&(!t.button||"click"!==t.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==t.type)){for(a=[],o=0;o=0:lt.find(i,this,null,[u]).length),a[i]&&a.push(r);a.length&&s.push({elem:u,handlers:a})}return lT.cacheLength&&delete t[e.shift()],t[n]=i}}function r(t){return t[j]=!0,t}function a(t){var e=D.createElement("div");try{return t(e)}catch(n){return!1}finally{e=null}}function o(t,e,n,i){var r,a,o,s,l,u,c,f,p,g;if((e?e.ownerDocument||e:G)!==D&&E(e),e=e||D,n=n||[],!t||"string"!=typeof t)return n;if(1!==(s=e.nodeType)&&9!==s)return[];if(!L&&!i){if(r=gt.exec(t))if(o=r[1]){if(9===s){if(a=e.getElementById(o),!a||!a.parentNode)return n;if(a.id===o)return n.push(a),n}else if(e.ownerDocument&&(a=e.ownerDocument.getElementById(o))&&F(e,a)&&a.id===o)return n.push(a),n}else{if(r[2])return K.apply(n,Z.call(e.getElementsByTagName(t),0)),n;if((o=r[3])&&H.getByClassName&&e.getElementsByClassName)return K.apply(n,Z.call(e.getElementsByClassName(o),0)),n}if(H.qsa&&!I.test(t)){if(c=!0,f=j,p=e,g=9===s&&t,1===s&&"object"!==e.nodeName.toLowerCase()){for(u=d(t),(c=e.getAttribute("id"))?f=c.replace(yt,"\\$&"):e.setAttribute("id",f),f="[id='"+f+"'] ",l=u.length;l--;)u[l]=f+h(u[l]);p=ft.test(t)&&e.parentNode||e,g=u.join(",")}if(g)try{return K.apply(n,Z.call(p.querySelectorAll(g),0)),n}catch(m){}finally{c||e.removeAttribute("id")}}}return _(t.replace(ot,"$1"),e,n,i)}function s(t,e){var n=e&&t,i=n&&(~e.sourceIndex||U)-(~t.sourceIndex||U);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function l(t){return function(e){var n=e.nodeName.toLowerCase();return"input"===n&&e.type===t}}function u(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function c(t){return r(function(e){return e=+e,r(function(n,i){for(var r,a=t([],n.length,e),o=a.length;o--;)n[r=a[o]]&&(n[r]=!(i[r]=n[r]))})})}function d(t,e){var n,i,r,a,s,l,u,c=B[t+" "];if(c)return e?0:c.slice(0);for(s=t,l=[],u=T.preFilter;s;){n&&!(i=st.exec(s))||(i&&(s=s.slice(i[0].length)||s),l.push(r=[])),n=!1,(i=ut.exec(s))&&(n=i.shift(),r.push({value:n,type:i[0].replace(ot," ")}),s=s.slice(n.length));for(a in T.filter)!(i=ht[a].exec(s))||u[a]&&!(i=u[a](i))||(n=i.shift(),r.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return e?s.length:s?o.error(t):B(t,l).slice(0)}function h(t){for(var e=0,n=t.length,i="";e1?function(e,n,i){for(var r=t.length;r--;)if(!t[r](e,n,i))return!1;return!0}:t[0]}function g(t,e,n,i,r){for(var a,o=[],s=0,l=t.length,u=null!=e;s-1&&(r[u]=!(o[u]=d))}}else y=g(y===o?y.splice(p,y.length):y),a?a(null,o,y,l):K.apply(o,y)})}function v(t){for(var e,n,i,r=t.length,a=T.relative[t[0].type],o=a||T.relative[" "],s=a?1:0,l=f(function(t){return t===e},o,!0),u=f(function(t){return J.call(e,t)>-1},o,!0),c=[function(t,n,i){return!a&&(i||n!==M)||((e=n).nodeType?l(t,n,i):u(t,n,i))}];s1&&p(c),s>1&&h(t.slice(0,s-1)).replace(ot,"$1"),n,s0,a=t.length>0,s=function(r,s,l,u,c){var d,h,f,p=[],m=0,v="0",y=r&&[],x=null!=c,_=M,b=r||a&&T.find.TAG("*",c&&s.parentNode||s),w=$+=null==_?1:Math.random()||.1;for(x&&(M=s!==D&&s,S=n);null!=(d=b[v]);v++){if(a&&d){for(h=0;f=t[h++];)if(f(d,s,l)){u.push(d);break}x&&($=w,S=++n)}i&&((d=!f&&d)&&m--,r&&y.push(d))}if(m+=v,i&&v!==m){for(h=0;f=e[h++];)f(y,p,s,l);if(r){if(m>0)for(;v--;)y[v]||p[v]||(p[v]=Q.call(u));p=g(p)}K.apply(u,p),x&&!r&&p.length>0&&m+e.length>1&&o.uniqueSort(u)}return x&&($=w,M=_),y};return i?r(s):s}function x(t,e,n){for(var i=0,r=e.length;i2&&"ID"===(o=a[0]).type&&9===e.nodeType&&!L&&T.relative[a[1].type]){if(e=T.find.ID(o.matches[0].replace(_t,bt),e)[0],!e)return n;t=t.slice(a.shift().value.length)}for(r=ht.needsContext.test(t)?0:a.length;r--&&(o=a[r],!T.relative[s=o.type]);)if((l=T.find[s])&&(i=l(o.matches[0].replace(_t,bt),ft.test(a[0].type)&&e.parentNode||e))){if(a.splice(r,1),t=i.length&&h(a),!t)return K.apply(n,Z.call(i,0)),n;break}}return k(t,u)(i,e,L,n,ft.test(t)),n}function b(){}var w,S,T,C,A,k,P,M,E,D,O,L,I,N,R,F,V,j="sizzle"+-new Date,G=t.document,H={},$=0,z=0,Y=i(),B=i(),X=i(),q=typeof e,U=1<<31,W=[],Q=W.pop,K=W.push,Z=W.slice,J=W.indexOf||function(t){for(var e=0,n=this.length;e+~])"+tt+"*"),ct=new RegExp(at),dt=new RegExp("^"+nt+"$"),ht={ID:new RegExp("^#("+et+")"),CLASS:new RegExp("^\\.("+et+")"),NAME:new RegExp("^\\[name=['\"]?("+et+")['\"]?\\]"),TAG:new RegExp("^("+et.replace("w","w*")+")"),ATTR:new RegExp("^"+rt),PSEUDO:new RegExp("^"+at),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+tt+"*(even|odd|(([+-]|)(\\d*)n|)"+tt+"*(?:([+-]|)"+tt+"*(\\d+)|))"+tt+"*\\)|)","i"),needsContext:new RegExp("^"+tt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+tt+"*((?:-\\d)?\\d*)"+tt+"*\\)|)(?=[^-]|$)","i")},ft=/[\x20\t\r\n\f]*[+~]/,pt=/^[^{]+\{\s*\[native code/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/^(?:input|select|textarea|button)$/i,vt=/^h\d$/i,yt=/'|\\/g,xt=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,_t=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,bt=function(t,e){var n="0x"+e-65536;return n!==n?e:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)};try{Z.call(G.documentElement.childNodes,0)[0].nodeType}catch(wt){Z=function(t){for(var e,n=[];e=this[t++];)n.push(e);return n}}A=o.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},E=o.setDocument=function(t){var i=t?t.ownerDocument||t:G;return i!==D&&9===i.nodeType&&i.documentElement?(D=i,O=i.documentElement,L=A(i),H.tagNameNoComments=a(function(t){return t.appendChild(i.createComment("")),!t.getElementsByTagName("*").length}),H.attributes=a(function(t){t.innerHTML="";var e=typeof t.lastChild.getAttribute("multiple");return"boolean"!==e&&"string"!==e}),H.getByClassName=a(function(t){return t.innerHTML="",!(!t.getElementsByClassName||!t.getElementsByClassName("e").length)&&(t.lastChild.className="e",2===t.getElementsByClassName("e").length)}),H.getByName=a(function(t){t.id=j+0,t.innerHTML="
    ",O.insertBefore(t,O.firstChild);var e=i.getElementsByName&&i.getElementsByName(j).length===2+i.getElementsByName(j+0).length;return H.getIdNotName=!i.getElementById(j),O.removeChild(t),e}),T.attrHandle=a(function(t){return t.innerHTML="",t.firstChild&&typeof t.firstChild.getAttribute!==q&&"#"===t.firstChild.getAttribute("href")})?{}:{href:function(t){return t.getAttribute("href",2)},type:function(t){return t.getAttribute("type")}},H.getIdNotName?(T.find.ID=function(t,e){if(typeof e.getElementById!==q&&!L){var n=e.getElementById(t);return n&&n.parentNode?[n]:[]}},T.filter.ID=function(t){var e=t.replace(_t,bt);return function(t){return t.getAttribute("id")===e}}):(T.find.ID=function(t,n){if(typeof n.getElementById!==q&&!L){var i=n.getElementById(t);return i?i.id===t||typeof i.getAttributeNode!==q&&i.getAttributeNode("id").value===t?[i]:e:[]}},T.filter.ID=function(t){var e=t.replace(_t,bt);return function(t){var n=typeof t.getAttributeNode!==q&&t.getAttributeNode("id");return n&&n.value===e}}),T.find.TAG=H.tagNameNoComments?function(t,e){if(typeof e.getElementsByTagName!==q)return e.getElementsByTagName(t)}:function(t,e){var n,i=[],r=0,a=e.getElementsByTagName(t);if("*"===t){for(;n=a[r++];)1===n.nodeType&&i.push(n);return i}return a},T.find.NAME=H.getByName&&function(t,e){if(typeof e.getElementsByName!==q)return e.getElementsByName(name)},T.find.CLASS=H.getByClassName&&function(t,e){if(typeof e.getElementsByClassName!==q&&!L)return e.getElementsByClassName(t)},N=[],I=[":focus"],(H.qsa=n(i.querySelectorAll))&&(a(function(t){t.innerHTML="",t.querySelectorAll("[selected]").length||I.push("\\["+tt+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),t.querySelectorAll(":checked").length||I.push(":checked")}),a(function(t){t.innerHTML="",t.querySelectorAll("[i^='']").length&&I.push("[*^$]="+tt+"*(?:\"\"|'')"),t.querySelectorAll(":enabled").length||I.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),I.push(",.*:")})),(H.matchesSelector=n(R=O.matchesSelector||O.mozMatchesSelector||O.webkitMatchesSelector||O.oMatchesSelector||O.msMatchesSelector))&&a(function(t){H.disconnectedMatch=R.call(t,"div"),R.call(t,"[s!='']:x"),N.push("!=",at)}),I=new RegExp(I.join("|")),N=new RegExp(N.join("|")),F=n(O.contains)||O.compareDocumentPosition?function(t,e){var n=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},V=O.compareDocumentPosition?function(t,e){var n;return t===e?(P=!0,0):(n=e.compareDocumentPosition&&t.compareDocumentPosition&&t.compareDocumentPosition(e))?1&n||t.parentNode&&11===t.parentNode.nodeType?t===i||F(G,t)?-1:e===i||F(G,e)?1:0:4&n?-1:1:t.compareDocumentPosition?-1:1}:function(t,e){var n,r=0,a=t.parentNode,o=e.parentNode,l=[t],u=[e];if(t===e)return P=!0,0;if(!a||!o)return t===i?-1:e===i?1:a?-1:o?1:0;if(a===o)return s(t,e);for(n=t;n=n.parentNode;)l.unshift(n);for(n=e;n=n.parentNode;)u.unshift(n);for(;l[r]===u[r];)r++;return r?s(l[r],u[r]):l[r]===G?-1:u[r]===G?1:0},P=!1,[0,0].sort(V),H.detectDuplicates=P,D):D},o.matches=function(t,e){return o(t,null,null,e)},o.matchesSelector=function(t,e){if((t.ownerDocument||t)!==D&&E(t),e=e.replace(xt,"='$1']"),H.matchesSelector&&!L&&(!N||!N.test(e))&&!I.test(e))try{var n=R.call(t,e);if(n||H.disconnectedMatch||t.document&&11!==t.document.nodeType)return n}catch(i){}return o(e,D,null,[t]).length>0},o.contains=function(t,e){return(t.ownerDocument||t)!==D&&E(t),F(t,e)},o.attr=function(t,e){var n;return(t.ownerDocument||t)!==D&&E(t),L||(e=e.toLowerCase()),(n=T.attrHandle[e])?n(t):L||H.attributes?t.getAttribute(e):((n=t.getAttributeNode(e))||t.getAttribute(e))&&t[e]===!0?e:n&&n.specified?n.value:null},o.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},o.uniqueSort=function(t){var e,n=[],i=1,r=0;if(P=!H.detectDuplicates,t.sort(V),P){for(;e=t[i];i++)e===t[i-1]&&(r=n.push(i));for(;r--;)t.splice(n[r],1)}return t},C=o.getText=function(t){var e,n="",i=0,r=t.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=C(t)}else if(3===r||4===r)return t.nodeValue}else for(;e=t[i];i++)n+=C(e);return n},T=o.selectors={cacheLength:50,createPseudo:r,match:ht,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(_t,bt),t[3]=(t[4]||t[5]||"").replace(_t,bt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||o.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&o.error(t[0]),t},PSEUDO:function(t){var e,n=!t[5]&&t[2];return ht.CHILD.test(t[0])?null:(t[4]?t[2]=t[4]:n&&ct.test(n)&&(e=d(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){return"*"===t?function(){return!0}:(t=t.replace(_t,bt).toLowerCase(),function(e){return e.nodeName&&e.nodeName.toLowerCase()===t})},CLASS:function(t){var e=Y[t+" "];return e||(e=new RegExp("(^|"+tt+")"+t+"("+tt+"|$)"))&&Y(t,function(t){return e.test(t.className||typeof t.getAttribute!==q&&t.getAttribute("class")||"")})},ATTR:function(t,e,n){return function(i){var r=o.attr(i,t);return null==r?"!="===e:!e||(r+="","="===e?r===n:"!="===e?r!==n:"^="===e?n&&0===r.indexOf(n):"*="===e?n&&r.indexOf(n)>-1:"$="===e?n&&r.slice(-n.length)===n:"~="===e?(" "+r+" ").indexOf(n)>-1:"|="===e&&(r===n||r.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,n,i,r){var a="nth"!==t.slice(0,3),o="last"!==t.slice(-4),s="of-type"===e;return 1===i&&0===r?function(t){return!!t.parentNode}:function(e,n,l){var u,c,d,h,f,p,g=a!==o?"nextSibling":"previousSibling",m=e.parentNode,v=s&&e.nodeName.toLowerCase(),y=!l&&!s;if(m){if(a){for(;g;){for(d=e;d=d[g];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=g="only"===t&&!p&&"nextSibling"}return!0}if(p=[o?m.firstChild:m.lastChild],o&&y){for(c=m[j]||(m[j]={}),u=c[t]||[],f=u[0]===$&&u[1],h=u[0]===$&&u[2],d=f&&m.childNodes[f];d=++f&&d&&d[g]||(h=f=0)||p.pop();)if(1===d.nodeType&&++h&&d===e){c[t]=[$,f,h];break}}else if(y&&(u=(e[j]||(e[j]={}))[t])&&u[0]===$)h=u[1];else for(;(d=++f&&d&&d[g]||(h=f=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++h||(y&&((d[j]||(d[j]={}))[t]=[$,h]),d!==e)););return h-=r,h===i||h%i===0&&h/i>=0}}},PSEUDO:function(t,e){var n,i=T.pseudos[t]||T.setFilters[t.toLowerCase()]||o.error("unsupported pseudo: "+t);return i[j]?i(e):i.length>1?(n=[t,t,"",e],T.setFilters.hasOwnProperty(t.toLowerCase())?r(function(t,n){for(var r,a=i(t,e),o=a.length;o--;)r=J.call(t,a[o]),t[r]=!(n[r]=a[o])}):function(t){return i(t,0,n)}):i}},pseudos:{not:r(function(t){var e=[],n=[],i=k(t.replace(ot,"$1"));return i[j]?r(function(t,e,n,r){for(var a,o=i(t,null,r,[]),s=t.length;s--;)(a=o[s])&&(t[s]=!(e[s]=a))}):function(t,r,a){return e[0]=t,i(e,null,a,n),!n.pop()}}),has:r(function(t){return function(e){return o(t,e).length>0}}),contains:r(function(t){return function(e){return(e.textContent||e.innerText||C(e)).indexOf(t)>-1}}),lang:r(function(t){return dt.test(t||"")||o.error("unsupported lang: "+t),t=t.replace(_t,bt).toLowerCase(),function(e){var n;do if(n=L?e.getAttribute("xml:lang")||e.getAttribute("lang"):e.lang)return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===O},focus:function(t){return t===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeName>"@"||3===t.nodeType||4===t.nodeType)return!1;return!0},parent:function(t){return!T.pseudos.empty(t)},header:function(t){return vt.test(t.nodeName)},input:function(t){return mt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||e.toLowerCase()===t.type)},first:c(function(){return[0]}),last:c(function(t,e){return[e-1]}),eq:c(function(t,e,n){return[n<0?n+e:n]}),even:c(function(t,e){for(var n=0;n=0;)t.push(i);return t}),gt:c(function(t,e,n){for(var i=n<0?n+e:n;++i1?lt.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+t,n},has:function(t){var e,n=lt(t,this),i=n.length;return this.filter(function(){for(e=0;e=0:lt.filter(t,this).length>0:this.filter(t).length>0)},closest:function(t,e){for(var n,i=0,r=this.length,a=[],o=Yt.test(t)||"string"!=typeof t?lt(t,e||this.context):0;i-1:lt.find.matchesSelector(n,t)){a.push(n);break}n=n.parentNode}return this.pushStack(a.length>1?lt.unique(a):a)},index:function(t){return t?"string"==typeof t?lt.inArray(this[0],lt(t)):lt.inArray(t.jquery?t[0]:t,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){var n="string"==typeof t?lt(t,e):lt.makeArray(t&&t.nodeType?[t]:t),i=lt.merge(this.get(),n);return this.pushStack(lt.unique(i))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),lt.fn.andSelf=lt.fn.addBack,lt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return lt.dir(t,"parentNode")},parentsUntil:function(t,e,n){return lt.dir(t,"parentNode",n)},next:function(t){return c(t,"nextSibling")},prev:function(t){return c(t,"previousSibling"); -},nextAll:function(t){return lt.dir(t,"nextSibling")},prevAll:function(t){return lt.dir(t,"previousSibling")},nextUntil:function(t,e,n){return lt.dir(t,"nextSibling",n)},prevUntil:function(t,e,n){return lt.dir(t,"previousSibling",n)},siblings:function(t){return lt.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return lt.sibling(t.firstChild)},contents:function(t){return lt.nodeName(t,"iframe")?t.contentDocument||t.contentWindow.document:lt.merge([],t.childNodes)}},function(t,e){lt.fn[t]=function(n,i){var r=lt.map(this,e,n);return Ht.test(t)||(i=n),i&&"string"==typeof i&&(r=lt.filter(i,r)),r=this.length>1&&!Bt[t]?lt.unique(r):r,this.length>1&&$t.test(t)&&(r=r.reverse()),this.pushStack(r)}}),lt.extend({filter:function(t,e,n){return n&&(t=":not("+t+")"),1===e.length?lt.find.matchesSelector(e[0],t)?[e[0]]:[]:lt.find.matches(t,e)},dir:function(t,n,i){for(var r=[],a=t[n];a&&9!==a.nodeType&&(i===e||1!==a.nodeType||!lt(a).is(i));)1===a.nodeType&&r.push(a),a=a[n];return r},sibling:function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n}});var Xt="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",qt=/ jQuery\d+="(?:null|\d+)"/g,Ut=new RegExp("<(?:"+Xt+")[\\s/>]","i"),Wt=/^\s+/,Qt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Kt=/<([\w:]+)/,Zt=/\s*$/g,oe={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:lt.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},se=h(U),le=se.appendChild(U.createElement("div"));oe.optgroup=oe.option,oe.tbody=oe.tfoot=oe.colgroup=oe.caption=oe.thead,oe.th=oe.td,lt.fn.extend({text:function(t){return lt.access(this,function(t){return t===e?lt.text(this):this.empty().append((this[0]&&this[0].ownerDocument||U).createTextNode(t))},null,t,arguments.length)},wrapAll:function(t){if(lt.isFunction(t))return this.each(function(e){lt(this).wrapAll(t.call(this,e))});if(this[0]){var e=lt(t,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstChild&&1===t.firstChild.nodeType;)t=t.firstChild;return t}).append(this)}return this},wrapInner:function(t){return lt.isFunction(t)?this.each(function(e){lt(this).wrapInner(t.call(this,e))}):this.each(function(){var e=lt(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=lt.isFunction(t);return this.each(function(n){lt(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(){return this.parent().each(function(){lt.nodeName(this,"body")||lt(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||this.appendChild(t)})},prepend:function(){return this.domManip(arguments,!0,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||this.insertBefore(t,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,!1,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var n,i=0;null!=(n=this[i]);i++)(!t||lt.filter(t,[n]).length>0)&&(e||1!==n.nodeType||lt.cleanData(x(n)),n.parentNode&&(e&<.contains(n.ownerDocument,n)&&m(x(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++){for(1===t.nodeType&<.cleanData(x(t,!1));t.firstChild;)t.removeChild(t.firstChild);t.options&<.nodeName(t,"select")&&(t.options.length=0)}return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return lt.clone(this,t,e)})},html:function(t){return lt.access(this,function(t){var n=this[0]||{},i=0,r=this.length;if(t===e)return 1===n.nodeType?n.innerHTML.replace(qt,""):e;if("string"==typeof t&&!te.test(t)&&(lt.support.htmlSerialize||!Ut.test(t))&&(lt.support.leadingWhitespace||!Wt.test(t))&&!oe[(Kt.exec(t)||["",""])[1].toLowerCase()]){t=t.replace(Qt,"<$1>");try{for(;i")?a=t.cloneNode(!0):(le.innerHTML=t.outerHTML,le.removeChild(a=le.firstChild)),!(lt.support.noCloneEvent&<.support.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||lt.isXMLDoc(t)))for(i=x(a),s=x(t),o=0;null!=(r=s[o]);++o)i[o]&&y(r,i[o]);if(e)if(n)for(s=s||x(t),i=i||x(a),o=0;null!=(r=s[o]);o++)v(r,i[o]);else v(t,a);return i=x(a,"script"),i.length>0&&m(i,!l&&x(t,"script")),i=s=r=null,a},buildFragment:function(t,e,n,i){for(var r,a,o,s,l,u,c,d=t.length,f=h(e),p=[],g=0;g")+c[2],r=c[0];r--;)s=s.lastChild;if(!lt.support.leadingWhitespace&&Wt.test(a)&&p.push(e.createTextNode(Wt.exec(a)[0])),!lt.support.tbody)for(a="table"!==l||Zt.test(a)?""!==c[1]||Zt.test(a)?0:s:s.firstChild,r=a&&a.childNodes.length;r--;)lt.nodeName(u=a.childNodes[r],"tbody")&&!u.childNodes.length&&a.removeChild(u);for(lt.merge(p,s.childNodes),s.textContent="";s.firstChild;)s.removeChild(s.firstChild);s=f.lastChild}else p.push(e.createTextNode(a));for(s&&f.removeChild(s),lt.support.appendChecked||lt.grep(x(p,"input"),_),g=0;a=p[g++];)if((!i||lt.inArray(a,i)===-1)&&(o=lt.contains(a.ownerDocument,a),s=x(f.appendChild(a),"script"),o&&m(s),n))for(r=0;a=s[r++];)ie.test(a.type||"")&&n.push(a);return s=null,f},cleanData:function(t,e){for(var n,i,r,a,o=0,s=lt.expando,l=lt.cache,u=lt.support.deleteExpando,c=lt.event.special;null!=(n=t[o]);o++)if((e||lt.acceptData(n))&&(r=n[s],a=r&&l[r])){if(a.events)for(i in a.events)c[i]?lt.event.remove(n,i):lt.removeEvent(n,i,a.handle);l[r]&&(delete l[r],u?delete n[s]:typeof n.removeAttribute!==q?n.removeAttribute(s):n[s]=null,J.push(r))}}});var ue,ce,de,he=/alpha\([^)]*\)/i,fe=/opacity\s*=\s*([^)]*)/,pe=/^(top|right|bottom|left)$/,ge=/^(none|table(?!-c[ea]).+)/,me=/^margin/,ve=new RegExp("^("+ut+")(.*)$","i"),ye=new RegExp("^("+ut+")(?!px)[a-z%]+$","i"),xe=new RegExp("^([+-])=("+ut+")","i"),_e={BODY:"block"},be={position:"absolute",visibility:"hidden",display:"block"},we={letterSpacing:0,fontWeight:400},Se=["Top","Right","Bottom","Left"],Te=["Webkit","O","Moz","ms"];lt.fn.extend({css:function(t,n){return lt.access(this,function(t,n,i){var r,a,o={},s=0;if(lt.isArray(n)){for(a=ce(t),r=n.length;s1)},show:function(){return S(this,!0)},hide:function(){return S(this)},toggle:function(t){var e="boolean"==typeof t;return this.each(function(){(e?t:w(this))?lt(this).show():lt(this).hide()})}}),lt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=de(t,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":lt.support.cssFloat?"cssFloat":"styleFloat"},style:function(t,n,i,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var a,o,s,l=lt.camelCase(n),u=t.style;if(n=lt.cssProps[l]||(lt.cssProps[l]=b(u,l)),s=lt.cssHooks[n]||lt.cssHooks[l],i===e)return s&&"get"in s&&(a=s.get(t,!1,r))!==e?a:u[n];if(o=typeof i,"string"===o&&(a=xe.exec(i))&&(i=(a[1]+1)*a[2]+parseFloat(lt.css(t,n)),o="number"),!(null==i||"number"===o&&isNaN(i)||("number"!==o||lt.cssNumber[l]||(i+="px"),lt.support.clearCloneStyle||""!==i||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(i=s.set(t,i,r))===e)))try{u[n]=i}catch(c){}}},css:function(t,n,i,r){var a,o,s,l=lt.camelCase(n);return n=lt.cssProps[l]||(lt.cssProps[l]=b(t.style,l)),s=lt.cssHooks[n]||lt.cssHooks[l],s&&"get"in s&&(o=s.get(t,!0,i)),o===e&&(o=de(t,n,r)),"normal"===o&&n in we&&(o=we[n]),""===i||i?(a=parseFloat(o),i===!0||lt.isNumeric(a)?a||0:o):o},swap:function(t,e,n,i){var r,a,o={};for(a in e)o[a]=t.style[a],t.style[a]=e[a];r=n.apply(t,i||[]);for(a in e)t.style[a]=o[a];return r}}),t.getComputedStyle?(ce=function(e){return t.getComputedStyle(e,null)},de=function(t,n,i){var r,a,o,s=i||ce(t),l=s?s.getPropertyValue(n)||s[n]:e,u=t.style;return s&&(""!==l||lt.contains(t.ownerDocument,t)||(l=lt.style(t,n)),ye.test(l)&&me.test(n)&&(r=u.width,a=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=r,u.minWidth=a,u.maxWidth=o)),l}):U.documentElement.currentStyle&&(ce=function(t){return t.currentStyle},de=function(t,n,i){var r,a,o,s=i||ce(t),l=s?s[n]:e,u=t.style;return null==l&&u&&u[n]&&(l=u[n]),ye.test(l)&&!pe.test(n)&&(r=u.left,a=t.runtimeStyle,o=a&&a.left,o&&(a.left=t.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=r,o&&(a.left=o)),""===l?"auto":l}),lt.each(["height","width"],function(t,e){lt.cssHooks[e]={get:function(t,n,i){if(n)return 0===t.offsetWidth&&ge.test(lt.css(t,"display"))?lt.swap(t,be,function(){return A(t,e,i)}):A(t,e,i)},set:function(t,n,i){var r=i&&ce(t);return T(t,n,i?C(t,e,i,lt.support.boxSizing&&"border-box"===lt.css(t,"boxSizing",!1,r),r):0)}}}),lt.support.opacity||(lt.cssHooks.opacity={get:function(t,e){return fe.test((e&&t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":e?"1":""},set:function(t,e){var n=t.style,i=t.currentStyle,r=lt.isNumeric(e)?"alpha(opacity="+100*e+")":"",a=i&&i.filter||n.filter||"";n.zoom=1,(e>=1||""===e)&&""===lt.trim(a.replace(he,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===e||i&&!i.filter)||(n.filter=he.test(a)?a.replace(he,r):a+" "+r)}}),lt(function(){lt.support.reliableMarginRight||(lt.cssHooks.marginRight={get:function(t,e){if(e)return lt.swap(t,{display:"inline-block"},de,[t,"marginRight"])}}),!lt.support.pixelPosition&<.fn.position&<.each(["top","left"],function(t,e){lt.cssHooks[e]={get:function(t,n){if(n)return n=de(t,e),ye.test(n)?lt(t).position()[e]+"px":n}}})}),lt.expr&<.expr.filters&&(lt.expr.filters.hidden=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0||!lt.support.reliableHiddenOffsets&&"none"===(t.style&&t.style.display||lt.css(t,"display"))},lt.expr.filters.visible=function(t){return!lt.expr.filters.hidden(t)}),lt.each({margin:"",padding:"",border:"Width"},function(t,e){lt.cssHooks[t+e]={expand:function(n){for(var i=0,r={},a="string"==typeof n?n.split(" "):[n];i<4;i++)r[t+Se[i]+e]=a[i]||a[i-2]||a[0];return r}},me.test(t)||(lt.cssHooks[t+e].set=T)});var Ce=/%20/g,Ae=/\[\]$/,ke=/\r?\n/g,Pe=/^(?:submit|button|image|reset|file)$/i,Me=/^(?:input|select|textarea|keygen)/i;lt.fn.extend({serialize:function(){return lt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=lt.prop(this,"elements");return t?lt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!lt(this).is(":disabled")&&Me.test(this.nodeName)&&!Pe.test(t)&&(this.checked||!ee.test(t))}).map(function(t,e){var n=lt(this).val();return null==n?null:lt.isArray(n)?lt.map(n,function(t){return{name:e.name,value:t.replace(ke,"\r\n")}}):{name:e.name,value:n.replace(ke,"\r\n")}}).get()}}),lt.param=function(t,n){var i,r=[],a=function(t,e){e=lt.isFunction(e)?e():null==e?"":e,r[r.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(n===e&&(n=lt.ajaxSettings&<.ajaxSettings.traditional),lt.isArray(t)||t.jquery&&!lt.isPlainObject(t))lt.each(t,function(){a(this.name,this.value)});else for(i in t)M(i,t[i],n,a);return r.join("&").replace(Ce,"+")},lt.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){lt.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),lt.fn.hover=function(t,e){return this.mouseenter(t).mouseleave(e||t)};var Ee,De,Oe=lt.now(),Le=/\?/,Ie=/#.*$/,Ne=/([?&])_=[^&]*/,Re=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Fe=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ve=/^(?:GET|HEAD)$/,je=/^\/\//,Ge=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,He=lt.fn.load,$e={},ze={},Ye="*/".concat("*");try{De=W.href}catch(Be){De=U.createElement("a"),De.href="",De=De.href}Ee=Ge.exec(De.toLowerCase())||[],lt.fn.load=function(t,n,i){if("string"!=typeof t&&He)return He.apply(this,arguments);var r,a,o,s=this,l=t.indexOf(" ");return l>=0&&(r=t.slice(l,t.length),t=t.slice(0,l)),lt.isFunction(n)?(i=n,n=e):n&&"object"==typeof n&&(o="POST"),s.length>0&<.ajax({url:t,type:o,dataType:"html",data:n}).done(function(t){a=arguments,s.html(r?lt("
    ").append(lt.parseHTML(t)).find(r):t)}).complete(i&&function(t,e){s.each(i,a||[t.responseText,e,t])}),this},lt.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){lt.fn[e]=function(t){return this.on(e,t)}}),lt.each(["get","post"],function(t,n){lt[n]=function(t,i,r,a){return lt.isFunction(i)&&(a=a||r,r=i,i=e),lt.ajax({url:t,type:n,dataType:a,data:i,success:r})}}),lt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:De,type:"GET",isLocal:Fe.test(Ee[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ye,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":t.String,"text html":!0,"text json":lt.parseJSON,"text xml":lt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?O(O(t,lt.ajaxSettings),e):O(lt.ajaxSettings,t)},ajaxPrefilter:E($e),ajaxTransport:E(ze),ajax:function(t,n){function i(t,n,i,r){var a,d,y,x,b,S=n;2!==_&&(_=2,l&&clearTimeout(l),c=e,s=r||"",w.readyState=t>0?4:0,i&&(x=L(h,w,i)),t>=200&&t<300||304===t?(h.ifModified&&(b=w.getResponseHeader("Last-Modified"),b&&(lt.lastModified[o]=b),b=w.getResponseHeader("etag"),b&&(lt.etag[o]=b)),204===t?(a=!0,S="nocontent"):304===t?(a=!0,S="notmodified"):(a=I(h,x),S=a.state,d=a.data,y=a.error,a=!y)):(y=S,!t&&S||(S="error",t<0&&(t=0))),w.status=t,w.statusText=(n||S)+"",a?g.resolveWith(f,[d,S,w]):g.rejectWith(f,[w,S,y]),w.statusCode(v),v=e,u&&p.trigger(a?"ajaxSuccess":"ajaxError",[w,h,a?d:y]),m.fireWith(f,[w,S]),u&&(p.trigger("ajaxComplete",[w,h]),--lt.active||lt.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=e),n=n||{};var r,a,o,s,l,u,c,d,h=lt.ajaxSetup({},n),f=h.context||h,p=h.context&&(f.nodeType||f.jquery)?lt(f):lt.event,g=lt.Deferred(),m=lt.Callbacks("once memory"),v=h.statusCode||{},y={},x={},_=0,b="canceled",w={readyState:0,getResponseHeader:function(t){var e;if(2===_){if(!d)for(d={};e=Re.exec(s);)d[e[1].toLowerCase()]=e[2];e=d[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===_?s:null},setRequestHeader:function(t,e){var n=t.toLowerCase();return _||(t=x[n]=x[n]||t,y[t]=e),this},overrideMimeType:function(t){return _||(h.mimeType=t),this},statusCode:function(t){var e;if(t)if(_<2)for(e in t)v[e]=[v[e],t[e]];else w.always(t[w.status]);return this},abort:function(t){var e=t||b;return c&&c.abort(e),i(0,e),this}};if(g.promise(w).complete=m.add,w.success=w.done,w.error=w.fail,h.url=((t||h.url||De)+"").replace(Ie,"").replace(je,Ee[1]+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=lt.trim(h.dataType||"*").toLowerCase().match(ct)||[""],null==h.crossDomain&&(r=Ge.exec(h.url.toLowerCase()),h.crossDomain=!(!r||r[1]===Ee[1]&&r[2]===Ee[2]&&(r[3]||("http:"===r[1]?80:443))==(Ee[3]||("http:"===Ee[1]?80:443)))),h.data&&h.processData&&"string"!=typeof h.data&&(h.data=lt.param(h.data,h.traditional)),D($e,h,n,w),2===_)return w;u=h.global,u&&0===lt.active++&<.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Ve.test(h.type),o=h.url,h.hasContent||(h.data&&(o=h.url+=(Le.test(o)?"&":"?")+h.data,delete h.data),h.cache===!1&&(h.url=Ne.test(o)?o.replace(Ne,"$1_="+Oe++):o+(Le.test(o)?"&":"?")+"_="+Oe++)),h.ifModified&&(lt.lastModified[o]&&w.setRequestHeader("If-Modified-Since",lt.lastModified[o]),lt.etag[o]&&w.setRequestHeader("If-None-Match",lt.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&w.setRequestHeader("Content-Type",h.contentType),w.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Ye+"; q=0.01":""):h.accepts["*"]);for(a in h.headers)w.setRequestHeader(a,h.headers[a]);if(h.beforeSend&&(h.beforeSend.call(f,w,h)===!1||2===_))return w.abort();b="abort";for(a in{success:1,error:1,complete:1})w[a](h[a]);if(c=D(ze,h,n,w)){w.readyState=1,u&&p.trigger("ajaxSend",[w,h]),h.async&&h.timeout>0&&(l=setTimeout(function(){w.abort("timeout")},h.timeout));try{_=1,c.send(y,i)}catch(S){if(!(_<2))throw S;i(-1,S)}}else i(-1,"No Transport");return w},getScript:function(t,n){return lt.get(t,e,n,"script")},getJSON:function(t,e,n){return lt.get(t,e,n,"json")}}),lt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(t){return lt.globalEval(t),t}}}),lt.ajaxPrefilter("script",function(t){t.cache===e&&(t.cache=!1),t.crossDomain&&(t.type="GET",t.global=!1)}),lt.ajaxTransport("script",function(t){if(t.crossDomain){var n,i=U.head||lt("head")[0]||U.documentElement;return{send:function(e,r){n=U.createElement("script"),n.async=!0,t.scriptCharset&&(n.charset=t.scriptCharset),n.src=t.url,n.onload=n.onreadystatechange=function(t,e){(e||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,e||r(200,"success"))},i.insertBefore(n,i.firstChild)},abort:function(){n&&n.onload(e,!0)}}}});var Xe=[],qe=/(=)\?(?=&|$)|\?\?/;lt.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=Xe.pop()||lt.expando+"_"+Oe++;return this[t]=!0,t}}),lt.ajaxPrefilter("json jsonp",function(n,i,r){var a,o,s,l=n.jsonp!==!1&&(qe.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&qe.test(n.data)&&"data");if(l||"jsonp"===n.dataTypes[0])return a=n.jsonpCallback=lt.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(qe,"$1"+a):n.jsonp!==!1&&(n.url+=(Le.test(n.url)?"&":"?")+n.jsonp+"="+a),n.converters["script json"]=function(){return s||lt.error(a+" was not called"),s[0]},n.dataTypes[0]="json",o=t[a],t[a]=function(){s=arguments},r.always(function(){t[a]=o,n[a]&&(n.jsonpCallback=i.jsonpCallback,Xe.push(a)),s&<.isFunction(o)&&o(s[0]),s=o=e}),"script"});var Ue,We,Qe=0,Ke=t.ActiveXObject&&function(){var t;for(t in Ue)Ue[t](e,!0)};lt.ajaxSettings.xhr=t.ActiveXObject?function(){return!this.isLocal&&N()||R()}:N,We=lt.ajaxSettings.xhr(),lt.support.cors=!!We&&"withCredentials"in We,We=lt.support.ajax=!!We,We&<.ajaxTransport(function(n){if(!n.crossDomain||lt.support.cors){var i;return{send:function(r,a){var o,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest");try{for(s in r)l.setRequestHeader(s,r[s])}catch(u){}l.send(n.hasContent&&n.data||null),i=function(t,r){var s,u,c,d;try{if(i&&(r||4===l.readyState))if(i=e,o&&(l.onreadystatechange=lt.noop,Ke&&delete Ue[o]),r)4!==l.readyState&&l.abort();else{d={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(d.text=l.responseText);try{c=l.statusText}catch(h){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=d.text?200:404}}catch(f){r||a(-1,f)}d&&a(s,c,d,u)},n.async?4===l.readyState?setTimeout(i):(o=++Qe,Ke&&(Ue||(Ue={},lt(t).unload(Ke)),Ue[o]=i),l.onreadystatechange=i):i()},abort:function(){i&&i(e,!0)}}}});var Ze,Je,tn=/^(?:toggle|show|hide)$/,en=new RegExp("^(?:([+-])=|)("+ut+")([a-z%]*)$","i"),nn=/queueHooks$/,rn=[H],an={"*":[function(t,e){var n,i,r=this.createTween(t,e),a=en.exec(e),o=r.cur(),s=+o||0,l=1,u=20;if(a){if(n=+a[2],i=a[3]||(lt.cssNumber[t]?"":"px"),"px"!==i&&s){s=lt.css(r.elem,t,!0)||n||1;do l=l||".5",s/=l,lt.style(r.elem,t,s+i);while(l!==(l=r.cur()/o)&&1!==l&&--u)}r.unit=i,r.start=s,r.end=a[1]?s+(a[1]+1)*n:n}return r}]};lt.Animation=lt.extend(j,{tweener:function(t,e){lt.isFunction(t)?(e=t,t=["*"]):t=t.split(" ");for(var n,i=0,r=t.length;i-1,d={},h={};c?(h=o.position(),r=h.top,a=h.left):(r=parseFloat(l)||0,a=parseFloat(u)||0),lt.isFunction(e)&&(e=e.call(t,n,s)),null!=e.top&&(d.top=e.top-s.top+r),null!=e.left&&(d.left=e.left-s.left+a),"using"in e?e.using.call(t,d):o.css(d)}},lt.fn.extend({position:function(){if(this[0]){var t,e,n={top:0,left:0},i=this[0];return"fixed"===lt.css(i,"position")?e=i.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),lt.nodeName(t[0],"html")||(n=t.offset()),n.top+=lt.css(t[0],"borderTopWidth",!0),n.left+=lt.css(t[0],"borderLeftWidth",!0)),{top:e.top-n.top-lt.css(i,"marginTop",!0),left:e.left-n.left-lt.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||U.documentElement;t&&!lt.nodeName(t,"html")&&"static"===lt.css(t,"position");)t=t.offsetParent;return t||U.documentElement})}}),lt.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,n){var i=/Y/.test(n);lt.fn[t]=function(r){return lt.access(this,function(t,r,a){var o=Y(t);return a===e?o?n in o?o[n]:o.document.documentElement[r]:t[r]:void(o?o.scrollTo(i?lt(o).scrollLeft():a,i?a:lt(o).scrollTop()):t[r]=a)},t,r,arguments.length,null)}}),lt.each({Height:"height",Width:"width"},function(t,n){lt.each({padding:"inner"+t,content:n,"":"outer"+t},function(i,r){lt.fn[r]=function(r,a){var o=arguments.length&&(i||"boolean"!=typeof r),s=i||(r===!0||a===!0?"margin":"border");return lt.access(this,function(n,i,r){var a;return lt.isWindow(n)?n.document.documentElement["client"+t]:9===n.nodeType?(a=n.documentElement,Math.max(n.body["scroll"+t],a["scroll"+t],n.body["offset"+t],a["offset"+t],a["client"+t])):r===e?lt.css(n,i,s):lt.style(n,i,r,s)},n,o?r:e,o,null)}})}),t.jQuery=t.$=lt,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return lt})}(window),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.moment=e()}(this,function(){"use strict";function t(){return oi.apply(null,arguments)}function e(t){oi=t}function n(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function i(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function r(t,e){var n,i=[];for(n=0;n0)for(n in li)i=li[n],r=e[i],h(r)||(t[i]=r);return t}function p(e){f(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),ui===!1&&(ui=!0,t.updateOffset(this),ui=!1)}function g(t){return t instanceof p||null!=t&&null!=t._isAMomentObject}function m(t){return t<0?Math.ceil(t):Math.floor(t)}function v(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=m(e)),n}function y(t,e,n){var i,r=Math.min(t.length,e.length),a=Math.abs(t.length-e.length),o=0;for(i=0;i0;){if(i=M(r.slice(0,e).join("-")))return i;if(n&&n.length>=e&&y(r,n,!0)>=e-1)break;e--}a++}return null}function M(t){var e=null;if(!pi[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=hi._abbr,require("./locale/"+t),E(e)}catch(n){}return pi[t]}function E(t,e){var n;return t&&(n=h(e)?L(t):D(t,e),n&&(hi=n)),hi._abbr}function D(t,e){return null!==e?(e.abbr=t,null!=pi[t]?(b("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale"),e=C(pi[t]._config,e)):null!=e.parentLocale&&(null!=pi[e.parentLocale]?e=C(pi[e.parentLocale]._config,e):b("parentLocaleUndefined","specified parentLocale is not defined yet")),pi[t]=new A(e),E(t),pi[t]):(delete pi[t],null)}function O(t,e){if(null!=e){var n;null!=pi[t]&&(e=C(pi[t]._config,e)),n=new A(e),n.parentLocale=pi[t],pi[t]=n,E(t)}else null!=pi[t]&&(null!=pi[t].parentLocale?pi[t]=pi[t].parentLocale:null!=pi[t]&&delete pi[t]);return pi[t]}function L(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return hi;if(!n(t)){if(e=M(t))return e;t=[t]}return P(t)}function I(){return di(pi)}function N(t,e){var n=t.toLowerCase();gi[n]=gi[n+"s"]=gi[e]=t}function R(t){return"string"==typeof t?gi[t]||gi[t.toLowerCase()]:void 0}function F(t){var e,n,i={};for(n in t)a(t,n)&&(e=R(n),e&&(i[e]=t[n]));return i}function V(e,n){return function(i){return null!=i?(G(this,e,i),t.updateOffset(this,n),this):j(this,e)}}function j(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function G(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function H(t,e){var n;if("object"==typeof t)for(n in t)this.set(n,t[n]);else if(t=R(t),w(this[t]))return this[t](e);return this}function $(t,e,n){var i=""+Math.abs(t),r=e-i.length,a=t>=0;return(a?n?"+":"":"-")+Math.pow(10,Math.max(0,r)).toString().substr(1)+i}function z(t,e,n,i){var r=i;"string"==typeof i&&(r=function(){return this[i]()}),t&&(xi[t]=r),e&&(xi[e[0]]=function(){return $(r.apply(this,arguments),e[1],e[2])}),n&&(xi[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),t)})}function Y(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function B(t){var e,n,i=t.match(mi);for(e=0,n=i.length;e=0&&vi.test(t);)t=t.replace(vi,n),vi.lastIndex=0,i-=1;return t}function U(t,e,n){Fi[t]=w(e)?e:function(t,i){return t&&n?n:e}}function W(t,e){return a(Fi,t)?Fi[t](e._strict,e._locale):new RegExp(Q(t))}function Q(t){return K(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,i,r){return e||n||i||r}))}function K(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Z(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),"number"==typeof e&&(i=function(t,n){n[e]=v(t)}),n=0;n11?Gi:n[Hi]<1||n[Hi]>et(n[ji],n[Gi])?Hi:n[$i]<0||n[$i]>24||24===n[$i]&&(0!==n[zi]||0!==n[Yi]||0!==n[Bi])?$i:n[zi]<0||n[zi]>59?zi:n[Yi]<0||n[Yi]>59?Yi:n[Bi]<0||n[Bi]>999?Bi:-1,u(t)._overflowDayOfYear&&(eHi)&&(e=Hi),u(t)._overflowWeeks&&e===-1&&(e=Xi),u(t)._overflowWeekday&&e===-1&&(e=qi),u(t).overflow=e),t}function ft(t){var e,n,i,r,a,o,s=t._i,l=Ji.exec(s)||tr.exec(s);if(l){for(u(t).iso=!0,e=0,n=nr.length;e=0&&isFinite(s.getFullYear())&&s.setFullYear(t),s}function mt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function vt(t){return yt(t)?366:365}function yt(t){return t%4===0&&t%100!==0||t%400===0}function xt(){return yt(this.year())}function _t(t,e,n){var i=7+e-n,r=(7+mt(t,0,i).getUTCDay()-e)%7;return-r+i-1}function bt(t,e,n,i,r){var a,o,s=(7+n-i)%7,l=_t(t,i,r),u=1+7*(e-1)+s+l;return u<=0?(a=t-1,o=vt(a)+u):u>vt(t)?(a=t+1,o=u-vt(t)):(a=t,o=u),{year:a,dayOfYear:o}}function wt(t,e,n){var i,r,a=_t(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?(r=t.year()-1,i=o+St(r,e,n)):o>St(t.year(),e,n)?(i=o-St(t.year(),e,n),r=t.year()+1):(r=t.year(),i=o),{week:i,year:r}}function St(t,e,n){var i=_t(t,e,n),r=_t(t+1,e,n);return(vt(t)-i+r)/7}function Tt(t,e,n){return null!=t?t:null!=e?e:n}function Ct(e){var n=new Date(t.now());return e._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function At(t){var e,n,i,r,a=[];if(!t._d){for(i=Ct(t),t._w&&null==t._a[Hi]&&null==t._a[Gi]&&kt(t),t._dayOfYear&&(r=Tt(t._a[ji],i[ji]),t._dayOfYear>vt(r)&&(u(t)._overflowDayOfYear=!0),n=mt(r,0,t._dayOfYear),t._a[Gi]=n.getUTCMonth(),t._a[Hi]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=a[e]=i[e];for(;e<7;e++)t._a[e]=a[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[$i]&&0===t._a[zi]&&0===t._a[Yi]&&0===t._a[Bi]&&(t._nextDay=!0,t._a[$i]=0),t._d=(t._useUTC?mt:gt).apply(null,a),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[$i]=24)}}function kt(t){var e,n,i,r,a,o,s,l;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(a=1,o=4,n=Tt(e.GG,t._a[ji],wt(Rt(),1,4).year),i=Tt(e.W,1),r=Tt(e.E,1),(r<1||r>7)&&(l=!0)):(a=t._locale._week.dow,o=t._locale._week.doy,n=Tt(e.gg,t._a[ji],wt(Rt(),a,o).year),i=Tt(e.w,1),null!=e.d?(r=e.d,(r<0||r>6)&&(l=!0)):null!=e.e?(r=e.e+a,(e.e<0||e.e>6)&&(l=!0)):r=a),i<1||i>St(n,a,o)?u(t)._overflowWeeks=!0:null!=l?u(t)._overflowWeekday=!0:(s=bt(n,i,r,a,o),t._a[ji]=s.year,t._dayOfYear=s.dayOfYear)}function Pt(e){if(e._f===t.ISO_8601)return void ft(e);e._a=[],u(e).empty=!0;var n,i,r,a,o,s=""+e._i,l=s.length,c=0;for(r=q(e._f,e._locale).match(mi)||[],n=0;n0&&u(e).unusedInput.push(o),s=s.slice(s.indexOf(i)+i.length),c+=i.length),xi[a]?(i?u(e).empty=!1:u(e).unusedTokens.push(a),tt(a,i,e)):e._strict&&!i&&u(e).unusedTokens.push(a);u(e).charsLeftOver=l-c,s.length>0&&u(e).unusedInput.push(s),u(e).bigHour===!0&&e._a[$i]<=12&&e._a[$i]>0&&(u(e).bigHour=void 0),u(e).parsedDateParts=e._a.slice(0),u(e).meridiem=e._meridiem,e._a[$i]=Mt(e._locale,e._a[$i],e._meridiem),At(e),ht(e)}function Mt(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(i=t.isPM(n),i&&e<12&&(e+=12),i||12!==e||(e=0),e):e}function Et(t){var e,n,i,r,a;if(0===t._f.length)return u(t).invalidFormat=!0,void(t._d=new Date(NaN));for(r=0;rthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Jt(){if(!h(this._isDSTShifted))return this._isDSTShifted;var t={};if(f(t,this),t=Lt(t),t._a){var e=t._isUTC?s(t._a):Rt(t._a);this._isDSTShifted=this.isValid()&&y(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function te(){return!!this.isValid()&&!this._isUTC}function ee(){return!!this.isValid()&&this._isUTC}function ne(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function ie(t,e){var n,i,r,o=t,s=null;return Ht(t)?o={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(o={},e?o[e]=t:o.milliseconds=t):(s=cr.exec(t))?(n="-"===s[1]?-1:1,o={y:0,d:v(s[Hi])*n,h:v(s[$i])*n,m:v(s[zi])*n,s:v(s[Yi])*n,ms:v(s[Bi])*n}):(s=dr.exec(t))?(n="-"===s[1]?-1:1,o={y:re(s[2],n),M:re(s[3],n),w:re(s[4],n),d:re(s[5],n),h:re(s[6],n),m:re(s[7],n),s:re(s[8],n)}):null==o?o={}:"object"==typeof o&&("from"in o||"to"in o)&&(r=oe(Rt(o.from),Rt(o.to)),o={},o.ms=r.milliseconds,o.M=r.months),i=new Gt(o),Ht(t)&&a(t,"_locale")&&(i._locale=t._locale),i}function re(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function ae(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function oe(t,e){var n;return t.isValid()&&e.isValid()?(e=Yt(e,t),t.isBefore(e)?n=ae(t,e):(n=ae(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function se(t){return t<0?Math.round(-1*t)*-1:Math.round(t)}function le(t,e){return function(n,i){var r,a;return null===i||isNaN(+i)||(b(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period)."),a=n,n=i,i=a),n="string"==typeof n?+n:n,r=ie(n,i),ue(this,r,t),this}}function ue(e,n,i,r){var a=n._milliseconds,o=se(n._days),s=se(n._months);e.isValid()&&(r=null==r||r,a&&e._d.setTime(e._d.valueOf()+a*i),o&&G(e,"Date",j(e,"Date")+o*i),s&&ot(e,j(e,"Month")+s*i),r&&t.updateOffset(e,o||s))}function ce(t,e){var n=t||Rt(),i=Yt(n,this).startOf("day"),r=this.diff(i,"days",!0),a=r<-6?"sameElse":r<-1?"lastWeek":r<0?"lastDay":r<1?"sameDay":r<2?"nextDay":r<7?"nextWeek":"sameElse",o=e&&(w(e[a])?e[a]():e[a]);return this.format(o||this.localeData().calendar(a,this,Rt(n)))}function de(){return new p(this)}function he(t,e){var n=g(t)?t:Rt(t);return!(!this.isValid()||!n.isValid())&&(e=R(h(e)?"millisecond":e),"millisecond"===e?this.valueOf()>n.valueOf():n.valueOf()a&&(e=a),qe.call(this,t,e,n,i,r))}function qe(t,e,n,i,r){var a=bt(t,e,n,i,r),o=mt(a.year,0,a.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Ue(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function We(t){return wt(t,this._week.dow,this._week.doy).week}function Qe(){return this._week.dow}function Ke(){return this._week.doy}function Ze(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Je(t){var e=wt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function tn(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function en(t,e){return n(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]}function nn(t){return this._weekdaysShort[t.day()]}function rn(t){return this._weekdaysMin[t.day()]}function an(t,e,n){var i,r,a,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)a=s([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(a,"").toLocaleLowerCase();return n?"dddd"===e?(r=fi.call(this._weekdaysParse,o),r!==-1?r:null):"ddd"===e?(r=fi.call(this._shortWeekdaysParse,o),r!==-1?r:null):(r=fi.call(this._minWeekdaysParse,o),r!==-1?r:null):"dddd"===e?(r=fi.call(this._weekdaysParse,o),r!==-1?r:(r=fi.call(this._shortWeekdaysParse,o),r!==-1?r:(r=fi.call(this._minWeekdaysParse,o),r!==-1?r:null))):"ddd"===e?(r=fi.call(this._shortWeekdaysParse,o),r!==-1?r:(r=fi.call(this._weekdaysParse,o),r!==-1?r:(r=fi.call(this._minWeekdaysParse,o),r!==-1?r:null))):(r=fi.call(this._minWeekdaysParse,o),r!==-1?r:(r=fi.call(this._weekdaysParse,o),r!==-1?r:(r=fi.call(this._shortWeekdaysParse,o),r!==-1?r:null)))}function on(t,e,n){var i,r,a;if(this._weekdaysParseExact)return an.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(r=s([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(r,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(r,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(r,"").replace(".",".?")+"$","i")),this._weekdaysParse[i]||(a="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,""),this._weekdaysParse[i]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}}function sn(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=tn(t,this.localeData()),this.add(t-e,"d")):e}function ln(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function un(t){return this.isValid()?null==t?this.day()||7:this.day(this.day()%7?t:t-7):null!=t?this:NaN}function cn(t){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||fn.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex}function dn(t){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||fn.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex}function hn(t){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||fn.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex}function fn(){function t(t,e){return e.length-t.length}var e,n,i,r,a,o=[],l=[],u=[],c=[];for(e=0;e<7;e++)n=s([2e3,1]).day(e),i=this.weekdaysMin(n,""),r=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(i),l.push(r),u.push(a),c.push(i),c.push(r),c.push(a);for(o.sort(t),l.sort(t),u.sort(t),c.sort(t),e=0;e<7;e++)l[e]=K(l[e]),u[e]=K(u[e]),c[e]=K(c[e]);this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function pn(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function gn(){return this.hours()%12||12}function mn(){return this.hours()||24}function vn(t,e){z(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function yn(t,e){return e._meridiemParse}function xn(t){return"p"===(t+"").toLowerCase().charAt(0)}function _n(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function bn(t,e){e[Bi]=v(1e3*("0."+t))}function wn(){return this._isUTC?"UTC":""}function Sn(){return this._isUTC?"Coordinated Universal Time":""}function Tn(t){return Rt(1e3*t)}function Cn(){return Rt.apply(null,arguments).parseZone()}function An(t,e,n){var i=this._calendar[t];return w(i)?i.call(e,n):i}function kn(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function Pn(){return this._invalidDate}function Mn(t){return this._ordinal.replace("%d",t)}function En(t){return t}function Dn(t,e,n,i){var r=this._relativeTime[n];return w(r)?r(t,e,n,i):r.replace(/%d/i,t)}function On(t,e){var n=this._relativeTime[t>0?"future":"past"];return w(n)?n(e):n.replace(/%s/i,e)}function Ln(t,e,n,i){var r=L(),a=s().set(i,e);return r[n](a,t)}function In(t,e,n){if("number"==typeof t&&(e=t,t=void 0),t=t||"",null!=e)return Ln(t,e,n,"month");var i,r=[];for(i=0;i<12;i++)r[i]=Ln(t,i,n,"month");return r}function Nn(t,e,n,i){"boolean"==typeof t?("number"==typeof e&&(n=e,e=void 0),e=e||""):(e=t,n=e,t=!1,"number"==typeof e&&(n=e,e=void 0),e=e||"");var r=L(),a=t?r._week.dow:0;if(null!=n)return Ln(e,(n+a)%7,i,"day");var o,s=[];for(o=0;o<7;o++)s[o]=Ln(e,(o+a)%7,i,"day");return s}function Rn(t,e){return In(t,e,"months")}function Fn(t,e){return In(t,e,"monthsShort")}function Vn(t,e,n){return Nn(t,e,n,"weekdays")}function jn(t,e,n){return Nn(t,e,n,"weekdaysShort")}function Gn(t,e,n){return Nn(t,e,n,"weekdaysMin")}function Hn(){var t=this._data;return this._milliseconds=Vr(this._milliseconds),this._days=Vr(this._days),this._months=Vr(this._months),t.milliseconds=Vr(t.milliseconds),t.seconds=Vr(t.seconds),t.minutes=Vr(t.minutes),t.hours=Vr(t.hours),t.months=Vr(t.months),t.years=Vr(t.years),this}function $n(t,e,n,i){var r=ie(e,n);return t._milliseconds+=i*r._milliseconds,t._days+=i*r._days,t._months+=i*r._months,t._bubble()}function zn(t,e){return $n(this,t,e,1)}function Yn(t,e){return $n(this,t,e,-1)}function Bn(t){return t<0?Math.floor(t):Math.ceil(t)}function Xn(){var t,e,n,i,r,a=this._milliseconds,o=this._days,s=this._months,l=this._data;return a>=0&&o>=0&&s>=0||a<=0&&o<=0&&s<=0||(a+=864e5*Bn(Un(s)+o),o=0,s=0),l.milliseconds=a%1e3,t=m(a/1e3),l.seconds=t%60,e=m(t/60),l.minutes=e%60,n=m(e/60),l.hours=n%24,o+=m(n/24),r=m(qn(o)),s+=r,o-=Bn(Un(r)),i=m(s/12),s%=12,l.days=o,l.months=s,l.years=i,this}function qn(t){return 4800*t/146097}function Un(t){return 146097*t/4800}function Wn(t){var e,n,i=this._milliseconds;if(t=R(t),"month"===t||"year"===t)return e=this._days+i/864e5,n=this._months+qn(e),"month"===t?n:n/12;switch(e=this._days+Math.round(Un(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}}function Qn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*v(this._months/12)}function Kn(t){return function(){return this.as(t)}}function Zn(t){return t=R(t),this[t+"s"]()}function Jn(t){return function(){return this._data[t]}}function ti(){return m(this.days()/7)}function ei(t,e,n,i,r){return r.relativeTime(e||1,!!n,t,i)}function ni(t,e,n){var i=ie(t).abs(),r=ta(i.as("s")),a=ta(i.as("m")),o=ta(i.as("h")),s=ta(i.as("d")),l=ta(i.as("M")),u=ta(i.as("y")),c=r0,c[4]=n,ei.apply(null,c)}function ii(t,e){return void 0!==ea[t]&&(void 0===e?ea[t]:(ea[t]=e,!0))}function ri(t){var e=this.localeData(),n=ni(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function ai(){var t,e,n,i=na(this._milliseconds)/1e3,r=na(this._days),a=na(this._months);t=m(i/60),e=m(t/60),i%=60,t%=60,n=m(a/12),a%=12;var o=n,s=a,l=r,u=e,c=t,d=i,h=this.asSeconds();return h?(h<0?"-":"")+"P"+(o?o+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||d?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(d?d+"S":""):"P0D"}var oi,si;si=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,i=0;i68?1900:2e3)};var ar=V("FullYear",!0);t.ISO_8601=function(){};var or=_("moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var t=Rt.apply(null,arguments);return this.isValid()&&t.isValid()?tthis?this:t:d()}),lr=function(){return Date.now?Date.now():+new Date};$t("Z",":"),$t("ZZ",""),U("Z",Ii),U("ZZ",Ii),Z(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=zt(Ii,t)});var ur=/([\+\-]|\d\d)/gi;t.updateOffset=function(){};var cr=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/,dr=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;ie.fn=Gt.prototype;var hr=le(1,"add"),fr=le(-1,"subtract");t.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",t.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var pr=_("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});z(0,["gg",2],0,function(){return this.weekYear()%100}),z(0,["GG",2],0,function(){return this.isoWeekYear()%100}),He("gggg","weekYear"),He("ggggg","weekYear"),He("GGGG","isoWeekYear"),He("GGGGG","isoWeekYear"),N("weekYear","gg"),N("isoWeekYear","GG"),U("G",Oi),U("g",Oi),U("GG",Ci,bi),U("gg",Ci,bi),U("GGGG",Mi,Si),U("gggg",Mi,Si),U("GGGGG",Ei,Ti),U("ggggg",Ei,Ti),J(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,i){e[i.substr(0,2)]=v(t)}),J(["gg","GG"],function(e,n,i,r){n[r]=t.parseTwoDigitYear(e)}),z("Q",0,"Qo","quarter"),N("quarter","Q"),U("Q",_i),Z("Q",function(t,e){e[Gi]=3*(v(t)-1)}),z("w",["ww",2],"wo","week"),z("W",["WW",2],"Wo","isoWeek"),N("week","w"),N("isoWeek","W"),U("w",Ci),U("ww",Ci,bi),U("W",Ci),U("WW",Ci,bi),J(["w","ww","W","WW"],function(t,e,n,i){e[i.substr(0,1)]=v(t)});var gr={dow:0,doy:6};z("D",["DD",2],"Do","date"),N("date","D"),U("D",Ci),U("DD",Ci,bi),U("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),Z(["D","DD"],Hi),Z("Do",function(t,e){e[Hi]=v(t.match(Ci)[0],10)});var mr=V("Date",!0);z("d",0,"do","day"),z("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),z("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),z("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),z("e",0,0,"weekday"),z("E",0,0,"isoWeekday"),N("day","d"),N("weekday","e"),N("isoWeekday","E"),U("d",Ci),U("e",Ci),U("E",Ci),U("dd",function(t,e){return e.weekdaysMinRegex(t)}),U("ddd",function(t,e){return e.weekdaysShortRegex(t)}),U("dddd",function(t,e){return e.weekdaysRegex(t)}),J(["dd","ddd","dddd"],function(t,e,n,i){var r=n._locale.weekdaysParse(t,i,n._strict);null!=r?e.d=r:u(n).invalidWeekday=t}),J(["d","e","E"],function(t,e,n,i){e[i]=v(t)});var vr="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),yr="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),xr="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),_r=Ri,br=Ri,wr=Ri;z("DDD",["DDDD",3],"DDDo","dayOfYear"),N("dayOfYear","DDD"),U("DDD",Pi),U("DDDD",wi),Z(["DDD","DDDD"],function(t,e,n){n._dayOfYear=v(t)}),z("H",["HH",2],0,"hour"),z("h",["hh",2],0,gn),z("k",["kk",2],0,mn),z("hmm",0,0,function(){return""+gn.apply(this)+$(this.minutes(),2)}),z("hmmss",0,0,function(){return""+gn.apply(this)+$(this.minutes(),2)+$(this.seconds(),2)}),z("Hmm",0,0,function(){return""+this.hours()+$(this.minutes(),2)}),z("Hmmss",0,0,function(){return""+this.hours()+$(this.minutes(),2)+$(this.seconds(),2)}),vn("a",!0),vn("A",!1),N("hour","h"),U("a",yn),U("A",yn),U("H",Ci),U("h",Ci),U("HH",Ci,bi),U("hh",Ci,bi),U("hmm",Ai),U("hmmss",ki),U("Hmm",Ai),U("Hmmss",ki),Z(["H","HH"],$i),Z(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),Z(["h","hh"],function(t,e,n){e[$i]=v(t),u(n).bigHour=!0}),Z("hmm",function(t,e,n){var i=t.length-2;e[$i]=v(t.substr(0,i)),e[zi]=v(t.substr(i)),u(n).bigHour=!0}),Z("hmmss",function(t,e,n){var i=t.length-4,r=t.length-2;e[$i]=v(t.substr(0,i)),e[zi]=v(t.substr(i,2)),e[Yi]=v(t.substr(r)),u(n).bigHour=!0}),Z("Hmm",function(t,e,n){var i=t.length-2;e[$i]=v(t.substr(0,i)),e[zi]=v(t.substr(i))}),Z("Hmmss",function(t,e,n){var i=t.length-4,r=t.length-2;e[$i]=v(t.substr(0,i)),e[zi]=v(t.substr(i,2)),e[Yi]=v(t.substr(r))});var Sr=/[ap]\.?m?\.?/i,Tr=V("Hours",!0);z("m",["mm",2],0,"minute"),N("minute","m"),U("m",Ci),U("mm",Ci,bi),Z(["m","mm"],zi);var Cr=V("Minutes",!1);z("s",["ss",2],0,"second"),N("second","s"),U("s",Ci),U("ss",Ci,bi),Z(["s","ss"],Yi);var Ar=V("Seconds",!1);z("S",0,0,function(){return~~(this.millisecond()/100)}),z(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),z(0,["SSS",3],0,"millisecond"),z(0,["SSSS",4],0,function(){return 10*this.millisecond()}),z(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),z(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),z(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),z(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),z(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),N("millisecond","ms"),U("S",Pi,_i),U("SS",Pi,bi),U("SSS",Pi,wi);var kr;for(kr="SSSS";kr.length<=9;kr+="S")U(kr,Di);for(kr="S";kr.length<=9;kr+="S")Z(kr,bn);var Pr=V("Milliseconds",!1);z("z",0,0,"zoneAbbr"),z("zz",0,0,"zoneName");var Mr=p.prototype;Mr.add=hr,Mr.calendar=ce,Mr.clone=de,Mr.diff=ye,Mr.endOf=Ee,Mr.format=we,Mr.from=Se,Mr.fromNow=Te,Mr.to=Ce,Mr.toNow=Ae,Mr.get=H,Mr.invalidAt=je,Mr.isAfter=he,Mr.isBefore=fe,Mr.isBetween=pe,Mr.isSame=ge,Mr.isSameOrAfter=me,Mr.isSameOrBefore=ve,Mr.isValid=Fe,Mr.lang=pr,Mr.locale=ke,Mr.localeData=Pe,Mr.max=sr,Mr.min=or,Mr.parsingFlags=Ve,Mr.set=H,Mr.startOf=Me,Mr.subtract=fr,Mr.toArray=Ie,Mr.toObject=Ne,Mr.toDate=Le,Mr.toISOString=be,Mr.toJSON=Re,Mr.toString=_e,Mr.unix=Oe,Mr.valueOf=De,Mr.creationData=Ge,Mr.year=ar,Mr.isLeapYear=xt,Mr.weekYear=$e,Mr.isoWeekYear=ze,Mr.quarter=Mr.quarters=Ue,Mr.month=st,Mr.daysInMonth=lt,Mr.week=Mr.weeks=Ze,Mr.isoWeek=Mr.isoWeeks=Je,Mr.weeksInYear=Be,Mr.isoWeeksInYear=Ye,Mr.date=mr,Mr.day=Mr.days=sn,Mr.weekday=ln,Mr.isoWeekday=un,Mr.dayOfYear=pn,Mr.hour=Mr.hours=Tr,Mr.minute=Mr.minutes=Cr,Mr.second=Mr.seconds=Ar,Mr.millisecond=Mr.milliseconds=Pr,Mr.utcOffset=Xt,Mr.utc=Ut,Mr.local=Wt,Mr.parseZone=Qt,Mr.hasAlignedHourOffset=Kt,Mr.isDST=Zt,Mr.isDSTShifted=Jt,Mr.isLocal=te,Mr.isUtcOffset=ee,Mr.isUtc=ne,Mr.isUTC=ne,Mr.zoneAbbr=wn,Mr.zoneName=Sn,Mr.dates=_("dates accessor is deprecated. Use date instead.",mr),Mr.months=_("months accessor is deprecated. Use month instead",st),Mr.years=_("years accessor is deprecated. Use year instead",ar),Mr.zone=_("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",qt);var Er=Mr,Dr={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Or={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Lr="Invalid date",Ir="%d",Nr=/\d{1,2}/,Rr={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Fr=A.prototype;Fr._calendar=Dr,Fr.calendar=An,Fr._longDateFormat=Or,Fr.longDateFormat=kn,Fr._invalidDate=Lr,Fr.invalidDate=Pn,Fr._ordinal=Ir,Fr.ordinal=Mn,Fr._ordinalParse=Nr,Fr.preparse=En,Fr.postformat=En,Fr._relativeTime=Rr,Fr.relativeTime=Dn,Fr.pastFuture=On,Fr.set=T,Fr.months=nt,Fr._months=Wi,Fr.monthsShort=it,Fr._monthsShort=Qi,Fr.monthsParse=at,Fr._monthsRegex=Zi,Fr.monthsRegex=ct,Fr._monthsShortRegex=Ki,Fr.monthsShortRegex=ut,Fr.week=We,Fr._week=gr,Fr.firstDayOfYear=Ke,Fr.firstDayOfWeek=Qe,Fr.weekdays=en,Fr._weekdays=vr,Fr.weekdaysMin=rn,Fr._weekdaysMin=xr,Fr.weekdaysShort=nn,Fr._weekdaysShort=yr,Fr.weekdaysParse=on,Fr._weekdaysRegex=_r,Fr.weekdaysRegex=cn,Fr._weekdaysShortRegex=br,Fr.weekdaysShortRegex=dn,Fr._weekdaysMinRegex=wr,Fr.weekdaysMinRegex=hn,Fr.isPM=xn,Fr._meridiemParse=Sr,Fr.meridiem=_n,E("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===v(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),t.lang=_("moment.lang is deprecated. Use moment.locale instead.",E),t.langData=_("moment.langData is deprecated. Use moment.localeData instead.",L);var Vr=Math.abs,jr=Kn("ms"),Gr=Kn("s"),Hr=Kn("m"),$r=Kn("h"),zr=Kn("d"),Yr=Kn("w"),Br=Kn("M"),Xr=Kn("y"),qr=Jn("milliseconds"),Ur=Jn("seconds"),Wr=Jn("minutes"),Qr=Jn("hours"),Kr=Jn("days"),Zr=Jn("months"),Jr=Jn("years"),ta=Math.round,ea={s:45,m:45,h:22,d:26,M:11},na=Math.abs,ia=Gt.prototype;ia.abs=Hn,ia.add=zn,ia.subtract=Yn,ia.as=Wn,ia.asMilliseconds=jr,ia.asSeconds=Gr,ia.asMinutes=Hr,ia.asHours=$r,ia.asDays=zr,ia.asWeeks=Yr,ia.asMonths=Br,ia.asYears=Xr,ia.valueOf=Qn,ia._bubble=Xn,ia.get=Zn,ia.milliseconds=qr,ia.seconds=Ur,ia.minutes=Wr,ia.hours=Qr,ia.days=Kr,ia.weeks=ti,ia.months=Zr,ia.years=Jr,ia.humanize=ri,ia.toISOString=ai,ia.toString=ai,ia.toJSON=ai,ia.locale=ke,ia.localeData=Pe,ia.toIsoString=_("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ai),ia.lang=pr,z("X",0,0,"unix"),z("x",0,0,"valueOf"),U("x",Oi),U("X",Ni),Z("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),Z("x",function(t,e,n){n._d=new Date(v(t))}),t.version="2.13.0",e(Rt),t.fn=Er,t.min=Vt,t.max=jt,t.now=lr,t.utc=s,t.unix=Tn,t.months=Rn,t.isDate=i,t.locale=E,t.invalid=d,t.duration=ie,t.isMoment=g,t.weekdays=Vn,t.parseZone=Cn,t.localeData=L,t.isDuration=Ht,t.monthsShort=Fn,t.weekdaysMin=Gn,t.defineLocale=D,t.updateLocale=O,t.locales=I,t.weekdaysShort=jn,t.normalizeUnits=R,t.relativeTimeThreshold=ii,t.prototype=Er;var ra=t;return ra}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}t.fn.emulateTransitionEnd=function(e){var n=!1,i=this;t(this).one("bsTransitionEnd",function(){n=!0});var r=function(){n||t(i).trigger(t.support.transition.end)};return setTimeout(r,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var n=t(this),r=n.data("bs.alert");r||n.data("bs.alert",r=new i(this)),"string"==typeof e&&r[e].call(n)})}var n='[data-dismiss="alert"]',i=function(e){t(e).on("click",n,this.close)};i.VERSION="3.3.6",i.TRANSITION_DURATION=150,i.prototype.close=function(e){function n(){o.detach().trigger("closed.bs.alert").remove()}var r=t(this),a=r.attr("data-target");a||(a=r.attr("href"),a=a&&a.replace(/.*(?=#[^\s]*$)/,""));var o=t(a);e&&e.preventDefault(),o.length||(o=r.closest(".alert")),o.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(o.removeClass("in"),t.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",n).emulateTransitionEnd(i.TRANSITION_DURATION):n())};var r=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=r,this},t(document).on("click.bs.alert.data-api",n,i.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.button"),a="object"==typeof e&&e;r||i.data("bs.button",r=new n(this,a)),"toggle"==e?r.toggle():e&&r.setState(e)})}var n=function(e,i){this.$element=t(e),this.options=t.extend({},n.DEFAULTS,i),this.isLoading=!1};n.VERSION="3.3.6",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(e){var n="disabled",i=this.$element,r=i.is("input")?"val":"html",a=i.data();e+="Text",null==a.resetText&&i.data("resetText",i[r]()),setTimeout(t.proxy(function(){i[r](null==a[e]?this.options[e]:a[e]),"loadingText"==e?(this.isLoading=!0,i.addClass(n).attr(n,n)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),t&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=e,t.fn.button.Constructor=n,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(n){var i=t(n.target);i.hasClass("btn")||(i=i.closest(".btn")),e.call(i,"toggle"),t(n.target).is('input[type="radio"]')||t(n.target).is('input[type="checkbox"]')||n.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.carousel"),a=t.extend({},n.DEFAULTS,i.data(),"object"==typeof e&&e),o="string"==typeof e?e:a.slide;r||i.data("bs.carousel",r=new n(this,a)),"number"==typeof e?r.to(e):o?r[o]():a.interval&&r.pause().cycle()})}var n=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};n.VERSION="3.3.6",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},n.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},n.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},n.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e),i="prev"==t&&0===n||"next"==t&&n==this.$items.length-1;if(i&&!this.options.wrap)return e;var r="prev"==t?-1:1,a=(n+r)%this.$items.length;return this.$items.eq(a)},n.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",this.$items.eq(t))},n.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){if(!this.sliding)return this.slide("next")},n.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},n.prototype.slide=function(e,i){var r=this.$element.find(".item.active"),a=i||this.getItemForDirection(e,r),o=this.interval,s="next"==e?"left":"right",l=this;if(a.hasClass("active"))return this.sliding=!1;var u=a[0],c=t.Event("slide.bs.carousel",{relatedTarget:u,direction:s});if(this.$element.trigger(c),!c.isDefaultPrevented()){if(this.sliding=!0,o&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var d=t(this.$indicators.children()[this.getItemIndex(a)]);d&&d.addClass("active")}var h=t.Event("slid.bs.carousel",{relatedTarget:u,direction:s});return t.support.transition&&this.$element.hasClass("slide")?(a.addClass(e),a[0].offsetWidth,r.addClass(s),a.addClass(s),r.one("bsTransitionEnd",function(){a.removeClass([e,s].join(" ")).addClass("active"),r.removeClass(["active",s].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(h)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(r.removeClass("active"),a.addClass("active"),this.sliding=!1,this.$element.trigger(h)),o&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=n,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this};var r=function(n){var i,r=t(this),a=t(r.attr("data-target")||(i=r.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(a.hasClass("carousel")){var o=t.extend({},a.data(),r.data()),s=r.attr("data-slide-to");s&&(o.interval=!1),e.call(a,o),s&&a.data("bs.carousel").to(s),n.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",r).on("click.bs.carousel.data-api","[data-slide-to]",r),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var n=t(this);e.call(n,n.data())})})}(jQuery),+function(t){"use strict";function e(e){var n,i=e.attr("data-target")||(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return t(i)}function n(e){return this.each(function(){var n=t(this),r=n.data("bs.collapse"),a=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e);!r&&a.toggle&&/show|hide/.test(e)&&(a.toggle=!1),r||n.data("bs.collapse",r=new i(this,a)),"string"==typeof e&&r[e]()})}var i=function(e,n){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,n),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.6",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,r=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(r&&r.length&&(e=r.data("bs.collapse"),e&&e.transitioning))){var a=t.Event("show.bs.collapse");if(this.$element.trigger(a),!a.isDefaultPrevented()){r&&r.length&&(n.call(r,"hide"),e||r.data("bs.collapse",null));var o=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[o](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("collapse in")[o](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return s.call(this);var l=t.camelCase(["scroll",o].join("-"));this.$element.one("bsTransitionEnd",t.proxy(s,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[o](this.$element[0][l])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var r=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[n](0).one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(i.TRANSITION_DURATION):r.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(n,i){var r=t(i);this.addAriaAndCollapsedClass(e(r),r)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass("in");t.attr("aria-expanded",n),e.toggleClass("collapsed",!n).attr("aria-expanded",n)};var r=t.fn.collapse;t.fn.collapse=n,t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=r,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var r=t(this);r.attr("data-target")||i.preventDefault();var a=e(r),o=a.data("bs.collapse"),s=o?"toggle":r.data();n.call(a,s)})}(jQuery),+function(t){"use strict";function e(e){var n=e.attr("data-target");n||(n=e.attr("href"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i=n&&t(n);return i&&i.length?i:e.parent()}function n(n){n&&3===n.which||(t(r).remove(),t(a).each(function(){var i=t(this),r=e(i),a={relatedTarget:this};r.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(r[0],n.target)||(r.trigger(n=t.Event("hide.bs.dropdown",a)),n.isDefaultPrevented()||(i.attr("aria-expanded","false"),r.removeClass("open").trigger(t.Event("hidden.bs.dropdown",a)))))}))}function i(e){return this.each(function(){var n=t(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new o(this)),"string"==typeof e&&i[e].call(n)})}var r=".dropdown-backdrop",a='[data-toggle="dropdown"]',o=function(e){t(e).on("click.bs.dropdown",this.toggle)};o.VERSION="3.3.6",o.prototype.toggle=function(i){var r=t(this);if(!r.is(".disabled, :disabled")){var a=e(r),o=a.hasClass("open");if(n(),!o){"ontouchstart"in document.documentElement&&!a.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",n);var s={relatedTarget:this};if(a.trigger(i=t.Event("show.bs.dropdown",s)),i.isDefaultPrevented())return;r.trigger("focus").attr("aria-expanded","true"),a.toggleClass("open").trigger(t.Event("shown.bs.dropdown",s))}return!1}},o.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var i=t(this);if(n.preventDefault(),n.stopPropagation(),!i.is(".disabled, :disabled")){var r=e(i),o=r.hasClass("open");if(!o&&27!=n.which||o&&27==n.which)return 27==n.which&&r.find(a).trigger("focus"),i.trigger("click");var s=" li:not(.disabled):visible a",l=r.find(".dropdown-menu"+s);if(l.length){var u=l.index(n.target);38==n.which&&u>0&&u--,40==n.which&&udocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},n.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},n.prototype.init=function(e,n,i){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var r=this.options.trigger.split(" "),a=r.length;a--;){var o=r[a];if("click"==o)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=o){var s="hover"==o?"mouseenter":"focusin",l="hover"==o?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{ -trigger:"manual",selector:""}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},n.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,function(t,i){n[t]!=i&&(e[t]=i)}),e},n.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusin"==e.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState?void(n.hoverState="in"):(clearTimeout(n.timeout),n.hoverState="in",n.options.delay&&n.options.delay.show?void(n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)):n.show())},n.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},n.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusout"==e.type?"focus":"hover"]=!1),!n.isInStateTrue())return clearTimeout(n.timeout),n.hoverState="out",n.options.delay&&n.options.delay.hide?void(n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)):n.hide()},n.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var r=this,a=this.tip(),o=this.getUID(this.type);this.setContent(),a.attr("id",o),this.$element.attr("aria-describedby",o),this.options.animation&&a.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,u=l.test(s);u&&(s=s.replace(l,"")||"top"),a.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?a.appendTo(this.options.container):a.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var c=this.getPosition(),d=a[0].offsetWidth,h=a[0].offsetHeight;if(u){var f=s,p=this.getPosition(this.$viewport);s="bottom"==s&&c.bottom+h>p.bottom?"top":"top"==s&&c.top-hp.width?"left":"left"==s&&c.left-do.top+o.height&&(r.top=o.top+o.height-l)}else{var u=e.left-a,c=e.left+a+n;uo.right&&(r.left=o.left+o.width-c)}return r},n.prototype.getTitle=function(){var t,e=this.$element,n=this.options;return t=e.attr("data-original-title")||("function"==typeof n.title?n.title.call(e[0]):n.title)},n.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(e){var n=this;e&&(n=t(e.currentTarget).data("bs."+this.type),n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},n.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null})};var i=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=n,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.popover"),a="object"==typeof e&&e;!r&&/destroy|hide/.test(e)||(r||i.data("bs.popover",r=new n(this,a)),"string"==typeof e&&r[e]())})}var n=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");n.VERSION="3.3.6",n.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),n.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),n.prototype.constructor=n,n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof n?"html":"append":"text"](n),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},n.prototype.hasContent=function(){return this.getTitle()||this.getContent()},n.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=n,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),+function(t){"use strict";function e(n,i){this.$body=t(document.body),this.$scrollElement=t(t(n).is(document.body)?window:n),this.options=t.extend({},e.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var i=t(this),r=i.data("bs.scrollspy"),a="object"==typeof n&&n;r||i.data("bs.scrollspy",r=new e(this,a)),"string"==typeof n&&r[n]()})}e.VERSION="3.3.6",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),r=e.data("target")||e.attr("href"),a=/^#./.test(r)&&t(r);return a&&a.length&&a.is(":visible")&&[[a[n]().top+i,r]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),r=this.offsets,a=this.targets,o=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),e>=i)return o!=(t=a[a.length-1])&&this.activate(t);if(o&&e=r[t]&&(void 0===r[t+1]||e .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),r&&r()}var o=i.find("> .active"),s=r&&t.support.transition&&(o.length&&o.hasClass("fade")||!!i.find("> .fade").length);o.length&&s?o.one("bsTransitionEnd",a).emulateTransitionEnd(n.TRANSITION_DURATION):a(),o.removeClass("in")};var i=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=n,t.fn.tab.noConflict=function(){return t.fn.tab=i,this};var r=function(n){n.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',r).on("click.bs.tab.data-api",'[data-toggle="pill"]',r)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.affix"),a="object"==typeof e&&e;r||i.data("bs.affix",r=new n(this,a)),"string"==typeof e&&r[e]()})}var n=function(e,i){this.options=t.extend({},n.DEFAULTS,i),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.3.6",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(t,e,n,i){var r=this.$target.scrollTop(),a=this.$element.offset(),o=this.$target.height();if(null!=n&&"top"==this.affixed)return r=t-i&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},n.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),i=this.options.offset,r=i.top,a=i.bottom,o=Math.max(t(document).height(),t(document.body).height());"object"!=typeof i&&(a=r=i),"function"==typeof r&&(r=i.top(this.$element)),"function"==typeof a&&(a=i.bottom(this.$element));var s=this.getState(o,e,r,a);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var l="affix"+(s?"-"+s:""),u=t.Event(l+".bs.affix");if(this.$element.trigger(u),u.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:o-e-a})}};var i=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=n,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var n=t(this),i=n.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),e.call(n,i)})})}(jQuery),function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t("undefined"!=typeof jQuery?jQuery:window.Zepto)}(function(t){"use strict";function e(e){var n=e.data;e.isDefaultPrevented()||(e.preventDefault(),t(e.target).ajaxSubmit(n))}function n(e){var n=e.target,i=t(n);if(!i.is("[type=submit],[type=image]")){var r=i.closest("[type=submit]");if(0===r.length)return;n=r[0]}var a=this;if(a.clk=n,"image"==n.type)if(void 0!==e.offsetX)a.clk_x=e.offsetX,a.clk_y=e.offsetY;else if("function"==typeof t.fn.offset){var o=i.offset();a.clk_x=e.pageX-o.left,a.clk_y=e.pageY-o.top}else a.clk_x=e.pageX-n.offsetLeft,a.clk_y=e.pageY-n.offsetTop;setTimeout(function(){a.clk=a.clk_x=a.clk_y=null},100)}function i(){if(t.fn.ajaxSubmit.debug){var e="[jquery.form] "+Array.prototype.join.call(arguments,"");window.console&&window.console.log?window.console.log(e):window.opera&&window.opera.postError&&window.opera.postError(e)}}var r={};r.fileapi=void 0!==t("").get(0).files,r.formdata=void 0!==window.FormData;var a=!!t.fn.prop;t.fn.attr2=function(){if(!a)return this.attr.apply(this,arguments);var t=this.prop.apply(this,arguments);return t&&t.jquery||"string"==typeof t?t:this.attr.apply(this,arguments)},t.fn.ajaxSubmit=function(e){function n(n){var i,r,a=t.param(n,e.traditional).split("&"),o=a.length,s=[];for(i=0;i').val(h.extraData[f].value).appendTo(S)[0]):c.push(t('').val(h.extraData[f]).appendTo(S)[0]));h.iframeTarget||m.appendTo("body"),v.attachEvent?v.attachEvent("onload",s):v.addEventListener("load",s,!1),setTimeout(e,15);try{S.submit()}catch(g){var y=document.createElement("form").submit;y.apply(S)}}finally{S.setAttribute("action",a),S.setAttribute("enctype",u),n?S.setAttribute("target",n):d.removeAttr("target"),t(c).remove()}}function s(e){if(!y.aborted&&!D){if(E=r(v),E||(i("cannot access response document"),e=A),e===C&&y)return y.abort("timeout"),void T.reject(y,"timeout");if(e==A&&y)return y.abort("server abort"),void T.reject(y,"error","server abort");if(E&&E.location.href!=h.iframeSrc||b){v.detachEvent?v.detachEvent("onload",s):v.removeEventListener("load",s,!1);var n,a="success";try{if(b)throw"timeout";var o="xml"==h.dataType||E.XMLDocument||t.isXMLDoc(E);if(i("isXml="+o),!o&&window.opera&&(null===E.body||!E.body.innerHTML)&&--O)return i("requeing onLoad callback, DOM not available"),void setTimeout(s,250);var l=E.body?E.body:E.documentElement;y.responseText=l?l.innerHTML:null,y.responseXML=E.XMLDocument?E.XMLDocument:E,o&&(h.dataType="xml"),y.getResponseHeader=function(t){var e={"content-type":h.dataType};return e[t.toLowerCase()]},l&&(y.status=Number(l.getAttribute("status"))||y.status,y.statusText=l.getAttribute("statusText")||y.statusText);var u=(h.dataType||"").toLowerCase(),c=/(json|script|text)/.test(u);if(c||h.textarea){var d=E.getElementsByTagName("textarea")[0];if(d)y.responseText=d.value,y.status=Number(d.getAttribute("status"))||y.status,y.statusText=d.getAttribute("statusText")||y.statusText;else if(c){var p=E.getElementsByTagName("pre")[0],g=E.getElementsByTagName("body")[0];p?y.responseText=p.textContent?p.textContent:p.innerText:g&&(y.responseText=g.textContent?g.textContent:g.innerText)}}else"xml"==u&&!y.responseXML&&y.responseText&&(y.responseXML=L(y.responseText));try{M=N(y,u,h)}catch(x){a="parsererror",y.error=n=x||a}}catch(x){i("error caught: ",x),a="error",y.error=n=x||a}y.aborted&&(i("upload aborted"),a=null),y.status&&(a=y.status>=200&&y.status<300||304===y.status?"success":"error"),"success"===a?(h.success&&h.success.call(h.context,M,"success",y),T.resolve(y.responseText,"success",y),f&&t.event.trigger("ajaxSuccess",[y,h])):a&&(void 0===n&&(n=y.statusText),h.error&&h.error.call(h.context,y,a,n),T.reject(y,"error",n),f&&t.event.trigger("ajaxError",[y,h,n])),f&&t.event.trigger("ajaxComplete",[y,h]),f&&!--t.active&&t.event.trigger("ajaxStop"),h.complete&&h.complete.call(h.context,y,a),D=!0,h.timeout&&clearTimeout(w),setTimeout(function(){h.iframeTarget?m.attr("src",h.iframeSrc):m.remove(),y.responseXML=null},100)}}}var u,c,h,f,p,m,v,y,x,_,b,w,S=d[0],T=t.Deferred();if(T.abort=function(t){y.abort(t)},n)for(c=0;c'),m.css({position:"absolute",top:"-1000px",left:"-1000px"})),v=m[0],y={aborted:0,responseText:null,responseXML:null,status:0,statusText:"n/a",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(e){var n="timeout"===e?"timeout":"aborted";i("aborting upload... "+n),this.aborted=1;try{v.contentWindow.document.execCommand&&v.contentWindow.document.execCommand("Stop")}catch(r){}m.attr("src",h.iframeSrc),y.error=n,h.error&&h.error.call(h.context,y,n,e),f&&t.event.trigger("ajaxError",[y,h,n]),h.complete&&h.complete.call(h.context,y,n)}},f=h.global,f&&0===t.active++&&t.event.trigger("ajaxStart"),f&&t.event.trigger("ajaxSend",[y,h]),h.beforeSend&&h.beforeSend.call(h.context,y,h)===!1)return h.global&&t.active--,T.reject(),T;if(y.aborted)return T.reject(),T;x=S.clk,x&&(_=x.name,_&&!x.disabled&&(h.extraData=h.extraData||{},h.extraData[_]=x.value,"image"==x.type&&(h.extraData[_+".x"]=S.clk_x,h.extraData[_+".y"]=S.clk_y)));var C=1,A=2,k=t("meta[name=csrf-token]").attr("content"),P=t("meta[name=csrf-param]").attr("content");P&&k&&(h.extraData=h.extraData||{},h.extraData[P]=k),h.forceSync?o():setTimeout(o,10);var M,E,D,O=50,L=t.parseXML||function(t,e){return window.ActiveXObject?(e=new ActiveXObject("Microsoft.XMLDOM"),e.async="false",e.loadXML(t)):e=(new DOMParser).parseFromString(t,"text/xml"),e&&e.documentElement&&"parsererror"!=e.documentElement.nodeName?e:null},I=t.parseJSON||function(t){return window.eval("("+t+")")},N=function(e,n,i){var r=e.getResponseHeader("content-type")||"",a="xml"===n||!n&&r.indexOf("xml")>=0,o=a?e.responseXML:e.responseText;return a&&"parsererror"===o.documentElement.nodeName&&t.error&&t.error("parsererror"),i&&i.dataFilter&&(o=i.dataFilter(o,n)),"string"==typeof o&&("json"===n||!n&&r.indexOf("json")>=0?o=I(o):("script"===n||!n&&r.indexOf("javascript")>=0)&&t.globalEval(o)),o};return T}if(!this.length)return i("ajaxSubmit: skipping submit process - no element selected"),this;var l,u,c,d=this;"function"==typeof e?e={success:e}:void 0===e&&(e={}),l=e.type||this.attr2("method"),u=e.url||this.attr2("action"),c="string"==typeof u?t.trim(u):"",c=c||window.location.href||"",c&&(c=(c.match(/^([^#]+)/)||[])[1]),e=t.extend(!0,{url:c,success:t.ajaxSettings.success,type:l||t.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},e);var h={};if(this.trigger("form-pre-serialize",[this,e,h]),h.veto)return i("ajaxSubmit: submit vetoed via form-pre-serialize trigger"),this;if(e.beforeSerialize&&e.beforeSerialize(this,e)===!1)return i("ajaxSubmit: submit aborted via beforeSerialize callback"),this;var f=e.traditional;void 0===f&&(f=t.ajaxSettings.traditional);var p,g=[],m=this.formToArray(e.semantic,g);if(e.data&&(e.extraData=e.data,p=t.param(e.data,f)),e.beforeSubmit&&e.beforeSubmit(m,this,e)===!1)return i("ajaxSubmit: submit aborted via beforeSubmit callback"),this;if(this.trigger("form-submit-validate",[m,this,e,h]),h.veto)return i("ajaxSubmit: submit vetoed via form-submit-validate trigger"),this;var v=t.param(m,f);p&&(v=v?v+"&"+p:p),"GET"==e.type.toUpperCase()?(e.url+=(e.url.indexOf("?")>=0?"&":"?")+v,e.data=null):e.data=v;var y=[];if(e.resetForm&&y.push(function(){d.resetForm()}),e.clearForm&&y.push(function(){d.clearForm(e.includeHidden)}),!e.dataType&&e.target){var x=e.success||function(){};y.push(function(n){var i=e.replaceTarget?"replaceWith":"html";t(e.target)[i](n).each(x,arguments)})}else e.success&&y.push(e.success);if(e.success=function(t,n,i){for(var r=e.context||this,a=0,o=y.length;a0,T="multipart/form-data",C=d.attr("enctype")==T||d.attr("encoding")==T,A=r.fileapi&&r.formdata;i("fileAPI :"+A);var k,P=(S||C)&&!A;e.iframe!==!1&&(e.iframe||P)?e.closeKeepAlive?t.get(e.closeKeepAlive,function(){k=s(m)}):k=s(m):k=(S||C)&&A?o(m):t.ajax(e),d.removeData("jqxhr").data("jqxhr",k);for(var M=0;M").attr("name",n.submitButton.name).val(t(n.submitButton).val()).appendTo(n.currentForm)),r=n.settings.submitHandler.call(n,n.currentForm,e),n.submitButton&&i.remove(),void 0!==r&&r)}return n.settings.debug&&e.preventDefault(),n.cancelSubmit?(n.cancelSubmit=!1,i()):n.form()?n.pendingRequest?(n.formSubmitted=!0,!1):i():(n.focusInvalid(),!1)})),n)},valid:function(){var e,n,i;return t(this[0]).is("form")?e=this.validate().form():(i=[],e=!0,n=t(this[0].form).validate(),this.each(function(){e=n.element(this)&&e,e||(i=i.concat(n.errorList))}),n.errorList=i),e},rules:function(e,n){if(this.length){var i,r,a,o,s,l,u=this[0];if(e)switch(i=t.data(u.form,"validator").settings,r=i.rules,a=t.validator.staticRules(u),e){case"add":t.extend(a,t.validator.normalizeRule(n)),delete a.messages,r[u.name]=a,n.messages&&(i.messages[u.name]=t.extend(i.messages[u.name],n.messages));break;case"remove": -return n?(l={},t.each(n.split(/\s/),function(e,n){l[n]=a[n],delete a[n],"required"===n&&t(u).removeAttr("aria-required")}),l):(delete r[u.name],a)}return o=t.validator.normalizeRules(t.extend({},t.validator.classRules(u),t.validator.attributeRules(u),t.validator.dataRules(u),t.validator.staticRules(u)),u),o.required&&(s=o.required,delete o.required,o=t.extend({required:s},o),t(u).attr("aria-required","true")),o.remote&&(s=o.remote,delete o.remote,o=t.extend(o,{remote:s})),o}}}),t.extend(t.expr[":"],{blank:function(e){return!t.trim(""+t(e).val())},filled:function(e){var n=t(e).val();return null!==n&&!!t.trim(""+n)},unchecked:function(e){return!t(e).prop("checked")}}),t.validator=function(e,n){this.settings=t.extend(!0,{},t.validator.defaults,e),this.currentForm=n,this.init()},t.validator.format=function(e,n){return 1===arguments.length?function(){var n=t.makeArray(arguments);return n.unshift(e),t.validator.format.apply(this,n)}:void 0===n?e:(arguments.length>2&&n.constructor!==Array&&(n=t.makeArray(arguments).slice(1)),n.constructor!==Array&&(n=[n]),t.each(n,function(t,n){e=e.replace(new RegExp("\\{"+t+"\\}","g"),function(){return n})}),e)},t.extend(t.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:t([]),errorLabelContainer:t([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(t){this.lastActive=t,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,t,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(t)))},onfocusout:function(t){this.checkable(t)||!(t.name in this.submitted)&&this.optional(t)||this.element(t)},onkeyup:function(e,n){var i=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===n.which&&""===this.elementValue(e)||t.inArray(n.keyCode,i)!==-1||(e.name in this.submitted||e.name in this.invalid)&&this.element(e)},onclick:function(t){t.name in this.submitted?this.element(t):t.parentNode.name in this.submitted&&this.element(t.parentNode)},highlight:function(e,n,i){"radio"===e.type?this.findByName(e.name).addClass(n).removeClass(i):t(e).addClass(n).removeClass(i)},unhighlight:function(e,n,i){"radio"===e.type?this.findByName(e.name).removeClass(n).addClass(i):t(e).removeClass(n).addClass(i)}},setDefaults:function(e){t.extend(t.validator.defaults,e)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:t.validator.format("Please enter no more than {0} characters."),minlength:t.validator.format("Please enter at least {0} characters."),rangelength:t.validator.format("Please enter a value between {0} and {1} characters long."),range:t.validator.format("Please enter a value between {0} and {1}."),max:t.validator.format("Please enter a value less than or equal to {0}."),min:t.validator.format("Please enter a value greater than or equal to {0}."),step:t.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function e(e){var n=t.data(this.form,"validator"),i="on"+e.type.replace(/^validate/,""),r=n.settings;r[i]&&!t(this).is(r.ignore)&&r[i].call(n,this,e)}this.labelContainer=t(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||t(this.currentForm),this.containers=t(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var n,i=this.groups={};t.each(this.settings.groups,function(e,n){"string"==typeof n&&(n=n.split(/\s/)),t.each(n,function(t,n){i[n]=e})}),n=this.settings.rules,t.each(n,function(e,i){n[e]=t.validator.normalizeRule(i)}),t(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable]",e).on("click.validate","select, option, [type='radio'], [type='checkbox']",e),this.settings.invalidHandler&&t(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler),t(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),t.extend(this.submitted,this.errorMap),this.invalid=t.extend({},this.errorMap),this.valid()||t(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var t=0,e=this.currentElements=this.elements();e[t];t++)this.check(e[t]);return this.valid()},element:function(e){var n,i,r=this.clean(e),a=this.validationTargetFor(r),o=this,s=!0;return void 0===a?delete this.invalid[r.name]:(this.prepareElement(a),this.currentElements=t(a),i=this.groups[a.name],i&&t.each(this.groups,function(t,e){e===i&&t!==a.name&&(r=o.validationTargetFor(o.clean(o.findByName(t))),r&&r.name in o.invalid&&(o.currentElements.push(r),s=s&&o.check(r)))}),n=this.check(a)!==!1,s=s&&n,n?this.invalid[a.name]=!1:this.invalid[a.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),t(e).attr("aria-invalid",!n)),s},showErrors:function(e){if(e){var n=this;t.extend(this.errorMap,e),this.errorList=t.map(this.errorMap,function(t,e){return{message:t,element:n.findByName(e)[0]}}),this.successList=t.grep(this.successList,function(t){return!(t.name in e)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){t.fn.resetForm&&t(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var e=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(e)},resetElements:function(t){var e;if(this.settings.unhighlight)for(e=0;t[e];e++)this.settings.unhighlight.call(this,t[e],this.settings.errorClass,""),this.findByName(t[e].name).removeClass(this.settings.validClass);else t.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(t){var e,n=0;for(e in t)t[e]&&n++;return n},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(t){t.not(this.containers).text(""),this.addWrapper(t).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{t(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(e){}},findLastActive:function(){var e=this.lastActive;return e&&1===t.grep(this.errorList,function(t){return t.element.name===e.name}).length&&e},elements:function(){var e=this,n={};return t(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var i=this.name||t(this).attr("name");return!i&&e.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=t(this).closest("form")[0]),!(i in n||!e.objectLength(t(this).rules()))&&(n[i]=!0,!0)})},clean:function(e){return t(e)[0]},errors:function(){var e=this.settings.errorClass.split(" ").join(".");return t(this.settings.errorElement+"."+e,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=t([]),this.toHide=t([])},reset:function(){this.resetInternals(),this.currentElements=t([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(t){this.reset(),this.toHide=this.errorsFor(t)},elementValue:function(e){var n,i,r=t(e),a=e.type;return"radio"===a||"checkbox"===a?this.findByName(e.name).filter(":checked").val():"number"===a&&"undefined"!=typeof e.validity?e.validity.badInput?"NaN":r.val():(n=e.hasAttribute("contenteditable")?r.text():r.val(),"file"===a?"C:\\fakepath\\"===n.substr(0,12)?n.substr(12):(i=n.lastIndexOf("/"),i>=0?n.substr(i+1):(i=n.lastIndexOf("\\"),i>=0?n.substr(i+1):n)):"string"==typeof n?n.replace(/\r/g,""):n)},check:function(e){e=this.validationTargetFor(this.clean(e));var n,i,r,a=t(e).rules(),o=t.map(a,function(t,e){return e}).length,s=!1,l=this.elementValue(e);if("function"==typeof a.normalizer){if(l=a.normalizer.call(e,l),"string"!=typeof l)throw new TypeError("The normalizer should return a string value.");delete a.normalizer}for(i in a){r={method:i,parameters:a[i]};try{if(n=t.validator.methods[i].call(this,l,e,r.parameters),"dependency-mismatch"===n&&1===o){s=!0;continue}if(s=!1,"pending"===n)return void(this.toHide=this.toHide.not(this.errorsFor(e)));if(!n)return this.formatAndAdd(e,r),!1}catch(u){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+e.id+", check the '"+r.method+"' method.",u),u instanceof TypeError&&(u.message+=". Exception occurred when checking element "+e.id+", check the '"+r.method+"' method."),u}}if(!s)return this.objectLength(a)&&this.successList.push(e),!0},customDataMessage:function(e,n){return t(e).data("msg"+n.charAt(0).toUpperCase()+n.substring(1).toLowerCase())||t(e).data("msg")},customMessage:function(t,e){var n=this.settings.messages[t];return n&&(n.constructor===String?n:n[e])},findDefined:function(){for(var t=0;tWarning: No message defined for "+e.name+""),r=/\$?\{(\d+)\}/g;return"function"==typeof i?i=i.call(this,n.parameters,e):r.test(i)&&(i=t.validator.format(i.replace(r,"{$1}"),n.parameters)),i},formatAndAdd:function(t,e){var n=this.defaultMessage(t,e);this.errorList.push({message:n,element:t,method:e.method}),this.errorMap[t.name]=n,this.submitted[t.name]=n},addWrapper:function(t){return this.settings.wrapper&&(t=t.add(t.parent(this.settings.wrapper))),t},defaultShowErrors:function(){var t,e,n;for(t=0;this.errorList[t];t++)n=this.errorList[t],this.settings.highlight&&this.settings.highlight.call(this,n.element,this.settings.errorClass,this.settings.validClass),this.showLabel(n.element,n.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(t=0;this.successList[t];t++)this.showLabel(this.successList[t]);if(this.settings.unhighlight)for(t=0,e=this.validElements();e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return t(this.errorList).map(function(){return this.element})},showLabel:function(e,n){var i,r,a,o,s=this.errorsFor(e),l=this.idOrName(e),u=t(e).attr("aria-describedby");s.length?(s.removeClass(this.settings.validClass).addClass(this.settings.errorClass),s.html(n)):(s=t("<"+this.settings.errorElement+">").attr("id",l+"-error").addClass(this.settings.errorClass).html(n||""),i=s,this.settings.wrapper&&(i=s.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(i):this.settings.errorPlacement?this.settings.errorPlacement(i,t(e)):i.insertAfter(e),s.is("label")?s.attr("for",l):0===s.parents("label[for='"+this.escapeCssMeta(l)+"']").length&&(a=s.attr("id"),u?u.match(new RegExp("\\b"+this.escapeCssMeta(a)+"\\b"))||(u+=" "+a):u=a,t(e).attr("aria-describedby",u),r=this.groups[e.name],r&&(o=this,t.each(o.groups,function(e,n){n===r&&t("[name='"+o.escapeCssMeta(e)+"']",o.currentForm).attr("aria-describedby",s.attr("id"))})))),!n&&this.settings.success&&(s.text(""),"string"==typeof this.settings.success?s.addClass(this.settings.success):this.settings.success(s,e)),this.toShow=this.toShow.add(s)},errorsFor:function(e){var n=this.escapeCssMeta(this.idOrName(e)),i=t(e).attr("aria-describedby"),r="label[for='"+n+"'], label[for='"+n+"'] *";return i&&(r=r+", #"+this.escapeCssMeta(i).replace(/\s+/g,", #")),this.errors().filter(r)},escapeCssMeta:function(t){return t.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(t){return this.groups[t.name]||(this.checkable(t)?t.name:t.id||t.name)},validationTargetFor:function(e){return this.checkable(e)&&(e=this.findByName(e.name)),t(e).not(this.settings.ignore)[0]},checkable:function(t){return/radio|checkbox/i.test(t.type)},findByName:function(e){return t(this.currentForm).find("[name='"+this.escapeCssMeta(e)+"']")},getLength:function(e,n){switch(n.nodeName.toLowerCase()){case"select":return t("option:selected",n).length;case"input":if(this.checkable(n))return this.findByName(n.name).filter(":checked").length}return e.length},depend:function(t,e){return!this.dependTypes[typeof t]||this.dependTypes[typeof t](t,e)},dependTypes:{"boolean":function(t){return t},string:function(e,n){return!!t(e,n.form).length},"function":function(t,e){return t(e)}},optional:function(e){var n=this.elementValue(e);return!t.validator.methods.required.call(this,n,e)&&"dependency-mismatch"},startRequest:function(e){this.pending[e.name]||(this.pendingRequest++,t(e).addClass(this.settings.pendingClass),this.pending[e.name]=!0)},stopRequest:function(e,n){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[e.name],t(e).removeClass(this.settings.pendingClass),n&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(t(this.currentForm).submit(),this.formSubmitted=!1):!n&&0===this.pendingRequest&&this.formSubmitted&&(t(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(e,n){return t.data(e,"previousValue")||t.data(e,"previousValue",{old:null,valid:!0,message:this.defaultMessage(e,{method:n})})},destroy:function(){this.resetForm(),t(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(e,n){e.constructor===String?this.classRuleSettings[e]=n:t.extend(this.classRuleSettings,e)},classRules:function(e){var n={},i=t(e).attr("class");return i&&t.each(i.split(" "),function(){this in t.validator.classRuleSettings&&t.extend(n,t.validator.classRuleSettings[this])}),n},normalizeAttributeRule:function(t,e,n,i){/min|max|step/.test(n)&&(null===e||/number|range|text/.test(e))&&(i=Number(i),isNaN(i)&&(i=void 0)),i||0===i?t[n]=i:e===n&&"range"!==e&&(t[n]=!0)},attributeRules:function(e){var n,i,r={},a=t(e),o=e.getAttribute("type");for(n in t.validator.methods)"required"===n?(i=e.getAttribute(n),""===i&&(i=!0),i=!!i):i=a.attr(n),this.normalizeAttributeRule(r,o,n,i);return r.maxlength&&/-1|2147483647|524288/.test(r.maxlength)&&delete r.maxlength,r},dataRules:function(e){var n,i,r={},a=t(e),o=e.getAttribute("type");for(n in t.validator.methods)i=a.data("rule"+n.charAt(0).toUpperCase()+n.substring(1).toLowerCase()),this.normalizeAttributeRule(r,o,n,i);return r},staticRules:function(e){var n={},i=t.data(e.form,"validator");return i.settings.rules&&(n=t.validator.normalizeRule(i.settings.rules[e.name])||{}),n},normalizeRules:function(e,n){return t.each(e,function(i,r){if(r===!1)return void delete e[i];if(r.param||r.depends){var a=!0;switch(typeof r.depends){case"string":a=!!t(r.depends,n.form).length;break;case"function":a=r.depends.call(n,n)}a?e[i]=void 0===r.param||r.param:(t.data(n.form,"validator").resetElements(t(n)),delete e[i])}}),t.each(e,function(i,r){e[i]=t.isFunction(r)&&"normalizer"!==i?r(n):r}),t.each(["minlength","maxlength"],function(){e[this]&&(e[this]=Number(e[this]))}),t.each(["rangelength","range"],function(){var n;e[this]&&(t.isArray(e[this])?e[this]=[Number(e[this][0]),Number(e[this][1])]:"string"==typeof e[this]&&(n=e[this].replace(/[\[\]]/g,"").split(/[\s,]+/),e[this]=[Number(n[0]),Number(n[1])]))}),t.validator.autoCreateRanges&&(null!=e.min&&null!=e.max&&(e.range=[e.min,e.max],delete e.min,delete e.max),null!=e.minlength&&null!=e.maxlength&&(e.rangelength=[e.minlength,e.maxlength],delete e.minlength,delete e.maxlength)),e},normalizeRule:function(e){if("string"==typeof e){var n={};t.each(e.split(/\s/),function(){n[this]=!0}),e=n}return e},addMethod:function(e,n,i){t.validator.methods[e]=n,t.validator.messages[e]=void 0!==i?i:t.validator.messages[e],n.length<3&&t.validator.addClassRules(e,t.validator.normalizeRule(e))},methods:{required:function(e,n,i){if(!this.depend(i,n))return"dependency-mismatch";if("select"===n.nodeName.toLowerCase()){var r=t(n).val();return r&&r.length>0}return this.checkable(n)?this.getLength(e,n)>0:e.length>0},email:function(t,e){return this.optional(e)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(t)},url:function(t,e){return this.optional(e)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(t)},date:function(t,e){return this.optional(e)||!/Invalid|NaN/.test(new Date(t).toString())},dateISO:function(t,e){return this.optional(e)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(t)},number:function(t,e){return this.optional(e)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t)},digits:function(t,e){return this.optional(e)||/^\d+$/.test(t)},minlength:function(e,n,i){var r=t.isArray(e)?e.length:this.getLength(e,n);return this.optional(n)||r>=i},maxlength:function(e,n,i){var r=t.isArray(e)?e.length:this.getLength(e,n);return this.optional(n)||r<=i},rangelength:function(e,n,i){var r=t.isArray(e)?e.length:this.getLength(e,n);return this.optional(n)||r>=i[0]&&r<=i[1]},min:function(t,e,n){return this.optional(e)||t>=n},max:function(t,e,n){return this.optional(e)||t<=n},range:function(t,e,n){return this.optional(e)||t>=n[0]&&t<=n[1]},step:function(e,n,i){var r=t(n).attr("type"),a="Step attribute on input type "+r+" is not supported.",o=["text","number","range"],s=new RegExp("\\b"+r+"\\b"),l=r&&!s.test(o.join());if(l)throw new Error(a);return this.optional(n)||e%i===0},equalTo:function(e,n,i){var r=t(i);return this.settings.onfocusout&&r.not(".validate-equalTo-blur").length&&r.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){t(n).valid()}),e===r.val()},remote:function(e,n,i,r){if(this.optional(n))return"dependency-mismatch";r="string"==typeof r&&r||"remote";var a,o,s,l=this.previousValue(n,r);return this.settings.messages[n.name]||(this.settings.messages[n.name]={}),l.originalMessage=l.originalMessage||this.settings.messages[n.name][r],this.settings.messages[n.name][r]=l.message,i="string"==typeof i&&{url:i}||i,s=t.param(t.extend({data:e},i.data)),l.old===s?l.valid:(l.old=s,a=this,this.startRequest(n),o={},o[n.name]=e,t.ajax(t.extend(!0,{mode:"abort",port:"validate"+n.name,dataType:"json",data:o,context:a.currentForm,success:function(t){var i,o,s,u=t===!0||"true"===t;a.settings.messages[n.name][r]=l.originalMessage,u?(s=a.formSubmitted,a.resetInternals(),a.toHide=a.errorsFor(n),a.formSubmitted=s,a.successList.push(n),a.invalid[n.name]=!1,a.showErrors()):(i={},o=t||a.defaultMessage(n,{method:r,parameters:e}),i[n.name]=l.message=o,a.invalid[n.name]=!0,a.showErrors(i)),l.valid=u,a.stopRequest(n,u)}},i)),"pending")}}});var e,n={};t.ajaxPrefilter?t.ajaxPrefilter(function(t,e,i){var r=t.port;"abort"===t.mode&&(n[r]&&n[r].abort(),n[r]=i)}):(e=t.ajax,t.ajax=function(i){var r=("mode"in i?i:t.ajaxSettings).mode,a=("port"in i?i:t.ajaxSettings).port;return"abort"===r?(n[a]&&n[a].abort(),n[a]=e.apply(this,arguments),n[a]):e.apply(this,arguments)})}),function(t){"use strict";if("function"==typeof define&&define.amd)define(["jquery","moment"],t);else if("object"==typeof exports)t(require("jquery"),require("moment"));else{if("undefined"==typeof jQuery)throw"bootstrap-datetimepicker requires jQuery to be loaded first";if("undefined"==typeof moment)throw"bootstrap-datetimepicker requires Moment.js to be loaded first";t(jQuery,moment)}}(function(t,e){"use strict";if(!e)throw new Error("bootstrap-datetimepicker requires Moment.js to be loaded first");var n=function(n,i){var r,a,o,s,l,u={},c=e().startOf("d"),d=c.clone(),h=!0,f=!1,p=!1,g=0,m=[{clsName:"days",navFnc:"M",navStep:1},{clsName:"months",navFnc:"y",navStep:1},{clsName:"years",navFnc:"y",navStep:10},{clsName:"decades",navFnc:"y",navStep:100}],v=["days","months","years","decades"],y=["top","bottom","auto"],x=["left","right","auto"],_=["default","top","bottom"],b={up:38,38:"up",down:40,40:"down",left:37,37:"left",right:39,39:"right",tab:9,9:"tab",escape:27,27:"escape",enter:13,13:"enter",pageUp:33,33:"pageUp",pageDown:34,34:"pageDown",shift:16,16:"shift",control:17,17:"control",space:32,32:"space",t:84,84:"t","delete":46,46:"delete"},w={},S=function(t){if("string"!=typeof t||t.length>1)throw new TypeError("isEnabled expects a single character string parameter");switch(t){case"y":return o.indexOf("Y")!==-1;case"M":return o.indexOf("M")!==-1;case"d":return o.toLowerCase().indexOf("d")!==-1;case"h":case"H":return o.toLowerCase().indexOf("h")!==-1;case"m":return o.indexOf("m")!==-1;case"s":return o.indexOf("s")!==-1;default:return!1}},T=function(){return S("h")||S("m")||S("s")},C=function(){return S("y")||S("M")||S("d")},A=function(){var e=t("
    ").append(t("").append(t("").append(t("").append(t("\s*$/g,oe={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"
    ").addClass("prev").attr("data-action","previous").append(t("").addClass(i.icons.previous))).append(t("").addClass("picker-switch").attr("data-action","pickerSwitch").attr("colspan",i.calendarWeeks?"6":"5")).append(t("").addClass("next").attr("data-action","next").append(t("").addClass(i.icons.next)))),n=t("
    ").attr("colspan",i.calendarWeeks?"8":"7")));return[t("
    ").addClass("datepicker-days").append(t("").addClass("table-condensed").append(e).append(t(""))),t("
    ").addClass("datepicker-months").append(t("
    ").addClass("table-condensed").append(e.clone()).append(n.clone())),t("
    ").addClass("datepicker-years").append(t("
    ").addClass("table-condensed").append(e.clone()).append(n.clone())),t("
    ").addClass("datepicker-decades").append(t("
    ").addClass("table-condensed").append(e.clone()).append(n.clone()))]},k=function(){var e=t(""),n=t(""),r=t("");return S("h")&&(e.append(t(" from table fragments - if ( !jQuery.support.tbody ) { - - // String was a
    ").append(t("").attr({href:"#",tabindex:"-1",title:"Increment Hour"}).addClass("btn").attr("data-action","incrementHours").append(t("").addClass(i.icons.up)))),n.append(t("").append(t("").addClass("timepicker-hour").attr({"data-time-component":"hours",title:"Pick Hour"}).attr("data-action","showHours"))),r.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:"Decrement Hour"}).addClass("btn").attr("data-action","decrementHours").append(t("").addClass(i.icons.down))))),S("m")&&(S("h")&&(e.append(t("").addClass("separator")),n.append(t("").addClass("separator").html(":")),r.append(t("").addClass("separator"))),e.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:"Increment Minute"}).addClass("btn").attr("data-action","incrementMinutes").append(t("").addClass(i.icons.up)))),n.append(t("").append(t("").addClass("timepicker-minute").attr({"data-time-component":"minutes",title:"Pick Minute"}).attr("data-action","showMinutes"))),r.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:"Decrement Minute"}).addClass("btn").attr("data-action","decrementMinutes").append(t("").addClass(i.icons.down))))),S("s")&&(S("m")&&(e.append(t("").addClass("separator")),n.append(t("").addClass("separator").html(":")),r.append(t("").addClass("separator"))),e.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:"Increment Second"}).addClass("btn").attr("data-action","incrementSeconds").append(t("").addClass(i.icons.up)))),n.append(t("").append(t("").addClass("timepicker-second").attr({"data-time-component":"seconds",title:"Pick Second"}).attr("data-action","showSeconds"))),r.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:"Decrement Second"}).addClass("btn").attr("data-action","decrementSeconds").append(t("").addClass(i.icons.down))))),a||(e.append(t("").addClass("separator")),n.append(t("").append(t("").addClass("separator"))),t("
    ").addClass("timepicker-picker").append(t("").addClass("table-condensed").append([e,n,r]))},P=function(){var e=t("
    ").addClass("timepicker-hours").append(t("
    ").addClass("table-condensed")),n=t("
    ").addClass("timepicker-minutes").append(t("
    ").addClass("table-condensed")),i=t("
    ").addClass("timepicker-seconds").append(t("
    ").addClass("table-condensed")),r=[k()];return S("h")&&r.push(e),S("m")&&r.push(n),S("s")&&r.push(i),r},M=function(){var e=[];return i.showTodayButton&&e.push(t("\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
    ", "
    " ], - area: [ 1, "", "" ], - param: [ 1, "", "" ], - thead: [ 1, "
    ").append(t("").attr({"data-action":"today",title:i.tooltips.today}).append(t("").addClass(i.icons.today)))),!i.sideBySide&&C()&&T()&&e.push(t("").append(t("").attr({"data-action":"togglePicker",title:"Select Time"}).append(t("").addClass(i.icons.time)))),i.showClear&&e.push(t("").append(t("").attr({"data-action":"clear",title:i.tooltips.clear}).append(t("").addClass(i.icons.clear)))),i.showClose&&e.push(t("").append(t("").attr({"data-action":"close",title:i.tooltips.close}).append(t("").addClass(i.icons.close)))),t("").addClass("table-condensed").append(t("").append(t("").append(e)))},E=function(){var e=t("
    ").addClass("bootstrap-datetimepicker-widget dropdown-menu"),n=t("
    ").addClass("datepicker").append(A()),r=t("
    ").addClass("timepicker").append(P()),o=t("
      ").addClass("list-unstyled"),s=t("
    • ").addClass("picker-switch"+(i.collapse?" accordion-toggle":"")).append(M());return i.inline&&e.removeClass("dropdown-menu"),a&&e.addClass("usetwentyfour"),S("s")&&!a&&e.addClass("wider"),i.sideBySide&&C()&&T()?(e.addClass("timepicker-sbs"),"top"===i.toolbarPlacement&&e.append(s),e.append(t("
      ").addClass("row").append(n.addClass("col-md-6")).append(r.addClass("col-md-6"))),"bottom"===i.toolbarPlacement&&e.append(s),e):("top"===i.toolbarPlacement&&o.append(s),C()&&o.append(t("
    • ").addClass(i.collapse&&T()?"collapse in":"").append(n)),"default"===i.toolbarPlacement&&o.append(s),T()&&o.append(t("
    • ").addClass(i.collapse&&C()?"collapse":"").append(r)),"bottom"===i.toolbarPlacement&&o.append(s),e.append(o))},D=function(){var e,r={};return e=n.is("input")||i.inline?n.data():n.find("input").data(),e.dateOptions&&e.dateOptions instanceof Object&&(r=t.extend(!0,r,e.dateOptions)),t.each(i,function(t){var n="date"+t.charAt(0).toUpperCase()+t.slice(1);void 0!==e[n]&&(r[t]=e[n])}),r},O=function(){var e,r=(f||n).position(),a=(f||n).offset(),o=i.widgetPositioning.vertical,s=i.widgetPositioning.horizontal;if(i.widgetParent)e=i.widgetParent.append(p);else if(n.is("input"))e=n.after(p).parent();else{if(i.inline)return void(e=n.append(p));e=n,n.children().first().after(p)}if("auto"===o&&(o=a.top+1.5*p.height()>=t(window).height()+t(window).scrollTop()&&p.height()+n.outerHeight()t(window).width()?"right":"left"),"top"===o?p.addClass("top").removeClass("bottom"):p.addClass("bottom").removeClass("top"),"right"===s?p.addClass("pull-right"):p.removeClass("pull-right"),"relative"!==e.css("position")&&(e=e.parents().filter(function(){return"relative"===t(this).css("position")}).first()),0===e.length)throw new Error("datetimepicker component should be placed within a relative positioned container");p.css({top:"top"===o?"auto":r.top+n.outerHeight(),bottom:"top"===o?r.top+n.outerHeight():"auto",left:"left"===s?e===n?0:r.left:"auto",right:"left"===s?"auto":e.outerWidth()-n.outerWidth()-(e===n?0:r.left)})},L=function(t){"dp.change"===t.type&&(t.date&&t.date.isSame(t.oldDate)||!t.date&&!t.oldDate)||n.trigger(t)},I=function(t){"y"===t&&(t="YYYY"),L({type:"dp.update",change:t,viewDate:d.clone()})},N=function(t){p&&(t&&(l=Math.max(g,Math.min(3,l+t))),p.find(".datepicker > div").hide().filter(".datepicker-"+m[l].clsName).show())},R=function(){var e=t("
    "),n=d.clone().startOf("w").startOf("d");for(i.calendarWeeks===!0&&e.append(t(""),i.calendarWeeks&&r.append('"),u.push(r)),a="",n.isBefore(d,"M")&&(a+=" old"),n.isAfter(d,"M")&&(a+=" new"),n.isSame(c,"d")&&!h&&(a+=" active"),H(n,"d")||(a+=" disabled"),n.isSame(e(),"d")&&(a+=" today"),0!==n.day()&&6!==n.day()||(a+=" weekend"),r.append('"),n.add(1,"d");s.find("tbody").empty().append(u),z(),Y(),B()}},q=function(){var e=p.find(".timepicker-hours table"),n=d.clone().startOf("d"),i=[],r=t("");for(d.hour()>11&&!a&&n.hour(12);n.isSame(d,"d")&&(a||d.hour()<12&&n.hour()<12||d.hour()>11);)n.hour()%4===0&&(r=t(""),i.push(r)),r.append('"),n.add(1,"h");e.empty().append(i)},U=function(){for(var e=p.find(".timepicker-minutes table"),n=d.clone().startOf("h"),r=[],a=t(""),o=1===i.stepping?5:i.stepping;d.isSame(n,"h");)n.minute()%(4*o)===0&&(a=t(""),r.push(a)),a.append('"),n.add(o,"m");e.empty().append(r)},W=function(){for(var e=p.find(".timepicker-seconds table"),n=d.clone().startOf("m"),i=[],r=t("");d.isSame(n,"m");)n.second()%20===0&&(r=t(""),i.push(r)),r.append('"),n.add(5,"s");e.empty().append(i)},Q=function(){var t,e,n=p.find(".timepicker span[data-time-component]");a||(t=p.find(".timepicker [data-action=togglePeriod]"),e=c.clone().add(c.hours()>=12?-12:12,"h"),t.text(c.format("A")),H(e,"h")?t.removeClass("disabled"):t.addClass("disabled")),n.filter("[data-time-component=hours]").text(c.format(a?"HH":"hh")),n.filter("[data-time-component=minutes]").text(c.format("mm")),n.filter("[data-time-component=seconds]").text(c.format("ss")),q(),U(),W()},K=function(){p&&(X(),Q())},Z=function(t){var e=h?null:c;return t?(t=t.clone().locale(i.locale),1!==i.stepping&&t.minutes(Math.round(t.minutes()/i.stepping)*i.stepping%60).seconds(0),void(H(t)?(c=t,d=c.clone(),r.val(c.format(o)),n.data("date",c.format(o)),h=!1,K(),L({type:"dp.change",date:c.clone(),oldDate:e})):(i.keepInvalid||r.val(h?"":c.format(o)),L({type:"dp.error",date:t})))):(h=!0,r.val(""),n.data("date",""),L({type:"dp.change",date:!1,oldDate:e}),void K())},J=function(){var e=!1;return p?(p.find(".collapse").each(function(){var n=t(this).data("collapse");return!n||!n.transitioning||(e=!0,!1)}),e?u:(f&&f.hasClass("btn")&&f.toggleClass("active"),p.hide(),t(window).off("resize",O),p.off("click","[data-action]"),p.off("mousedown",!1),p.remove(),p=!1,L({type:"dp.hide",date:c.clone()}),r.blur(),u)):u},tt=function(){Z(null)},et={next:function(){var t=m[l].navFnc;d.add(m[l].navStep,t),X(),I(t)},previous:function(){var t=m[l].navFnc;d.subtract(m[l].navStep,t),X(),I(t)},pickerSwitch:function(){N(1)},selectMonth:function(e){var n=t(e.target).closest("tbody").find("span").index(t(e.target));d.month(n),l===g?(Z(c.clone().year(d.year()).month(d.month())),i.inline||J()):(N(-1),X()),I("M")},selectYear:function(e){var n=parseInt(t(e.target).text(),10)||0;d.year(n),l===g?(Z(c.clone().year(d.year())),i.inline||J()):(N(-1),X()),I("YYYY")},selectDecade:function(e){var n=parseInt(t(e.target).data("selection"),10)||0;d.year(n),l===g?(Z(c.clone().year(d.year())),i.inline||J()):(N(-1),X()),I("YYYY")},selectDay:function(e){var n=d.clone();t(e.target).is(".old")&&n.subtract(1,"M"),t(e.target).is(".new")&&n.add(1,"M"),Z(n.date(parseInt(t(e.target).text(),10))),T()||i.keepOpen||i.inline||J()},incrementHours:function(){var t=c.clone().add(1,"h");H(t,"h")&&Z(t)},incrementMinutes:function(){var t=c.clone().add(i.stepping,"m");H(t,"m")&&Z(t)},incrementSeconds:function(){var t=c.clone().add(1,"s");H(t,"s")&&Z(t)},decrementHours:function(){var t=c.clone().subtract(1,"h");H(t,"h")&&Z(t)},decrementMinutes:function(){var t=c.clone().subtract(i.stepping,"m");H(t,"m")&&Z(t)},decrementSeconds:function(){var t=c.clone().subtract(1,"s");H(t,"s")&&Z(t)},togglePeriod:function(){Z(c.clone().add(c.hours()>=12?-12:12,"h"))},togglePicker:function(e){var n,r=t(e.target),a=r.closest("ul"),o=a.find(".in"),s=a.find(".collapse:not(.in)");if(o&&o.length){if(n=o.data("collapse"),n&&n.transitioning)return;o.collapse?(o.collapse("hide"),s.collapse("show")):(o.removeClass("in"),s.addClass("in")),r.is("span")?r.toggleClass(i.icons.time+" "+i.icons.date):r.find("span").toggleClass(i.icons.time+" "+i.icons.date)}},showPicker:function(){p.find(".timepicker > div:not(.timepicker-picker)").hide(),p.find(".timepicker .timepicker-picker").show()},showHours:function(){p.find(".timepicker .timepicker-picker").hide(),p.find(".timepicker .timepicker-hours").show()},showMinutes:function(){p.find(".timepicker .timepicker-picker").hide(),p.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){p.find(".timepicker .timepicker-picker").hide(),p.find(".timepicker .timepicker-seconds").show()},selectHour:function(e){var n=parseInt(t(e.target).text(),10);a||(c.hours()>=12?12!==n&&(n+=12):12===n&&(n=0)),Z(c.clone().hours(n)),et.showPicker.call(u)},selectMinute:function(e){Z(c.clone().minutes(parseInt(t(e.target).text(),10))),et.showPicker.call(u)},selectSecond:function(e){Z(c.clone().seconds(parseInt(t(e.target).text(),10))),et.showPicker.call(u)},clear:tt,today:function(){H(e(),"d")&&Z(e())},close:J},nt=function(e){return!t(e.currentTarget).is(".disabled")&&(et[t(e.currentTarget).data("action")].apply(u,arguments),!1)},it=function(){var n,a={year:function(t){return t.month(0).date(1).hours(0).seconds(0).minutes(0)},month:function(t){return t.date(1).hours(0).seconds(0).minutes(0)},day:function(t){return t.hours(0).seconds(0).minutes(0)},hour:function(t){return t.seconds(0).minutes(0)},minute:function(t){return t.seconds(0)}};return r.prop("disabled")||!i.ignoreReadonly&&r.prop("readonly")||p?u:(void 0!==r.val()&&0!==r.val().trim().length?Z(at(r.val().trim())):i.useCurrent&&h&&(r.is("input")&&0===r.val().trim().length||i.inline)&&(n=e(),"string"==typeof i.useCurrent&&(n=a[i.useCurrent](n)),Z(n)),p=E(),R(),$(),p.find(".timepicker-hours").hide(),p.find(".timepicker-minutes").hide(),p.find(".timepicker-seconds").hide(),K(),N(),t(window).on("resize",O),p.on("click","[data-action]",nt),p.on("mousedown",!1),f&&f.hasClass("btn")&&f.toggleClass("active"),p.show(),O(),i.focusOnShow&&!r.is(":focus")&&r.focus(),L({type:"dp.show"}),u)},rt=function(){return p?J():it()},at=function(t){return t=void 0===i.parseInputDate?e.isMoment(t)||t instanceof Date?e(t):e(t,s,i.useStrict):i.parseInputDate(t),t.locale(i.locale),t},ot=function(t){var e,n,r,a,o=null,s=[],l={},c=t.which,d="p";w[c]=d;for(e in w)w.hasOwnProperty(e)&&w[e]===d&&(s.push(e),parseInt(e,10)!==c&&(l[e]=!0));for(e in i.keyBinds)if(i.keyBinds.hasOwnProperty(e)&&"function"==typeof i.keyBinds[e]&&(r=e.split(" "),r.length===s.length&&b[c]===r[r.length-1])){for(a=!0,n=r.length-2;n>=0;n--)if(!(b[r[n]]in l)){a=!1;break}if(a){o=i.keyBinds[e];break}}o&&(o.call(u,p),t.stopPropagation(),t.preventDefault())},st=function(t){w[t.which]="r",t.stopPropagation(),t.preventDefault()},lt=function(e){var n=t(e.target).val().trim(),i=n?at(n):null;return Z(i),e.stopImmediatePropagation(),!1},ut=function(){r.on({change:lt,blur:i.debug?"":J,keydown:ot,keyup:st,focus:i.allowInputToggle?it:""}),n.is("input")?r.on({focus:it}):f&&(f.on("click",rt),f.on("mousedown",!1))},ct=function(){r.off({change:lt,blur:blur,keydown:ot,keyup:st,focus:i.allowInputToggle?J:""}),n.is("input")?r.off({focus:it}):f&&(f.off("click",rt),f.off("mousedown",!1))},dt=function(e){var n={};return t.each(e,function(){var t=at(this);t.isValid()&&(n[t.format("YYYY-MM-DD")]=!0)}),!!Object.keys(n).length&&n},ht=function(e){var n={};return t.each(e,function(){n[this]=!0}),!!Object.keys(n).length&&n},ft=function(){var t=i.format||"L LT";o=t.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(t){var e=c.localeData().longDateFormat(t)||t;return e.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(t){return c.localeData().longDateFormat(t)||t})}),s=i.extraFormats?i.extraFormats.slice():[],s.indexOf(t)<0&&s.indexOf(o)<0&&s.push(o),a=o.toLowerCase().indexOf("a")<1&&o.replace(/\[.*?\]/g,"").indexOf("h")<1,S("y")&&(g=2),S("M")&&(g=1),S("d")&&(g=0),l=Math.max(g,l),h||Z(c)};if(u.destroy=function(){J(),ct(),n.removeData("DateTimePicker"),n.removeData("date")},u.toggle=rt,u.show=it,u.hide=J,u.disable=function(){return J(),f&&f.hasClass("btn")&&f.addClass("disabled"),r.prop("disabled",!0),u},u.enable=function(){return f&&f.hasClass("btn")&&f.removeClass("disabled"),r.prop("disabled",!1),u},u.ignoreReadonly=function(t){if(0===arguments.length)return i.ignoreReadonly;if("boolean"!=typeof t)throw new TypeError("ignoreReadonly () expects a boolean parameter");return i.ignoreReadonly=t,u},u.options=function(e){if(0===arguments.length)return t.extend(!0,{},i);if(!(e instanceof Object))throw new TypeError("options() options parameter should be an object");return t.extend(!0,i,e),t.each(i,function(t,e){if(void 0===u[t])throw new TypeError("option "+t+" is not recognized!");u[t](e)}),u},u.date=function(t){if(0===arguments.length)return h?null:c.clone();if(!(null===t||"string"==typeof t||e.isMoment(t)||t instanceof Date))throw new TypeError("date() parameter must be one of [null, string, moment or Date]");return Z(null===t?null:at(t)),u},u.format=function(t){if(0===arguments.length)return i.format;if("string"!=typeof t&&("boolean"!=typeof t||t!==!1))throw new TypeError("format() expects a sting or boolean:false parameter "+t);return i.format=t,o&&ft(),u},u.dayViewHeaderFormat=function(t){if(0===arguments.length)return i.dayViewHeaderFormat;if("string"!=typeof t)throw new TypeError("dayViewHeaderFormat() expects a string parameter");return i.dayViewHeaderFormat=t,u},u.extraFormats=function(t){if(0===arguments.length)return i.extraFormats;if(t!==!1&&!(t instanceof Array))throw new TypeError("extraFormats() expects an array or false parameter");return i.extraFormats=t,s&&ft(),u},u.disabledDates=function(e){if(0===arguments.length)return i.disabledDates?t.extend({},i.disabledDates):i.disabledDates;if(!e)return i.disabledDates=!1,K(),u;if(!(e instanceof Array))throw new TypeError("disabledDates() expects an array parameter");return i.disabledDates=dt(e),i.enabledDates=!1,K(),u},u.enabledDates=function(e){if(0===arguments.length)return i.enabledDates?t.extend({},i.enabledDates):i.enabledDates;if(!e)return i.enabledDates=!1,K(),u;if(!(e instanceof Array))throw new TypeError("enabledDates() expects an array parameter");return i.enabledDates=dt(e),i.disabledDates=!1,K(),u},u.daysOfWeekDisabled=function(t){if(0===arguments.length)return i.daysOfWeekDisabled.splice(0);if("boolean"==typeof t&&!t)return i.daysOfWeekDisabled=!1,K(),u;if(!(t instanceof Array))throw new TypeError("daysOfWeekDisabled() expects an array parameter");if(i.daysOfWeekDisabled=t.reduce(function(t,e){return e=parseInt(e,10),e>6||e<0||isNaN(e)?t:(t.indexOf(e)===-1&&t.push(e),t)},[]).sort(),i.useCurrent&&!i.keepInvalid){for(var e=0;!H(c,"d");){if(c.add(1,"d"),7===e)throw"Tried 7 times to find a valid date";e++}Z(c)}return K(),u},u.maxDate=function(t){if(0===arguments.length)return i.maxDate?i.maxDate.clone():i.maxDate;if("boolean"==typeof t&&t===!1)return i.maxDate=!1,K(),u;"string"==typeof t&&("now"!==t&&"moment"!==t||(t=e()));var n=at(t);if(!n.isValid())throw new TypeError("maxDate() Could not parse date parameter: "+t);if(i.minDate&&n.isBefore(i.minDate))throw new TypeError("maxDate() date parameter is before options.minDate: "+n.format(o));return i.maxDate=n,i.useCurrent&&!i.keepInvalid&&c.isAfter(t)&&Z(i.maxDate),d.isAfter(n)&&(d=n.clone().subtract(i.stepping,"m")),K(),u},u.minDate=function(t){if(0===arguments.length)return i.minDate?i.minDate.clone():i.minDate;if("boolean"==typeof t&&t===!1)return i.minDate=!1,K(),u;"string"==typeof t&&("now"!==t&&"moment"!==t||(t=e()));var n=at(t);if(!n.isValid())throw new TypeError("minDate() Could not parse date parameter: "+t);if(i.maxDate&&n.isAfter(i.maxDate))throw new TypeError("minDate() date parameter is after options.maxDate: "+n.format(o));return i.minDate=n,i.useCurrent&&!i.keepInvalid&&c.isBefore(t)&&Z(i.minDate),d.isBefore(n)&&(d=n.clone().add(i.stepping,"m")),K(),u},u.defaultDate=function(t){if(0===arguments.length)return i.defaultDate?i.defaultDate.clone():i.defaultDate;if(!t)return i.defaultDate=!1,u;"string"==typeof t&&("now"!==t&&"moment"!==t||(t=e()));var n=at(t);if(!n.isValid())throw new TypeError("defaultDate() Could not parse date parameter: "+t);if(!H(n))throw new TypeError("defaultDate() date passed is invalid according to component setup validations");return i.defaultDate=n,(i.defaultDate&&i.inline||""===r.val().trim()&&void 0===r.attr("placeholder"))&&Z(i.defaultDate),u},u.locale=function(t){if(0===arguments.length)return i.locale;if(!e.localeData(t))throw new TypeError("locale() locale "+t+" is not loaded from moment locales!");return i.locale=t,c.locale(i.locale),d.locale(i.locale),o&&ft(),p&&(J(),it()),u},u.stepping=function(t){return 0===arguments.length?i.stepping:(t=parseInt(t,10),(isNaN(t)||t<1)&&(t=1),i.stepping=t,u)},u.useCurrent=function(t){var e=["year","month","day","hour","minute"];if(0===arguments.length)return i.useCurrent;if("boolean"!=typeof t&&"string"!=typeof t)throw new TypeError("useCurrent() expects a boolean or string parameter");if("string"==typeof t&&e.indexOf(t.toLowerCase())===-1)throw new TypeError("useCurrent() expects a string parameter of "+e.join(", "));return i.useCurrent=t,u},u.collapse=function(t){if(0===arguments.length)return i.collapse;if("boolean"!=typeof t)throw new TypeError("collapse() expects a boolean parameter");return i.collapse===t?u:(i.collapse=t,p&&(J(),it()),u)},u.icons=function(e){if(0===arguments.length)return t.extend({},i.icons);if(!(e instanceof Object))throw new TypeError("icons() expects parameter to be an Object");return t.extend(i.icons,e),p&&(J(),it()),u},u.tooltips=function(e){if(0===arguments.length)return t.extend({},i.tooltips);if(!(e instanceof Object))throw new TypeError("tooltips() expects parameter to be an Object");return t.extend(i.tooltips,e),p&&(J(),it()),u},u.useStrict=function(t){if(0===arguments.length)return i.useStrict;if("boolean"!=typeof t)throw new TypeError("useStrict() expects a boolean parameter");return i.useStrict=t,u},u.sideBySide=function(t){if(0===arguments.length)return i.sideBySide;if("boolean"!=typeof t)throw new TypeError("sideBySide() expects a boolean parameter");return i.sideBySide=t,p&&(J(),it()),u},u.viewMode=function(t){if(0===arguments.length)return i.viewMode;if("string"!=typeof t)throw new TypeError("viewMode() expects a string parameter");if(v.indexOf(t)===-1)throw new TypeError("viewMode() parameter must be one of ("+v.join(", ")+") value");return i.viewMode=t,l=Math.max(v.indexOf(t),g),N(),u},u.toolbarPlacement=function(t){if(0===arguments.length)return i.toolbarPlacement;if("string"!=typeof t)throw new TypeError("toolbarPlacement() expects a string parameter");if(_.indexOf(t)===-1)throw new TypeError("toolbarPlacement() parameter must be one of ("+_.join(", ")+") value");return i.toolbarPlacement=t,p&&(J(),it()),u},u.widgetPositioning=function(e){if(0===arguments.length)return t.extend({},i.widgetPositioning);if("[object Object]"!=={}.toString.call(e))throw new TypeError("widgetPositioning() expects an object variable");if(e.horizontal){if("string"!=typeof e.horizontal)throw new TypeError("widgetPositioning() horizontal variable must be a string");if(e.horizontal=e.horizontal.toLowerCase(),x.indexOf(e.horizontal)===-1)throw new TypeError("widgetPositioning() expects horizontal parameter to be one of ("+x.join(", ")+")");i.widgetPositioning.horizontal=e.horizontal}if(e.vertical){if("string"!=typeof e.vertical)throw new TypeError("widgetPositioning() vertical variable must be a string");if(e.vertical=e.vertical.toLowerCase(),y.indexOf(e.vertical)===-1)throw new TypeError("widgetPositioning() expects vertical parameter to be one of ("+y.join(", ")+")");i.widgetPositioning.vertical=e.vertical}return K(),u},u.calendarWeeks=function(t){if(0===arguments.length)return i.calendarWeeks;if("boolean"!=typeof t)throw new TypeError("calendarWeeks() expects parameter to be a boolean value");return i.calendarWeeks=t,K(),u},u.showTodayButton=function(t){if(0===arguments.length)return i.showTodayButton;if("boolean"!=typeof t)throw new TypeError("showTodayButton() expects a boolean parameter");return i.showTodayButton=t,p&&(J(),it()),u},u.showClear=function(t){if(0===arguments.length)return i.showClear;if("boolean"!=typeof t)throw new TypeError("showClear() expects a boolean parameter");return i.showClear=t,p&&(J(),it()),u},u.widgetParent=function(e){if(0===arguments.length)return i.widgetParent;if("string"==typeof e&&(e=t(e)),null!==e&&"string"!=typeof e&&!(e instanceof t))throw new TypeError("widgetParent() expects a string or a jQuery object parameter");return i.widgetParent=e,p&&(J(),it()),u},u.keepOpen=function(t){if(0===arguments.length)return i.keepOpen;if("boolean"!=typeof t)throw new TypeError("keepOpen() expects a boolean parameter");return i.keepOpen=t,u},u.focusOnShow=function(t){if(0===arguments.length)return i.focusOnShow;if("boolean"!=typeof t)throw new TypeError("focusOnShow() expects a boolean parameter");return i.focusOnShow=t,u},u.inline=function(t){if(0===arguments.length)return i.inline;if("boolean"!=typeof t)throw new TypeError("inline() expects a boolean parameter");return i.inline=t,u},u.clear=function(){return tt(),u},u.keyBinds=function(t){return i.keyBinds=t,u},u.debug=function(t){if("boolean"!=typeof t)throw new TypeError("debug() expects a boolean parameter");return i.debug=t,u},u.allowInputToggle=function(t){if(0===arguments.length)return i.allowInputToggle;if("boolean"!=typeof t)throw new TypeError("allowInputToggle() expects a boolean parameter");return i.allowInputToggle=t,u},u.showClose=function(t){if(0===arguments.length)return i.showClose;if("boolean"!=typeof t)throw new TypeError("showClose() expects a boolean parameter");return i.showClose=t,u},u.keepInvalid=function(t){if(0===arguments.length)return i.keepInvalid;if("boolean"!=typeof t)throw new TypeError("keepInvalid() expects a boolean parameter");return i.keepInvalid=t,u},u.datepickerInput=function(t){if(0===arguments.length)return i.datepickerInput;if("string"!=typeof t)throw new TypeError("datepickerInput() expects a string parameter");return i.datepickerInput=t,u},u.parseInputDate=function(t){if(0===arguments.length)return i.parseInputDate;if("function"!=typeof t)throw new TypeError("parseInputDate() sholud be as function");return i.parseInputDate=t,u},u.disabledTimeIntervals=function(e){if(0===arguments.length)return i.disabledTimeIntervals?t.extend({},i.disabledTimeIntervals):i.disabledTimeIntervals;if(!e)return i.disabledTimeIntervals=!1,K(),u;if(!(e instanceof Array))throw new TypeError("disabledTimeIntervals() expects an array parameter");return i.disabledTimeIntervals=e,K(),u},u.disabledHours=function(e){if(0===arguments.length)return i.disabledHours?t.extend({},i.disabledHours):i.disabledHours;if(!e)return i.disabledHours=!1,K(),u;if(!(e instanceof Array))throw new TypeError("disabledHours() expects an array parameter");if(i.disabledHours=ht(e),i.enabledHours=!1,i.useCurrent&&!i.keepInvalid){for(var n=0;!H(c,"h");){if(c.add(1,"h"),24===n)throw"Tried 24 times to find a valid date";n++}Z(c)}return K(),u},u.enabledHours=function(e){if(0===arguments.length)return i.enabledHours?t.extend({},i.enabledHours):i.enabledHours;if(!e)return i.enabledHours=!1,K(),u;if(!(e instanceof Array))throw new TypeError("enabledHours() expects an array parameter");if(i.enabledHours=ht(e),i.disabledHours=!1,i.useCurrent&&!i.keepInvalid){for(var n=0;!H(c,"h");){if(c.add(1,"h"),24===n)throw"Tried 24 times to find a valid date";n++}Z(c)}return K(),u},u.viewDate=function(t){if(0===arguments.length)return d.clone();if(!t)return d=c.clone(),u;if(!("string"==typeof t||e.isMoment(t)||t instanceof Date))throw new TypeError("viewDate() parameter must be one of [string, moment or Date]");return d=at(t),I(),u},n.is("input"))r=n;else if(r=n.find(i.datepickerInput),0===r.size())r=n.find("input");else if(!r.is("input"))throw new Error('CSS class "'+i.datepickerInput+'" cannot be applied to non input element');if(n.hasClass("input-group")&&(f=0===n.find(".datepickerbutton").size()?n.find(".input-group-addon"):n.find(".datepickerbutton")),!i.inline&&!r.is("input"))throw new Error("Could not initialize DateTimePicker without an input element");return t.extend(!0,i,D()),u.options(i),ft(),ut(),r.prop("disabled")&&u.disable(),r.is("input")&&0!==r.val().trim().length?Z(at(r.val().trim())):i.defaultDate&&void 0===r.attr("placeholder")&&Z(i.defaultDate),i.inline&&it(),u};t.fn.datetimepicker=function(e){return this.each(function(){var i=t(this);i.data("DateTimePicker")||(e=t.extend(!0,{},t.fn.datetimepicker.defaults,e),i.data("DateTimePicker",n(i,e)))})},t.fn.datetimepicker.defaults={format:!1,dayViewHeaderFormat:"MMMM YYYY",extraFormats:!1,stepping:1,minDate:!1,maxDate:!1,useCurrent:!0,collapse:!0,locale:e.locale(),defaultDate:!1,disabledDates:!1,enabledDates:!1,icons:{time:"glyphicon glyphicon-time",date:"glyphicon glyphicon-calendar",up:"glyphicon glyphicon-chevron-up",down:"glyphicon glyphicon-chevron-down",previous:"glyphicon glyphicon-chevron-left",next:"glyphicon glyphicon-chevron-right",today:"glyphicon glyphicon-screenshot",clear:"glyphicon glyphicon-trash",close:"glyphicon glyphicon-remove"},tooltips:{today:"Go to today",clear:"Clear selection",close:"Close the picker",selectMonth:"Select Month",prevMonth:"Previous Month",nextMonth:"Next Month",selectYear:"Select Year",prevYear:"Previous Year",nextYear:"Next Year",selectDecade:"Select Decade",prevDecade:"Previous Decade",nextDecade:"Next Decade",prevCentury:"Previous Century",nextCentury:"Next Century"},useStrict:!1,sideBySide:!1,daysOfWeekDisabled:!1,calendarWeeks:!1,viewMode:"days",toolbarPlacement:"default",showTodayButton:!1,showClear:!1,showClose:!1,widgetPositioning:{horizontal:"auto",vertical:"auto"},widgetParent:null,ignoreReadonly:!1,keepOpen:!1,focusOnShow:!0,inline:!1,keepInvalid:!1,datepickerInput:".datepickerinput",keyBinds:{up:function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")?this.date(n.clone().subtract(7,"d")):this.date(n.clone().add(this.stepping(),"m"))}},down:function(t){if(!t)return void this.show();var n=this.date()||e();t.find(".datepicker").is(":visible")?this.date(n.clone().add(7,"d")):this.date(n.clone().subtract(this.stepping(),"m"))},"control up":function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")?this.date(n.clone().subtract(1,"y")):this.date(n.clone().add(1,"h"))}},"control down":function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")?this.date(n.clone().add(1,"y")):this.date(n.clone().subtract(1,"h"))}},left:function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")&&this.date(n.clone().subtract(1,"d"))}},right:function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")&&this.date(n.clone().add(1,"d"))}},pageUp:function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")&&this.date(n.clone().subtract(1,"M"))}},pageDown:function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")&&this.date(n.clone().add(1,"M"))}},enter:function(){this.hide()},escape:function(){this.hide()},"control space":function(t){t.find(".timepicker").is(":visible")&&t.find('.btn[data-action="togglePeriod"]').click()},t:function(){this.date(e())},"delete":function(){this.clear()}},debug:!1,allowInputToggle:!1,disabledTimeIntervals:!1,disabledHours:!1,enabledHours:!1,viewDate:!1}}),function(t,e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e(require("jquery")):t.bootbox=e(t.jQuery)}(this,function t(e,n){"use strict";function i(t){var e=m[p.locale];return e?e[t]:m.en[t]}function r(t,n,i){t.stopPropagation(),t.preventDefault();var r=e.isFunction(i)&&i.call(n,t)===!1;r||n.modal("hide")}function a(t){var e,n=0;for(e in t)n++;return n}function o(t,n){var i=0;e.each(t,function(t,e){n(t,e,i++)})}function s(t){var n,i;if("object"!=typeof t)throw new Error("Please supply an object of options");if(!t.message)throw new Error("Please specify a message");return t=e.extend({},p,t),t.buttons||(t.buttons={}),n=t.buttons,i=a(n),o(n,function(t,r,a){if(e.isFunction(r)&&(r=n[t]={callback:r}),"object"!==e.type(r))throw new Error("button with key "+t+" must be an object");r.label||(r.label=t),r.className||(i<=2&&a===i-1?r.className="btn-primary":r.className="btn-default")}),t}function l(t,e){var n=t.length,i={};if(n<1||n>2)throw new Error("Invalid argument length");return 2===n||"string"==typeof t[0]?(i[e[0]]=t[0],i[e[1]]=t[1]):i=t[0],i}function u(t,n,i){return e.extend(!0,{},t,l(n,i))}function c(t,e,n,i){var r={className:"bootbox-"+t,buttons:d.apply(null,e)};return h(u(r,i,n),e)}function d(){for(var t={},e=0,n=arguments.length;e",header:"",footer:"",closeButton:"",form:"
    ",inputs:{text:"",textarea:"",email:"",select:"",checkbox:"
    ",date:"",time:"",number:"",password:""}},p={locale:"en",backdrop:"static",animate:!0,className:null,closeButton:!0,show:!0,container:"body"},g={};g.alert=function(){var t;if(t=c("alert",["ok"],["message","callback"],arguments),t.callback&&!e.isFunction(t.callback))throw new Error("alert requires callback property to be a function when provided");return t.buttons.ok.callback=t.onEscape=function(){return!e.isFunction(t.callback)||t.callback.call(this)},g.dialog(t)},g.confirm=function(){var t;if(t=c("confirm",["cancel","confirm"],["message","callback"],arguments),t.buttons.cancel.callback=t.onEscape=function(){return t.callback.call(this,!1)},t.buttons.confirm.callback=function(){return t.callback.call(this,!0)},!e.isFunction(t.callback))throw new Error("confirm requires a callback");return g.dialog(t)},g.prompt=function(){var t,i,r,a,s,l,c;if(a=e(f.form),i={className:"bootbox-prompt",buttons:d("cancel","confirm"),value:"",inputType:"text"},t=h(u(i,arguments,["title","callback"]),["cancel","confirm"]),l=t.show===n||t.show,t.message=a,t.buttons.cancel.callback=t.onEscape=function(){return t.callback.call(this,null)},t.buttons.confirm.callback=function(){var n;switch(t.inputType){case"text":case"textarea":case"email":case"select":case"date":case"time":case"number":case"password":n=s.val();break;case"checkbox":var i=s.find("input:checked");n=[],o(i,function(t,i){n.push(e(i).val())})}return t.callback.call(this,n)},t.show=!1,!t.title)throw new Error("prompt requires a title");if(!e.isFunction(t.callback))throw new Error("prompt requires a callback");if(!f.inputs[t.inputType])throw new Error("invalid prompt type");switch(s=e(f.inputs[t.inputType]),t.inputType){case"text":case"textarea":case"email":case"date":case"time":case"number":case"password":s.val(t.value);break;case"select":var p={};if(c=t.inputOptions||[],!e.isArray(c))throw new Error("Please pass an array of input options");if(!c.length)throw new Error("prompt with select requires options");o(c,function(t,i){var r=s;if(i.value===n||i.text===n)throw new Error("given options in wrong format");i.group&&(p[i.group]||(p[i.group]=e("").attr("label",i.group)),r=p[i.group]),r.append("")}),o(p,function(t,e){s.append(e)}),s.val(t.value);break;case"checkbox":var m=e.isArray(t.value)?t.value:[t.value];if(c=t.inputOptions||[],!c.length)throw new Error("prompt with checkbox requires options");if(!c[0].value||!c[0].text)throw new Error("given options in wrong format");s=e("
    "),o(c,function(n,i){var r=e(f.inputs[t.inputType]);r.find("input").attr("value",i.value),r.find("label").append(i.text),o(m,function(t,e){e===i.value&&r.find("input").prop("checked",!0)}),s.append(r)})}return t.placeholder&&s.attr("placeholder",t.placeholder),t.pattern&&s.attr("pattern",t.pattern),t.maxlength&&s.attr("maxlength",t.maxlength),a.append(s),a.on("submit",function(t){t.preventDefault(),t.stopPropagation(),r.find(".btn-primary").click()}),r=g.dialog(t),r.off("shown.bs.modal"),r.on("shown.bs.modal",function(){s.focus()}),l===!0&&r.modal("show"),r},g.dialog=function(t){t=s(t);var i=e(f.dialog),a=i.find(".modal-dialog"),l=i.find(".modal-body"),u=t.buttons,c="",d={onEscape:t.onEscape};if(e.fn.modal===n)throw new Error("$.fn.modal is not defined; please double check you have included the Bootstrap JavaScript library. See http://getbootstrap.com/javascript/ for more details.");if(o(u,function(t,e){c+="",d[t]=e.callback}),l.find(".bootbox-body").html(t.message),t.animate===!0&&i.addClass("fade"),t.className&&i.addClass(t.className),"large"===t.size?a.addClass("modal-lg"):"small"===t.size&&a.addClass("modal-sm"),t.title&&l.before(f.header),t.closeButton){var h=e(f.closeButton);t.title?i.find(".modal-header").prepend(h):h.css("margin-top","-10px").prependTo(l); -}return t.title&&i.find(".modal-title").html(t.title),c.length&&(l.after(f.footer),i.find(".modal-footer").html(c)),i.on("hidden.bs.modal",function(t){t.target===this&&i.remove()}),i.on("shown.bs.modal",function(){i.find(".btn-primary:first").focus()}),"static"!==t.backdrop&&i.on("click.dismiss.bs.modal",function(t){i.children(".modal-backdrop").length&&(t.currentTarget=i.children(".modal-backdrop").get(0)),t.target===t.currentTarget&&i.trigger("escape.close.bb")}),i.on("escape.close.bb",function(t){d.onEscape&&r(t,i,d.onEscape)}),i.on("click",".modal-footer button",function(t){var n=e(this).data("bb-handler");r(t,i,d[n])}),i.on("click",".bootbox-close-button",function(t){r(t,i,d.onEscape)}),i.on("keyup",function(t){27===t.which&&i.trigger("escape.close.bb")}),e(t.container).append(i),i.modal({backdrop:!!t.backdrop&&"static",keyboard:!1,show:!1}),t.show&&i.modal("show"),i},g.setDefaults=function(){var t={};2===arguments.length?t[arguments[0]]=arguments[1]:t=arguments[0],e.extend(p,t)},g.hideAll=function(){return e(".bootbox").modal("hide"),g};var m={bg_BG:{OK:"Ок",CANCEL:"Отказ",CONFIRM:"Потвърждавам"},br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},cs:{OK:"OK",CANCEL:"Zrušit",CONFIRM:"Potvrdit"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},el:{OK:"Εντάξει",CANCEL:"Ακύρωση",CONFIRM:"Επιβεβαίωση"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},et:{OK:"OK",CANCEL:"Katkesta",CONFIRM:"OK"},fa:{OK:"قبول",CANCEL:"لغو",CONFIRM:"تایید"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},he:{OK:"אישור",CANCEL:"ביטול",CONFIRM:"אישור"},hu:{OK:"OK",CANCEL:"Mégsem",CONFIRM:"Megerősít"},hr:{OK:"OK",CANCEL:"Odustani",CONFIRM:"Potvrdi"},id:{OK:"OK",CANCEL:"Batal",CONFIRM:"OK"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},ja:{OK:"OK",CANCEL:"キャンセル",CONFIRM:"確認"},lt:{OK:"Gerai",CANCEL:"Atšaukti",CONFIRM:"Patvirtinti"},lv:{OK:"Labi",CANCEL:"Atcelt",CONFIRM:"Apstiprināt"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},no:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},pt:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Confirmar"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},sq:{OK:"OK",CANCEL:"Anulo",CONFIRM:"Prano"},sv:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},th:{OK:"ตกลง",CANCEL:"ยกเลิก",CONFIRM:"ยืนยัน"},tr:{OK:"Tamam",CANCEL:"İptal",CONFIRM:"Onayla"},zh_CN:{OK:"OK",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return g.addLocale=function(t,n){return e.each(["OK","CANCEL","CONFIRM"],function(t,e){if(!n[e])throw new Error("Please supply a translation for '"+e+"'")}),m[t]={OK:n.OK,CANCEL:n.CANCEL,CONFIRM:n.CONFIRM},g},g.removeLocale=function(t){return delete m[t],g},g.setLocale=function(t){return g.setDefaults("locale",t)},g.init=function(n){return t(n||e)},g}),!function(){function t(t){return t&&(t.ownerDocument||t.document||t).documentElement}function e(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}function n(t,e){return te?1:t>=e?0:NaN}function i(t){return null===t?NaN:+t}function r(t){return!isNaN(t)}function a(t){return{left:function(e,n,i,r){for(arguments.length<3&&(i=0),arguments.length<4&&(r=e.length);i>>1;t(e[a],n)<0?i=a+1:r=a}return i},right:function(e,n,i,r){for(arguments.length<3&&(i=0),arguments.length<4&&(r=e.length);i>>1;t(e[a],n)>0?r=a:i=a+1}return i}}}function o(t){return t.length}function s(t){for(var e=1;t*e%1;)e*=10;return e}function l(t,e){for(var n in e)Object.defineProperty(t.prototype,n,{value:e[n],enumerable:!1})}function u(){this._=Object.create(null)}function c(t){return(t+="")===bo||t[0]===wo?wo+t:t}function d(t){return(t+="")[0]===wo?t.slice(1):t}function h(t){return c(t)in this._}function f(t){return(t=c(t))in this._&&delete this._[t]}function p(){var t=[];for(var e in this._)t.push(d(e));return t}function g(){var t=0;for(var e in this._)++t;return t}function m(){for(var t in this._)return!1;return!0}function v(){this._=Object.create(null)}function y(t){return t}function x(t,e,n){return function(){var i=n.apply(e,arguments);return i===e?t:i}}function _(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var n=0,i=So.length;n=e&&(e=r+1);!(o=s[e])&&++e0&&(t=t.slice(0,s));var u=Lo.get(t);return u&&(t=u,l=U),s?e?r:i:e?b:a}function q(t,e){return function(n){var i=so.event;so.event=n,e[0]=this.__data__;try{t.apply(this,e)}finally{so.event=i}}}function U(t,e){var n=q(t,e);return function(t){var e=this,i=t.relatedTarget;i&&(i===e||8&i.compareDocumentPosition(e))||n.call(e,t)}}function W(n){var i=".dragsuppress-"+ ++No,r="click"+i,a=so.select(e(n)).on("touchmove"+i,T).on("dragstart"+i,T).on("selectstart"+i,T);if(null==Io&&(Io=!("onselectstart"in n)&&_(n.style,"userSelect")),Io){var o=t(n).style,s=o[Io];o[Io]="none"}return function(t){if(a.on(i,null),Io&&(o[Io]=s),t){var e=function(){a.on(r,null)};a.on(r,function(){T(),e()},!0),setTimeout(e,0)}}}function Q(t,n){n.changedTouches&&(n=n.changedTouches[0]);var i=t.ownerSVGElement||t;if(i.createSVGPoint){var r=i.createSVGPoint();if(Ro<0){var a=e(t);if(a.scrollX||a.scrollY){i=so.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=i[0][0].getScreenCTM();Ro=!(o.f||o.e),i.remove()}}return Ro?(r.x=n.pageX,r.y=n.pageY):(r.x=n.clientX,r.y=n.clientY),r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var s=t.getBoundingClientRect();return[n.clientX-s.left-t.clientLeft,n.clientY-s.top-t.clientTop]}function K(){return so.event.changedTouches[0].identifier}function Z(t){return t>0?1:t<0?-1:0}function J(t,e,n){return(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0])}function tt(t){return t>1?0:t<-1?jo:Math.acos(t)}function et(t){return t>1?$o:t<-1?-$o:Math.asin(t)}function nt(t){return((t=Math.exp(t))-1/t)/2}function it(t){return((t=Math.exp(t))+1/t)/2}function rt(t){return((t=Math.exp(2*t))-1)/(t+1)}function at(t){return(t=Math.sin(t/2))*t}function ot(){}function st(t,e,n){return this instanceof st?(this.h=+t,this.s=+e,void(this.l=+n)):arguments.length<2?t instanceof st?new st(t.h,t.s,t.l):bt(""+t,wt,st):new st(t,e,n)}function lt(t,e,n){function i(t){return t>360?t-=360:t<0&&(t+=360),t<60?a+(o-a)*t/60:t<180?o:t<240?a+(o-a)*(240-t)/60:a}function r(t){return Math.round(255*i(t))}var a,o;return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)?0:e<0?0:e>1?1:e,n=n<0?0:n>1?1:n,o=n<=.5?n*(1+e):n+e-n*e,a=2*n-o,new vt(r(t+120),r(t),r(t-120))}function ut(t,e,n){return this instanceof ut?(this.h=+t,this.c=+e,void(this.l=+n)):arguments.length<2?t instanceof ut?new ut(t.h,t.c,t.l):t instanceof dt?ft(t.l,t.a,t.b):ft((t=St((t=so.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new ut(t,e,n)}function ct(t,e,n){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new dt(n,Math.cos(t*=zo)*e,Math.sin(t)*e)}function dt(t,e,n){return this instanceof dt?(this.l=+t,this.a=+e,void(this.b=+n)):arguments.length<2?t instanceof dt?new dt(t.l,t.a,t.b):t instanceof ut?ct(t.h,t.c,t.l):St((t=vt(t)).r,t.g,t.b):new dt(t,e,n)}function ht(t,e,n){var i=(t+16)/116,r=i+e/500,a=i-n/200;return r=pt(r)*ts,i=pt(i)*es,a=pt(a)*ns,new vt(mt(3.2404542*r-1.5371385*i-.4985314*a),mt(-.969266*r+1.8760108*i+.041556*a),mt(.0556434*r-.2040259*i+1.0572252*a))}function ft(t,e,n){return t>0?new ut(Math.atan2(n,e)*Yo,Math.sqrt(e*e+n*n),t):new ut(NaN,NaN,t)}function pt(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function gt(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function mt(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function vt(t,e,n){return this instanceof vt?(this.r=~~t,this.g=~~e,void(this.b=~~n)):arguments.length<2?t instanceof vt?new vt(t.r,t.g,t.b):bt(""+t,vt,lt):new vt(t,e,n)}function yt(t){return new vt(t>>16,t>>8&255,255&t)}function xt(t){return yt(t)+""}function _t(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function bt(t,e,n){var i,r,a,o=0,s=0,l=0;if(i=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(r=i[2].split(","),i[1]){case"hsl":return n(parseFloat(r[0]),parseFloat(r[1])/100,parseFloat(r[2])/100);case"rgb":return e(Ct(r[0]),Ct(r[1]),Ct(r[2]))}return(a=as.get(t))?e(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&a)>>4,o=o>>4|o,s=240&a,s=s>>4|s,l=15&a,l=l<<4|l):7===t.length&&(o=(16711680&a)>>16,s=(65280&a)>>8,l=255&a)),e(o,s,l))}function wt(t,e,n){var i,r,a=Math.min(t/=255,e/=255,n/=255),o=Math.max(t,e,n),s=o-a,l=(o+a)/2;return s?(r=l<.5?s/(o+a):s/(2-o-a),i=t==o?(e-n)/s+(e0&&l<1?0:i),new st(i,r,l)}function St(t,e,n){t=Tt(t),e=Tt(e),n=Tt(n);var i=gt((.4124564*t+.3575761*e+.1804375*n)/ts),r=gt((.2126729*t+.7151522*e+.072175*n)/es),a=gt((.0193339*t+.119192*e+.9503041*n)/ns);return dt(116*r-16,500*(i-r),200*(r-a))}function Tt(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Ct(t){var e=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*e):e}function At(t){return"function"==typeof t?t:function(){return t}}function kt(t){return function(e,n,i){return 2===arguments.length&&"function"==typeof n&&(i=n,n=null),Pt(e,n,t,i)}}function Pt(t,e,n,i){function r(){var t,e=l.status;if(!e&&Et(l)||e>=200&&e<300||304===e){try{t=n.call(a,l)}catch(i){return void o.error.call(a,i)}o.load.call(a,t)}else o.error.call(a,l)}var a={},o=so.dispatch("beforesend","progress","load","error"),s={},l=new XMLHttpRequest,u=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(t)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=r:l.onreadystatechange=function(){l.readyState>3&&r()},l.onprogress=function(t){var e=so.event;so.event=t;try{o.progress.call(a,l)}finally{so.event=e}},a.header=function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?s[t]:(null==e?delete s[t]:s[t]=e+"",a)},a.mimeType=function(t){return arguments.length?(e=null==t?null:t+"",a):e},a.responseType=function(t){return arguments.length?(u=t,a):u},a.response=function(t){return n=t,a},["get","post"].forEach(function(t){a[t]=function(){return a.send.apply(a,[t].concat(uo(arguments)))}}),a.send=function(n,i,r){if(2===arguments.length&&"function"==typeof i&&(r=i,i=null),l.open(n,t,!0),null==e||"accept"in s||(s.accept=e+",*/*"),l.setRequestHeader)for(var c in s)l.setRequestHeader(c,s[c]);return null!=e&&l.overrideMimeType&&l.overrideMimeType(e),null!=u&&(l.responseType=u),null!=r&&a.on("error",r).on("load",function(t){r(null,t)}),o.beforesend.call(a,l),l.send(null==i?null:i),a},a.abort=function(){return l.abort(),a},so.rebind(a,o,"on"),null==i?a:a.get(Mt(i))}function Mt(t){return 1===t.length?function(e,n){t(null==e?n:null)}:t}function Et(t){var e=t.responseType;return e&&"text"!==e?t.response:t.responseText}function Dt(t,e,n){var i=arguments.length;i<2&&(e=0),i<3&&(n=Date.now());var r=n+e,a={c:t,t:r,n:null};return ss?ss.n=a:os=a,ss=a,ls||(us=clearTimeout(us),ls=1,cs(Ot)),a}function Ot(){var t=Lt(),e=It()-t;e>24?(isFinite(e)&&(clearTimeout(us),us=setTimeout(Ot,e)),ls=0):(ls=1,cs(Ot))}function Lt(){for(var t=Date.now(),e=os;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function It(){for(var t,e=os,n=1/0;e;)e.c?(e.t8?function(t){return t/n}:function(t){return t*n},symbol:t}}function Ft(t){var e=t.decimal,n=t.thousands,i=t.grouping,r=t.currency,a=i&&n?function(t,e){for(var r=t.length,a=[],o=0,s=i[0],l=0;r>0&&s>0&&(l+s+1>e&&(s=Math.max(1,e-l)),a.push(t.substring(r-=s,r+s)),!((l+=s+1)>e));)s=i[o=(o+1)%i.length];return a.reverse().join(n)}:y;return function(t){var n=hs.exec(t),i=n[1]||" ",o=n[2]||">",s=n[3]||"-",l=n[4]||"",u=n[5],c=+n[6],d=n[7],h=n[8],f=n[9],p=1,g="",m="",v=!1,y=!0;switch(h&&(h=+h.substring(1)),(u||"0"===i&&"="===o)&&(u=i="0",o="="),f){case"n":d=!0,f="g";break;case"%":p=100,m="%",f="f";break;case"p":p=100,m="%",f="r";break;case"b":case"o":case"x":case"X":"#"===l&&(g="0"+f.toLowerCase());case"c":y=!1;case"d":v=!0,h=0;break;case"s":p=-1,f="r"}"$"===l&&(g=r[0],m=r[1]),"r"!=f||h||(f="g"),null!=h&&("g"==f?h=Math.max(1,Math.min(21,h)):"e"!=f&&"f"!=f||(h=Math.max(0,Math.min(20,h)))),f=fs.get(f)||Vt;var x=u&&d;return function(t){var n=m;if(v&&t%1)return"";var r=t<0||0===t&&1/t<0?(t=-t,"-"):"-"===s?"":s;if(p<0){var l=so.formatPrefix(t,h);t=l.scale(t),n=l.symbol+m}else t*=p;t=f(t,h);var _,b,w=t.lastIndexOf(".");if(w<0){var S=y?t.lastIndexOf("e"):-1;S<0?(_=t,b=""):(_=t.substring(0,S),b=t.substring(S))}else _=t.substring(0,w),b=e+t.substring(w+1);!u&&d&&(_=a(_,1/0));var T=g.length+_.length+b.length+(x?0:r.length),C=T"===o?C+r+t:"^"===o?C.substring(0,T>>=1)+r+t+C.substring(T):r+(x?t:C+t))+n}}}function Vt(t){return t+""}function jt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Gt(t,e,n){function i(e){var n=t(e),i=a(n,1);return e-n1)for(;o=u)return-1;if(r=e.charCodeAt(s++),37===r){if(o=e.charAt(s++),a=M[o in vs?e.charAt(s++):o],!a||(i=a(t,n,i))<0)return-1}else if(r!=n.charCodeAt(i++))return-1}return i}function i(t,e,n){w.lastIndex=0;var i=w.exec(e.slice(n));return i?(t.w=S.get(i[0].toLowerCase()),n+i[0].length):-1}function r(t,e,n){_.lastIndex=0;var i=_.exec(e.slice(n));return i?(t.w=b.get(i[0].toLowerCase()),n+i[0].length):-1}function a(t,e,n){A.lastIndex=0;var i=A.exec(e.slice(n));return i?(t.m=k.get(i[0].toLowerCase()),n+i[0].length):-1}function o(t,e,n){T.lastIndex=0;var i=T.exec(e.slice(n));return i?(t.m=C.get(i[0].toLowerCase()),n+i[0].length):-1}function s(t,e,i){return n(t,P.c.toString(),e,i)}function l(t,e,i){return n(t,P.x.toString(),e,i)}function u(t,e,i){return n(t,P.X.toString(),e,i)}function c(t,e,n){var i=x.get(e.slice(n,n+=2).toLowerCase());return null==i?-1:(t.p=i,n)}var d=t.dateTime,h=t.date,f=t.time,p=t.periods,g=t.days,m=t.shortDays,v=t.months,y=t.shortMonths;e.utc=function(t){function n(t){try{gs=jt;var e=new gs;return e._=t,i(e)}finally{gs=Date}}var i=e(t);return n.parse=function(t){try{gs=jt;var e=i.parse(t);return e&&e._}finally{gs=Date}},n.toString=i.toString,n},e.multi=e.utc.multi=le;var x=so.map(),_=Yt(g),b=Bt(g),w=Yt(m),S=Bt(m),T=Yt(v),C=Bt(v),A=Yt(y),k=Bt(y);p.forEach(function(t,e){x.set(t.toLowerCase(),e)});var P={a:function(t){return m[t.getDay()]},A:function(t){return g[t.getDay()]},b:function(t){return y[t.getMonth()]},B:function(t){return v[t.getMonth()]},c:e(d),d:function(t,e){return zt(t.getDate(),e,2)},e:function(t,e){return zt(t.getDate(),e,2)},H:function(t,e){return zt(t.getHours(),e,2)},I:function(t,e){return zt(t.getHours()%12||12,e,2)},j:function(t,e){return zt(1+ps.dayOfYear(t),e,3)},L:function(t,e){return zt(t.getMilliseconds(),e,3)},m:function(t,e){return zt(t.getMonth()+1,e,2)},M:function(t,e){return zt(t.getMinutes(),e,2)},p:function(t){return p[+(t.getHours()>=12)]},S:function(t,e){return zt(t.getSeconds(),e,2)},U:function(t,e){return zt(ps.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return zt(ps.mondayOfYear(t),e,2)},x:e(h),X:e(f),y:function(t,e){return zt(t.getFullYear()%100,e,2)},Y:function(t,e){return zt(t.getFullYear()%1e4,e,4)},Z:oe,"%":function(){return"%"}},M={a:i,A:r,b:a,B:o,c:s,d:te,e:te,H:ne,I:ne,j:ee,L:ae,m:Jt,M:ie,p:c,S:re,U:qt,w:Xt,W:Ut,x:l,X:u,y:Qt,Y:Wt,Z:Kt,"%":se};return e}function zt(t,e,n){var i=t<0?"-":"",r=(i?-t:t)+"",a=r.length;return i+(a68?1900:2e3)}function Jt(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+2));return i?(t.m=i[0]-1,n+i[0].length):-1}function te(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+2));return i?(t.d=+i[0],n+i[0].length):-1}function ee(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+3));return i?(t.j=+i[0],n+i[0].length):-1}function ne(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+2));return i?(t.H=+i[0],n+i[0].length):-1}function ie(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+2));return i?(t.M=+i[0],n+i[0].length):-1}function re(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+2));return i?(t.S=+i[0],n+i[0].length):-1}function ae(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+3));return i?(t.L=+i[0],n+i[0].length):-1}function oe(t){var e=t.getTimezoneOffset(),n=e>0?"-":"+",i=_o(e)/60|0,r=_o(e)%60;return n+zt(i,"0",2)+zt(r,"0",2)}function se(t,e,n){xs.lastIndex=0;var i=xs.exec(e.slice(n,n+1));return i?n+i[0].length:-1}function le(t){for(var e=t.length,n=-1;++n=0?1:-1,s=o*n,l=Math.cos(e),u=Math.sin(e),c=a*u,d=r*l+c*Math.cos(s),h=c*o*Math.sin(s);Cs.add(Math.atan2(h,d)),i=t,r=l,a=u}var e,n,i,r,a;As.point=function(o,s){As.point=t,i=(e=o)*zo,r=Math.cos(s=(n=s)*zo/2+jo/4),a=Math.sin(s)},As.lineEnd=function(){t(e,n)}}function ge(t){var e=t[0],n=t[1],i=Math.cos(n);return[i*Math.cos(e),i*Math.sin(e),Math.sin(n)]}function me(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ve(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function ye(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function xe(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function _e(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function be(t){return[Math.atan2(t[1],t[0]),et(t[2])]}function we(t,e){return _o(t[0]-e[0])=0;--s)r.point((d=c[s])[0],d[1])}else i(f.x,f.p.x,-1,r);f=f.p}f=f.o,c=f.z,p=!p}while(!f.v);r.lineEnd()}}}function De(t){if(e=t.length){for(var e,n,i=0,r=t[0];++i0){for(b||(a.polygonStart(),b=!0),a.lineStart();++o1&&2&e&&n.push(n.pop().concat(n.shift())),f.push(n.filter(Ie))}var f,p,g,m=e(a),v=r.invert(i[0],i[1]),y={point:o,lineStart:l,lineEnd:u,polygonStart:function(){y.point=c,y.lineStart=d,y.lineEnd=h,f=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=l,y.lineEnd=u,f=so.merge(f);var t=Ge(v,p);f.length?(b||(a.polygonStart(),b=!0),Ee(f,Re,t,n,a)):t&&(b||(a.polygonStart(),b=!0),a.lineStart(),n(null,null,1,a),a.lineEnd()),b&&(a.polygonEnd(),b=!1),f=p=null},sphere:function(){a.polygonStart(),a.lineStart(),n(null,null,1,a),a.lineEnd(),a.polygonEnd()}},x=Ne(),_=e(x),b=!1;return y}}function Ie(t){return t.length>1}function Ne(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,n){t.push([e,n])},lineEnd:b,buffer:function(){var n=e;return e=[],t=null,n},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function Re(t,e){return((t=t.x)[0]<0?t[1]-$o-Fo:$o-t[1])-((e=e.x)[0]<0?e[1]-$o-Fo:$o-e[1])}function Fe(t){var e,n=NaN,i=NaN,r=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?jo:-jo,l=_o(a-n);_o(l-jo)0?$o:-$o),t.point(r,i),t.lineEnd(),t.lineStart(),t.point(s,i),t.point(a,i),e=0):r!==s&&l>=jo&&(_o(n-r)Fo?Math.atan((Math.sin(e)*(a=Math.cos(i))*Math.sin(n)-Math.sin(i)*(r=Math.cos(e))*Math.sin(t))/(r*a*o)):(e+i)/2}function je(t,e,n,i){var r;if(null==t)r=n*$o,i.point(-jo,r),i.point(0,r),i.point(jo,r),i.point(jo,0),i.point(jo,-r),i.point(0,-r),i.point(-jo,-r),i.point(-jo,0),i.point(-jo,r);else if(_o(t[0]-e[0])>Fo){var a=t[0]=0?1:-1,S=w*b,T=S>jo,C=p*x;if(Cs.add(Math.atan2(C*w*Math.sin(S),g*_+C*Math.cos(S))),a+=T?b+w*Go:b,T^h>=n^v>=n){var A=ve(ge(d),ge(t));_e(A);var k=ve(r,A);_e(k);var P=(T^b>=0?-1:1)*et(k[2]);(i>P||i===P&&(A[0]||A[1]))&&(o+=T^b>=0?1:-1)}if(!m++)break;h=v,p=x,g=_,d=t}}return(a<-Fo||aa}function n(t){var n,a,l,u,c;return{lineStart:function(){u=l=!1,c=1},point:function(d,h){var f,p=[d,h],g=e(d,h),m=o?g?0:r(d,h):g?r(d+(d<0?jo:-jo),h):0;if(!n&&(u=l=g)&&t.lineStart(),g!==l&&(f=i(n,p),(we(n,f)||we(p,f))&&(p[0]+=Fo,p[1]+=Fo,g=e(p[0],p[1]))),g!==l)c=0,g?(t.lineStart(),f=i(p,n),t.point(f[0],f[1])):(f=i(n,p),t.point(f[0],f[1]),t.lineEnd()),n=f;else if(s&&n&&o^g){var v;m&a||!(v=i(p,n,!0))||(c=0,o?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!g||n&&we(n,p)||t.point(p[0],p[1]),n=p,l=g,a=m},lineEnd:function(){l&&t.lineEnd(),n=null},clean:function(){return c|(u&&l)<<1}}}function i(t,e,n){var i=ge(t),r=ge(e),o=[1,0,0],s=ve(i,r),l=me(s,s),u=s[0],c=l-u*u;if(!c)return!n&&t;var d=a*l/c,h=-a*u/c,f=ve(o,s),p=xe(o,d),g=xe(s,h);ye(p,g);var m=f,v=me(p,m),y=me(m,m),x=v*v-y*(me(p,p)-1);if(!(x<0)){var _=Math.sqrt(x),b=xe(m,(-v-_)/y);if(ye(b,p),b=be(b),!n)return b;var w,S=t[0],T=e[0],C=t[1],A=e[1];T0^b[1]<(_o(b[0]-S)jo^(S<=b[0]&&b[0]<=T)){var E=xe(m,(-v+_)/y);return ye(E,p),[b,be(E)]}}}function r(e,n){var i=o?t:jo-t,r=0;return e<-i?r|=1:e>i&&(r|=2),n<-i?r|=4:n>i&&(r|=8),r}var a=Math.cos(t),o=a>0,s=_o(a)>Fo,l=gn(t,6*zo);return Le(e,n,l,o?[0,-t]:[-jo,t-jo])}function $e(t,e,n,i){return function(r){var a,o=r.a,s=r.b,l=o.x,u=o.y,c=s.x,d=s.y,h=0,f=1,p=c-l,g=d-u;if(a=t-l,p||!(a>0)){if(a/=p,p<0){if(a0){if(a>f)return;a>h&&(h=a)}if(a=n-l,p||!(a<0)){if(a/=p,p<0){if(a>f)return;a>h&&(h=a)}else if(p>0){if(a0)){if(a/=g,g<0){if(a0){if(a>f)return;a>h&&(h=a)}if(a=i-u,g||!(a<0)){if(a/=g,g<0){if(a>f)return;a>h&&(h=a)}else if(g>0){if(a0&&(r.a={x:l+h*p,y:u+h*g}),f<1&&(r.b={x:l+f*p,y:u+f*g}),r}}}}}}function ze(t,e,n,i){function r(i,r){return _o(i[0]-t)0?0:3:_o(i[0]-n)0?2:1:_o(i[1]-e)0?1:0:r>0?3:2}function a(t,e){return o(t.x,e.x)}function o(t,e){var n=r(t,1),i=r(e,1);return n!==i?n-i:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(s){function l(t){for(var e=0,n=m.length,i=t[1],r=0;ri&&J(u,a,t)>0&&++e:a[1]<=i&&J(u,a,t)<0&&--e,u=a;return 0!==e}function u(a,s,l,u){var c=0,d=0;if(null==a||(c=r(a,l))!==(d=r(s,l))||o(a,s)<0^l>0){do u.point(0===c||3===c?t:n,c>1?i:e);while((c=(c+l+4)%4)!==d)}else u.point(s[0],s[1])}function c(r,a){return t<=r&&r<=n&&e<=a&&a<=i}function d(t,e){c(t,e)&&s.point(t,e)}function h(){M.point=p,m&&m.push(v=[]),T=!0,S=!1,b=w=NaN}function f(){g&&(p(y,x),_&&S&&k.rejoin(),g.push(k.buffer())),M.point=d,S&&s.lineEnd()}function p(t,e){t=Math.max(-Gs,Math.min(Gs,t)),e=Math.max(-Gs,Math.min(Gs,e));var n=c(t,e);if(m&&v.push([t,e]),T)y=t,x=e,_=n,T=!1,n&&(s.lineStart(),s.point(t,e));else if(n&&S)s.point(t,e);else{var i={ -a:{x:b,y:w},b:{x:t,y:e}};P(i)?(S||(s.lineStart(),s.point(i.a.x,i.a.y)),s.point(i.b.x,i.b.y),n||s.lineEnd(),C=!1):n&&(s.lineStart(),s.point(t,e),C=!1)}b=t,w=e,S=n}var g,m,v,y,x,_,b,w,S,T,C,A=s,k=Ne(),P=$e(t,e,n,i),M={point:d,lineStart:h,lineEnd:f,polygonStart:function(){s=k,g=[],m=[],C=!0},polygonEnd:function(){s=A,g=so.merge(g);var e=l([t,i]),n=C&&e,r=g.length;(n||r)&&(s.polygonStart(),n&&(s.lineStart(),u(null,null,1,s),s.lineEnd()),r&&Ee(g,a,e,u,s),s.polygonEnd()),g=m=v=null}};return M}}function Ye(t){var e=0,n=jo/3,i=sn(t),r=i(e,n);return r.parallels=function(t){return arguments.length?i(e=t[0]*jo/180,n=t[1]*jo/180):[e/jo*180,n/jo*180]},r}function Be(t,e){function n(t,e){var n=Math.sqrt(a-2*r*Math.sin(e))/r;return[n*Math.sin(t*=r),o-n*Math.cos(t)]}var i=Math.sin(t),r=(i+Math.sin(e))/2,a=1+i*(2*r-i),o=Math.sqrt(a)/r;return n.invert=function(t,e){var n=o-e;return[Math.atan2(t,n)/r,et((a-(t*t+n*n)*r*r)/(2*r))]},n}function Xe(){function t(t,e){$s+=r*t-i*e,i=t,r=e}var e,n,i,r;qs.point=function(a,o){qs.point=t,e=i=a,n=r=o},qs.lineEnd=function(){t(e,n)}}function qe(t,e){tBs&&(Bs=t),eXs&&(Xs=e)}function Ue(){function t(t,e){o.push("M",t,",",e,a)}function e(t,e){o.push("M",t,",",e),s.point=n}function n(t,e){o.push("L",t,",",e)}function i(){s.point=t}function r(){o.push("Z")}var a=We(4.5),o=[],s={point:t,lineStart:function(){s.point=e},lineEnd:i,polygonStart:function(){s.lineEnd=r},polygonEnd:function(){s.lineEnd=i,s.point=t},pointRadius:function(t){return a=We(t),s},result:function(){if(o.length){var t=o.join("");return o=[],t}}};return s}function We(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Qe(t,e){Ms+=t,Es+=e,++Ds}function Ke(){function t(t,i){var r=t-e,a=i-n,o=Math.sqrt(r*r+a*a);Os+=o*(e+t)/2,Ls+=o*(n+i)/2,Is+=o,Qe(e=t,n=i)}var e,n;Ws.point=function(i,r){Ws.point=t,Qe(e=i,n=r)}}function Ze(){Ws.point=Qe}function Je(){function t(t,e){var n=t-i,a=e-r,o=Math.sqrt(n*n+a*a);Os+=o*(i+t)/2,Ls+=o*(r+e)/2,Is+=o,o=r*t-i*e,Ns+=o*(i+t),Rs+=o*(r+e),Fs+=3*o,Qe(i=t,r=e)}var e,n,i,r;Ws.point=function(a,o){Ws.point=t,Qe(e=i=a,n=r=o)},Ws.lineEnd=function(){t(e,n)}}function tn(t){function e(e,n){t.moveTo(e+o,n),t.arc(e,n,o,0,Go)}function n(e,n){t.moveTo(e,n),s.point=i}function i(e,n){t.lineTo(e,n)}function r(){s.point=e}function a(){t.closePath()}var o=4.5,s={point:e,lineStart:function(){s.point=n},lineEnd:r,polygonStart:function(){s.lineEnd=a},polygonEnd:function(){s.lineEnd=r,s.point=e},pointRadius:function(t){return o=t,s},result:b};return s}function en(t){function e(t){return(s?i:n)(t)}function n(e){return an(e,function(n,i){n=t(n,i),e.point(n[0],n[1])})}function i(e){function n(n,i){n=t(n,i),e.point(n[0],n[1])}function i(){x=NaN,T.point=a,e.lineStart()}function a(n,i){var a=ge([n,i]),o=t(n,i);r(x,_,y,b,w,S,x=o[0],_=o[1],y=n,b=a[0],w=a[1],S=a[2],s,e),e.point(x,_)}function o(){T.point=n,e.lineEnd()}function l(){i(),T.point=u,T.lineEnd=c}function u(t,e){a(d=t,h=e),f=x,p=_,g=b,m=w,v=S,T.point=a}function c(){r(x,_,y,b,w,S,f,p,d,g,m,v,s,e),T.lineEnd=o,o()}var d,h,f,p,g,m,v,y,x,_,b,w,S,T={point:n,lineStart:i,lineEnd:o,polygonStart:function(){e.polygonStart(),T.lineStart=l},polygonEnd:function(){e.polygonEnd(),T.lineStart=i}};return T}function r(e,n,i,s,l,u,c,d,h,f,p,g,m,v){var y=c-e,x=d-n,_=y*y+x*x;if(_>4*a&&m--){var b=s+f,w=l+p,S=u+g,T=Math.sqrt(b*b+w*w+S*S),C=Math.asin(S/=T),A=_o(_o(S)-1)a||_o((y*E+x*D)/_-.5)>.3||s*f+l*p+u*g0&&16,e):Math.sqrt(a)},e}function nn(t){var e=en(function(e,n){return t([e*Yo,n*Yo])});return function(t){return ln(e(t))}}function rn(t){this.stream=t}function an(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function on(t){return sn(function(){return t})()}function sn(t){function e(t){return t=s(t[0]*zo,t[1]*zo),[t[0]*h+l,u-t[1]*h]}function n(t){return t=s.invert((t[0]-l)/h,(u-t[1])/h),t&&[t[0]*Yo,t[1]*Yo]}function i(){s=Pe(o=dn(v,x,_),a);var t=a(g,m);return l=f-t[0]*h,u=p+t[1]*h,r()}function r(){return c&&(c.valid=!1,c=null),e}var a,o,s,l,u,c,d=en(function(t,e){return t=a(t,e),[t[0]*h+l,u-t[1]*h]}),h=150,f=480,p=250,g=0,m=0,v=0,x=0,_=0,b=js,w=y,S=null,T=null;return e.stream=function(t){return c&&(c.valid=!1),c=ln(b(o,d(w(t)))),c.valid=!0,c},e.clipAngle=function(t){return arguments.length?(b=null==t?(S=t,js):He((S=+t)*zo),r()):S},e.clipExtent=function(t){return arguments.length?(T=t,w=t?ze(t[0][0],t[0][1],t[1][0],t[1][1]):y,r()):T},e.scale=function(t){return arguments.length?(h=+t,i()):h},e.translate=function(t){return arguments.length?(f=+t[0],p=+t[1],i()):[f,p]},e.center=function(t){return arguments.length?(g=t[0]%360*zo,m=t[1]%360*zo,i()):[g*Yo,m*Yo]},e.rotate=function(t){return arguments.length?(v=t[0]%360*zo,x=t[1]%360*zo,_=t.length>2?t[2]%360*zo:0,i()):[v*Yo,x*Yo,_*Yo]},so.rebind(e,d,"precision"),function(){return a=t.apply(this,arguments),e.invert=a.invert&&n,i()}}function ln(t){return an(t,function(e,n){t.point(e*zo,n*zo)})}function un(t,e){return[t,e]}function cn(t,e){return[t>jo?t-Go:t<-jo?t+Go:t,e]}function dn(t,e,n){return t?e||n?Pe(fn(t),pn(e,n)):fn(t):e||n?pn(e,n):cn}function hn(t){return function(e,n){return e+=t,[e>jo?e-Go:e<-jo?e+Go:e,n]}}function fn(t){var e=hn(t);return e.invert=hn(-t),e}function pn(t,e){function n(t,e){var n=Math.cos(e),s=Math.cos(t)*n,l=Math.sin(t)*n,u=Math.sin(e),c=u*i+s*r;return[Math.atan2(l*a-c*o,s*i-u*r),et(c*a+l*o)]}var i=Math.cos(t),r=Math.sin(t),a=Math.cos(e),o=Math.sin(e);return n.invert=function(t,e){var n=Math.cos(e),s=Math.cos(t)*n,l=Math.sin(t)*n,u=Math.sin(e),c=u*a-l*o;return[Math.atan2(l*a+u*o,s*i+c*r),et(c*i-s*r)]},n}function gn(t,e){var n=Math.cos(t),i=Math.sin(t);return function(r,a,o,s){var l=o*e;null!=r?(r=mn(n,r),a=mn(n,a),(o>0?ra)&&(r+=o*Go)):(r=t+o*Go,a=t-.5*l);for(var u,c=r;o>0?c>a:c0?e<-$o+Fo&&(e=-$o+Fo):e>$o-Fo&&(e=$o-Fo);var n=o/Math.pow(r(e),a);return[n*Math.sin(a*t),o-n*Math.cos(a*t)]}var i=Math.cos(t),r=function(t){return Math.tan(jo/4+t/2)},a=t===e?Math.sin(t):Math.log(i/Math.cos(e))/Math.log(r(e)/r(t)),o=i*Math.pow(r(t),a)/a;return a?(n.invert=function(t,e){var n=o-e,i=Z(a)*Math.sqrt(t*t+n*n);return[Math.atan2(t,n)/a,2*Math.atan(Math.pow(o/i,1/a))-$o]},n):An}function Cn(t,e){function n(t,e){var n=a-e;return[n*Math.sin(r*t),a-n*Math.cos(r*t)]}var i=Math.cos(t),r=t===e?Math.sin(t):(i-Math.cos(e))/(e-t),a=i/r+t;return _o(r)1&&J(t[n[i-2]],t[n[i-1]],t[r])<=0;)--i;n[i++]=r}return n.slice(0,i)}function On(t,e){return t[0]-e[0]||t[1]-e[1]}function Ln(t,e,n){return(n[0]-e[0])*(t[1]-e[1])<(n[1]-e[1])*(t[0]-e[0])}function In(t,e,n,i){var r=t[0],a=n[0],o=e[0]-r,s=i[0]-a,l=t[1],u=n[1],c=e[1]-l,d=i[1]-u,h=(s*(l-u)-d*(r-a))/(d*o-s*c);return[r+h*o,l+h*c]}function Nn(t){var e=t[0],n=t[t.length-1];return!(e[0]-n[0]||e[1]-n[1])}function Rn(){ii(this),this.edge=this.site=this.circle=null}function Fn(t){var e=ul.pop()||new Rn;return e.site=t,e}function Vn(t){Un(t),ol.remove(t),ul.push(t),ii(t)}function jn(t){var e=t.circle,n=e.x,i=e.cy,r={x:n,y:i},a=t.P,o=t.N,s=[t];Vn(t);for(var l=a;l.circle&&_o(n-l.circle.x)Fo)s=s.L;else{if(r=a-$n(s,o),!(r>Fo)){i>-Fo?(e=s.P,n=s):r>-Fo?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}var l=Fn(t);if(ol.insert(e,l),e||n){if(e===n)return Un(e),n=Fn(e.site),ol.insert(l,n),l.edge=n.edge=Zn(e.site,l.site),qn(e),void qn(n);if(!n)return void(l.edge=Zn(e.site,l.site));Un(e),Un(n);var u=e.site,c=u.x,d=u.y,h=t.x-c,f=t.y-d,p=n.site,g=p.x-c,m=p.y-d,v=2*(h*m-f*g),y=h*h+f*f,x=g*g+m*m,_={x:(m*y-f*x)/v+c,y:(h*x-g*y)/v+d};ti(n.edge,u,p,_),l.edge=Zn(u,t,null,_),n.edge=Zn(t,p,null,_),qn(e),qn(n)}}function Hn(t,e){var n=t.site,i=n.x,r=n.y,a=r-e;if(!a)return i;var o=t.P;if(!o)return-(1/0);n=o.site;var s=n.x,l=n.y,u=l-e;if(!u)return s;var c=s-i,d=1/a-1/u,h=c/u;return d?(-h+Math.sqrt(h*h-2*d*(c*c/(-2*u)-l+u/2+r-a/2)))/d+i:(i+s)/2}function $n(t,e){var n=t.N;if(n)return Hn(n,e);var i=t.site;return i.y===e?i.x:1/0}function zn(t){this.site=t,this.edges=[]}function Yn(t){for(var e,n,i,r,a,o,s,l,u,c,d=t[0][0],h=t[1][0],f=t[0][1],p=t[1][1],g=al,m=g.length;m--;)if(a=g[m],a&&a.prepare())for(s=a.edges,l=s.length,o=0;oFo||_o(r-n)>Fo)&&(s.splice(o,0,new ei(Jn(a.site,c,_o(i-d)Fo?{x:d,y:_o(e-d)Fo?{x:_o(n-p)Fo?{x:h,y:_o(e-h)Fo?{x:_o(n-f)=-Vo)){var f=l*l+u*u,p=c*c+d*d,g=(d*f-u*p)/h,m=(l*p-c*f)/h,d=m+s,v=cl.pop()||new Xn;v.arc=t,v.site=r,v.x=g+o,v.y=d+Math.sqrt(g*g+m*m),v.cy=d,t.circle=v;for(var y=null,x=ll._;x;)if(v.y=s)return;if(h>p){if(a){if(a.y>=u)return}else a={x:m,y:l};n={x:m,y:u}}else{if(a){if(a.y1)if(h>p){if(a){if(a.y>=u)return}else a={x:(l-r)/i,y:l};n={x:(u-r)/i,y:u}}else{if(a){if(a.y=s)return}else a={x:o,y:i*o+r};n={x:s,y:i*s+r}}else{if(a){if(a.xa||d>o||h=_,S=n>=b,T=S<<1|w,C=T+4;Ta&&(r=e.slice(a,r),s[o]?s[o]+=r:s[++o]=r),(n=n[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,l.push({i:o,x:vi(n,i)})),a=fl.lastIndex;return a=0&&!(n=so.interpolators[i](t,e)););return n}function _i(t,e){var n,i=[],r=[],a=t.length,o=e.length,s=Math.min(t.length,e.length);for(n=0;n=1?1:t(e)}}function wi(t){return function(e){return 1-t(1-e)}}function Si(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function Ti(t){return t*t}function Ci(t){return t*t*t}function Ai(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,n=e*t;return 4*(t<.5?n:3*(t-e)+n-.75)}function ki(t){return function(e){return Math.pow(e,t)}}function Pi(t){return 1-Math.cos(t*$o)}function Mi(t){return Math.pow(2,10*(t-1))}function Ei(t){return 1-Math.sqrt(1-t*t)}function Di(t,e){var n;return arguments.length<2&&(e=.45),arguments.length?n=e/Go*Math.asin(1/t):(t=1,n=e/4),function(i){return 1+t*Math.pow(2,-10*i)*Math.sin((i-n)*Go/e)}}function Oi(t){return t||(t=1.70158),function(e){return e*e*((t+1)*e-t)}}function Li(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function Ii(t,e){t=so.hcl(t),e=so.hcl(e);var n=t.h,i=t.c,r=t.l,a=e.h-n,o=e.c-i,s=e.l-r;return isNaN(o)&&(o=0,i=isNaN(i)?e.c:i),isNaN(a)?(a=0,n=isNaN(n)?e.h:n):a>180?a-=360:a<-180&&(a+=360),function(t){return ct(n+a*t,i+o*t,r+s*t)+""}}function Ni(t,e){t=so.hsl(t),e=so.hsl(e);var n=t.h,i=t.s,r=t.l,a=e.h-n,o=e.s-i,s=e.l-r;return isNaN(o)&&(o=0,i=isNaN(i)?e.s:i),isNaN(a)?(a=0,n=isNaN(n)?e.h:n):a>180?a-=360:a<-180&&(a+=360),function(t){return lt(n+a*t,i+o*t,r+s*t)+""}}function Ri(t,e){t=so.lab(t),e=so.lab(e);var n=t.l,i=t.a,r=t.b,a=e.l-n,o=e.a-i,s=e.b-r;return function(t){return ht(n+a*t,i+o*t,r+s*t)+""}}function Fi(t,e){return e-=t,function(n){return Math.round(t+e*n)}}function Vi(t){var e=[t.a,t.b],n=[t.c,t.d],i=Gi(e),r=ji(e,n),a=Gi(Hi(n,e,-r))||0;e[0]*n[1]180?e+=360:e-t>180&&(t+=360),i.push({i:n.push($i(n)+"rotate(",null,")")-2,x:vi(t,e)})):e&&n.push($i(n)+"rotate("+e+")")}function Bi(t,e,n,i){t!==e?i.push({i:n.push($i(n)+"skewX(",null,")")-2,x:vi(t,e)}):e&&n.push($i(n)+"skewX("+e+")")}function Xi(t,e,n,i){if(t[0]!==e[0]||t[1]!==e[1]){var r=n.push($i(n)+"scale(",null,",",null,")");i.push({i:r-4,x:vi(t[0],e[0])},{i:r-2,x:vi(t[1],e[1])})}else 1===e[0]&&1===e[1]||n.push($i(n)+"scale("+e+")")}function qi(t,e){var n=[],i=[];return t=so.transform(t),e=so.transform(e),zi(t.translate,e.translate,n,i),Yi(t.rotate,e.rotate,n,i),Bi(t.skew,e.skew,n,i),Xi(t.scale,e.scale,n,i),t=e=null,function(t){for(var e,r=-1,a=i.length;++r=0;)n.push(r[i])}function or(t,e){for(var n=[t],i=[];null!=(t=n.pop());)if(i.push(t),(a=t.children)&&(r=a.length))for(var r,a,o=-1;++or&&(i=n,r=e);return i}function vr(t){return t.reduce(yr,0)}function yr(t,e){return t+e[1]}function xr(t,e){return _r(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function _r(t,e){for(var n=-1,i=+t[0],r=(t[1]-i)/e,a=[];++n<=e;)a[n]=r*n+i;return a}function br(t){return[so.min(t),so.max(t)]}function wr(t,e){return t.value-e.value}function Sr(t,e){var n=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=n,n._pack_prev=e}function Tr(t,e){t._pack_next=e,e._pack_prev=t}function Cr(t,e){var n=e.x-t.x,i=e.y-t.y,r=t.r+e.r;return.999*r*r>n*n+i*i}function Ar(t){function e(t){c=Math.min(t.x-t.r,c),d=Math.max(t.x+t.r,d),h=Math.min(t.y-t.r,h),f=Math.max(t.y+t.r,f)}if((n=t.children)&&(u=n.length)){var n,i,r,a,o,s,l,u,c=1/0,d=-(1/0),h=1/0,f=-(1/0);if(n.forEach(kr),i=n[0],i.x=-i.r,i.y=0,e(i),u>1&&(r=n[1],r.x=r.r,r.y=0,e(r),u>2))for(a=n[2],Er(i,r,a),e(a),Sr(i,a),i._pack_prev=a,Sr(a,r),r=i._pack_next,o=3;o=0;)e=r[a],e.z+=n,e.m+=n,n+=e.s+(i+=e.c)}function Rr(t,e,n){return t.a.parent===e.parent?t.a:n}function Fr(t){return 1+so.max(t,function(t){return t.y})}function Vr(t){return t.reduce(function(t,e){return t+e.x},0)/t.length}function jr(t){var e=t.children;return e&&e.length?jr(e[0]):t}function Gr(t){var e,n=t.children;return n&&(e=n.length)?Gr(n[e-1]):t}function Hr(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function $r(t,e){var n=t.x+e[3],i=t.y+e[0],r=t.dx-e[1]-e[3],a=t.dy-e[0]-e[2];return r<0&&(n+=r/2,r=0),a<0&&(i+=a/2,a=0),{x:n,y:i,dx:r,dy:a}}function zr(t){var e=t[0],n=t[t.length-1];return e2?Ur:Br,l=i?Wi:Ui;return o=r(t,e,l,n),s=r(e,t,l,xi),a}function a(t){return o(t)}var o,s;return a.invert=function(t){return s(t)},a.domain=function(e){return arguments.length?(t=e.map(Number),r()):t},a.range=function(t){return arguments.length?(e=t,r()):e},a.rangeRound=function(t){return a.range(t).interpolate(Fi)},a.clamp=function(t){return arguments.length?(i=t,r()):i},a.interpolate=function(t){return arguments.length?(n=t,r()):n},a.ticks=function(e){return Jr(t,e)},a.tickFormat=function(e,n){return ta(t,e,n)},a.nice=function(e){return Kr(t,e),r()},a.copy=function(){return Wr(t,e,n,i)},r()}function Qr(t,e){return so.rebind(t,e,"range","rangeRound","interpolate","clamp")}function Kr(t,e){return Xr(t,qr(Zr(t,e)[2])),Xr(t,qr(Zr(t,e)[2])),t}function Zr(t,e){null==e&&(e=10);var n=zr(t),i=n[1]-n[0],r=Math.pow(10,Math.floor(Math.log(i/e)/Math.LN10)),a=e/i*r;return a<=.15?r*=10:a<=.35?r*=5:a<=.75&&(r*=2),n[0]=Math.ceil(n[0]/r)*r,n[1]=Math.floor(n[1]/r)*r+.5*r,n[2]=r,n}function Jr(t,e){return so.range.apply(so,Zr(t,e))}function ta(t,e,n){var i=Zr(t,e);if(n){var r=hs.exec(n);if(r.shift(),"s"===r[8]){var a=so.formatPrefix(Math.max(_o(i[0]),_o(i[1])));return r[7]||(r[7]="."+ea(a.scale(i[2]))),r[8]="f",n=so.format(r.join("")),function(t){return n(a.scale(t))+a.symbol}}r[7]||(r[7]="."+na(r[8],i)),n=r.join("")}else n=",."+ea(i[2])+"f";return so.format(n)}function ea(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}function na(t,e){var n=ea(e[2]);return t in Cl?Math.abs(n-ea(Math.max(_o(e[0]),_o(e[1]))))+ +("e"!==t):n-2*("%"===t)}function ia(t,e,n,i){function r(t){return(n?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function a(t){return n?Math.pow(e,t):-Math.pow(e,-t)}function o(e){return t(r(e))}return o.invert=function(e){return a(t.invert(e))},o.domain=function(e){return arguments.length?(n=e[0]>=0,t.domain((i=e.map(Number)).map(r)),o):i},o.base=function(n){return arguments.length?(e=+n,t.domain(i.map(r)),o):e},o.nice=function(){var e=Xr(i.map(r),n?Math:kl);return t.domain(e),i=e.map(a),o},o.ticks=function(){var t=zr(i),o=[],s=t[0],l=t[1],u=Math.floor(r(s)),c=Math.ceil(r(l)),d=e%1?2:e;if(isFinite(c-u)){if(n){for(;u0;h--)o.push(a(u)*h);for(u=0;o[u]l;c--);o=o.slice(u,c)}return o},o.tickFormat=function(t,n){if(!arguments.length)return Al;arguments.length<2?n=Al:"function"!=typeof n&&(n=so.format(n));var i=Math.max(1,e*t/o.ticks().length);return function(t){var o=t/a(Math.round(r(t)));return o*e0?s[n-1]:t[0],n0?0:1}function ya(t,e,n,i,r){var a=t[0]-e[0],o=t[1]-e[1],s=(r?i:-i)/Math.sqrt(a*a+o*o),l=s*o,u=-s*a,c=t[0]+l,d=t[1]+u,h=e[0]+l,f=e[1]+u,p=(c+h)/2,g=(d+f)/2,m=h-c,v=f-d,y=m*m+v*v,x=n-i,_=c*f-h*d,b=(v<0?-1:1)*Math.sqrt(Math.max(0,x*x*y-_*_)),w=(_*v-m*b)/y,S=(-_*m-v*b)/y,T=(_*v+m*b)/y,C=(-_*m+v*b)/y,A=w-p,k=S-g,P=T-p,M=C-g;return A*A+k*k>P*P+M*M&&(w=T,S=C),[[w-l,S-u],[w*n/x,S*n/x]]}function xa(t){function e(e){function o(){u.push("M",a(t(c),s))}for(var l,u=[],c=[],d=-1,h=e.length,f=At(n),p=At(i);++d1?t.join("L"):t+"Z"}function ba(t){return t.join("L")+"Z"}function wa(t){for(var e=0,n=t.length,i=t[0],r=[i[0],",",i[1]];++e1&&r.push("H",i[0]),r.join("")}function Sa(t){for(var e=0,n=t.length,i=t[0],r=[i[0],",",i[1]];++e1){s=e[1],a=t[l],l++,i+="C"+(r[0]+o[0])+","+(r[1]+o[1])+","+(a[0]-s[0])+","+(a[1]-s[1])+","+a[0]+","+a[1];for(var u=2;u9&&(r=3*e/Math.sqrt(r),o[s]=r*n,o[s+1]=r*i));for(s=-1;++s<=l;)r=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),a.push([r||0,o[s]*r||0]);return a}function ja(t){return t.length<3?_a(t):t[0]+Pa(t,Va(t))}function Ga(t){for(var e,n,i,r=-1,a=t.length;++r0;)f[--s].call(t,o);if(a>=1)return g.event&&g.event.end.call(t,t.__data__,e),--p.count?delete p[i]:delete t[n],1}var l,c,d,h,f,p=t[n]||(t[n]={active:0,count:0}),g=p[i];g||(l=r.time,c=Dt(a,0,l),g=p[i]={tween:new u,time:l,timer:c,delay:r.delay,duration:r.duration,ease:r.ease,index:e},r=null,++p.count)}function to(t,e,n){t.attr("transform",function(t){var i=e(t);return"translate("+(isFinite(i)?i:n(t))+",0)"})}function eo(t,e,n){t.attr("transform",function(t){var i=e(t);return"translate(0,"+(isFinite(i)?i:n(t))+")"})}function no(t){return t.toISOString()}function io(t,e,n){function i(e){return t(e)}function r(t,n){var i=t[1]-t[0],r=i/n,a=so.bisect(Zl,r);return a==Zl.length?[e.year,Zr(t.map(function(t){return t/31536e6}),n)[2]]:a?e[r/Zl[a-1]1?{floor:function(e){for(;n(e=t.floor(e));)e=ro(e-1);return e},ceil:function(e){for(;n(e=t.ceil(e));)e=ro(+e+1);return e}}:t))},i.ticks=function(t,e){var n=zr(i.domain()),a=null==t?r(n,10):"number"==typeof t?r(n,t):!t.range&&[{range:t},e];return a&&(t=a[0],e=a[1]),t.range(n[0],ro(+n[1]+1),e<1?1:e)},i.tickFormat=function(){return n},i.copy=function(){return io(t.copy(),e,n)},Qr(i,t)}function ro(t){return new Date(t)}function ao(t){return JSON.parse(t.responseText)}function oo(t){var e=co.createRange();return e.selectNode(co.body),e.createContextualFragment(t.responseText)}var so={version:"3.5.17"},lo=[].slice,uo=function(t){return lo.call(t)},co=this.document;if(co)try{uo(co.documentElement.childNodes)[0].nodeType}catch(ho){uo=function(t){for(var e=t.length,n=new Array(e);e--;)n[e]=t[e];return n}}if(Date.now||(Date.now=function(){return+new Date}),co)try{co.createElement("DIV").style.setProperty("opacity",0,"")}catch(fo){var po=this.Element.prototype,go=po.setAttribute,mo=po.setAttributeNS,vo=this.CSSStyleDeclaration.prototype,yo=vo.setProperty;po.setAttribute=function(t,e){go.call(this,t,e+"")},po.setAttributeNS=function(t,e,n){mo.call(this,t,e,n+"")},vo.setProperty=function(t,e,n){yo.call(this,t,e+"",n)}}so.ascending=n,so.descending=function(t,e){return et?1:e>=t?0:NaN},so.min=function(t,e){var n,i,r=-1,a=t.length;if(1===arguments.length){for(;++r=i){n=i;break}for(;++ri&&(n=i)}else{for(;++r=i){n=i;break}for(;++ri&&(n=i)}return n},so.max=function(t,e){var n,i,r=-1,a=t.length;if(1===arguments.length){for(;++r=i){n=i;break}for(;++rn&&(n=i)}else{for(;++r=i){n=i;break}for(;++rn&&(n=i)}return n},so.extent=function(t,e){var n,i,r,a=-1,o=t.length;if(1===arguments.length){for(;++a=i){n=r=i;break}for(;++ai&&(n=i),r=i){n=r=i;break}for(;++ai&&(n=i),r1)return l/(c-1)},so.deviation=function(){var t=so.variance.apply(this,arguments);return t?Math.sqrt(t):t};var xo=a(n);so.bisectLeft=xo.left,so.bisect=so.bisectRight=xo.right,so.bisector=function(t){return a(1===t.length?function(e,i){return n(t(e),i)}:t)},so.shuffle=function(t,e,n){(a=arguments.length)<3&&(n=t.length,a<2&&(e=0));for(var i,r,a=n-e;a;)r=Math.random()*a--|0,i=t[a+e],t[a+e]=t[r+e],t[r+e]=i;return t},so.permute=function(t,e){for(var n=e.length,i=new Array(n);n--;)i[n]=t[e[n]];return i},so.pairs=function(t){for(var e,n=0,i=t.length-1,r=t[0],a=new Array(i<0?0:i);n=0;)for(i=t[r],e=i.length;--e>=0;)n[--o]=i[e];return n};var _o=Math.abs;so.range=function(t,e,n){if(arguments.length<3&&(n=1,arguments.length<2&&(e=t,t=0)),(e-t)/n===1/0)throw new Error("infinite range");var i,r=[],a=s(_o(n)),o=-1;if(t*=a,e*=a,n*=a,n<0)for(;(i=t+n*++o)>e;)r.push(i/a);else for(;(i=t+n*++o)=a.length)return i?i.call(r,o):n?o.sort(n):o;for(var l,c,d,h,f=-1,p=o.length,g=a[s++],m=new u;++f=a.length)return t;var i=[],r=o[n++];return t.forEach(function(t,r){i.push({key:t,values:e(r,n)})}),r?i.sort(function(t,e){return r(t.key,e.key)}):i}var n,i,r={},a=[],o=[];return r.map=function(e,n){return t(n,e,0)},r.entries=function(n){return e(t(so.map,n,0),0)},r.key=function(t){return a.push(t),r},r.sortKeys=function(t){return o[a.length-1]=t,r},r.sortValues=function(t){return n=t,r},r.rollup=function(t){return i=t,r},r},so.set=function(t){var e=new v;if(t)for(var n=0,i=t.length;n=0&&(i=t.slice(n+1),t=t.slice(0,n)),t)return arguments.length<2?this[t].on(i):this[t].on(i,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(i,null);return this}},so.event=null,so.requote=function(t){return t.replace(To,"\\$&")};var To=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,Co={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var n in e)t[n]=e[n]},Ao=function(t,e){return e.querySelector(t)},ko=function(t,e){return e.querySelectorAll(t)},Po=function(t,e){var n=t.matches||t[_(t,"matchesSelector")];return(Po=function(t,e){return n.call(t,e)})(t,e)};"function"==typeof Sizzle&&(Ao=function(t,e){return Sizzle(t,e)[0]||null},ko=Sizzle,Po=Sizzle.matchesSelector),so.selection=function(){return so.select(co.documentElement)};var Mo=so.selection.prototype=[];Mo.select=function(t){var e,n,i,r,a=[];t=P(t);for(var o=-1,s=this.length;++o=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),Do.hasOwnProperty(n)?{space:Do[n],local:t}:t}},Mo.attr=function(t,e){if(arguments.length<2){if("string"==typeof t){var n=this.node();return t=so.ns.qualify(t),t.local?n.getAttributeNS(t.space,t.local):n.getAttribute(t)}for(e in t)this.each(E(e,t[e]));return this}return this.each(E(t,e))},Mo.classed=function(t,e){if(arguments.length<2){if("string"==typeof t){var n=this.node(),i=(t=L(t)).length,r=-1;if(e=n.classList){for(;++r=0;)(n=i[r])&&(a&&a!==n.nextSibling&&a.parentNode.insertBefore(n,a),a=n);return this},Mo.sort=function(t){t=$.apply(this,arguments);for(var e=-1,n=this.length;++e0&&(e=e.transition().duration(M)),e.call(t.event)}function s(){b&&b.domain(_.range().map(function(t){return(t-C.x)/C.k}).map(_.invert)),S&&S.domain(w.range().map(function(t){return(t-C.y)/C.k}).map(w.invert))}function l(t){E++||t({type:"zoomstart"})}function u(t){s(),t({type:"zoom",scale:C.k,translate:[C.x,C.y]})}function c(t){--E||(t({type:"zoomend"}),m=null)}function d(){function t(){s=1,a(so.mouse(r),h),u(o)}function i(){d.on(O,null).on(L,null),f(s),c(o)}var r=this,o=N.of(r,arguments),s=0,d=so.select(e(r)).on(O,t).on(L,i),h=n(so.mouse(r)),f=W(r);$l.call(r),l(o)}function h(){function t(){var t=so.touches(p);return f=C.k,t.forEach(function(t){t.identifier in m&&(m[t.identifier]=n(t))}),t}function e(){var e=so.event.target;so.select(e).on(_,i).on(b,s),w.push(e);for(var n=so.event.changedTouches,r=0,a=n.length;r1){var c=l[0],d=l[1],h=c[0]-d[0],f=c[1]-d[1];v=h*h+f*f}}function i(){var t,e,n,i,o=so.touches(p);$l.call(p);for(var s=0,l=o.length;s=u)return o;if(r)return r=!1,a;var e=c;if(34===t.charCodeAt(e)){for(var n=e;n++=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,fs=so.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){ -return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(t,e){return(t=so.round(t,Nt(t,e))).toFixed(Math.max(0,Math.min(20,Nt(t*(1+1e-15),e))))}}),ps=so.time={},gs=Date;jt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){ms.setUTCDate.apply(this._,arguments)},setDay:function(){ms.setUTCDay.apply(this._,arguments)},setFullYear:function(){ms.setUTCFullYear.apply(this._,arguments)},setHours:function(){ms.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){ms.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){ms.setUTCMinutes.apply(this._,arguments)},setMonth:function(){ms.setUTCMonth.apply(this._,arguments)},setSeconds:function(){ms.setUTCSeconds.apply(this._,arguments)},setTime:function(){ms.setTime.apply(this._,arguments)}};var ms=Date.prototype;ps.year=Gt(function(t){return t=ps.day(t),t.setMonth(0,1),t},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t){return t.getFullYear()}),ps.years=ps.year.range,ps.years.utc=ps.year.utc.range,ps.day=Gt(function(t){var e=new gs(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e},function(t,e){t.setDate(t.getDate()+e)},function(t){return t.getDate()-1}),ps.days=ps.day.range,ps.days.utc=ps.day.utc.range,ps.dayOfYear=function(t){var e=ps.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(t,e){e=7-e;var n=ps[t]=Gt(function(t){return(t=ps.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t},function(t,e){t.setDate(t.getDate()+7*Math.floor(e))},function(t){var n=ps.year(t).getDay();return Math.floor((ps.dayOfYear(t)+(n+e)%7)/7)-(n!==e)});ps[t+"s"]=n.range,ps[t+"s"].utc=n.utc.range,ps[t+"OfYear"]=function(t){var n=ps.year(t).getDay();return Math.floor((ps.dayOfYear(t)+(n+e)%7)/7)}}),ps.week=ps.sunday,ps.weeks=ps.sunday.range,ps.weeks.utc=ps.sunday.utc.range,ps.weekOfYear=ps.sundayOfYear;var vs={"-":"",_:" ",0:"0"},ys=/^\s*\d+/,xs=/^%/;so.locale=function(t){return{numberFormat:Ft(t),timeFormat:$t(t)}};var _s=so.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});so.format=_s.numberFormat,so.geo={},ue.prototype={s:0,t:0,add:function(t){ce(t,this.t,bs),ce(bs.s,this.s,this),this.s?this.t+=bs.t:this.s=bs.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var bs=new ue;so.geo.stream=function(t,e){t&&ws.hasOwnProperty(t.type)?ws[t.type](t,e):de(t,e)};var ws={Feature:function(t,e){de(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,i=-1,r=n.length;++if&&(f=e)}function e(e,n){var i=ge([e*zo,n*zo]);if(v){var r=ve(v,i),a=[r[1],-r[0],0],o=ve(a,r);_e(o),o=be(o);var l=e-p,u=l>0?1:-1,g=o[0]*Yo*u,m=_o(l)>180;if(m^(u*pf&&(f=y)}else if(g=(g+360)%360-180,m^(u*pf&&(f=n);m?es(c,h)&&(h=e):s(e,h)>s(c,h)&&(c=e):h>=c?(eh&&(h=e)):e>p?s(c,e)>s(c,h)&&(h=e):s(e,h)>s(c,h)&&(c=e)}else t(e,n);v=i,p=e}function n(){b.point=e}function i(){_[0]=c,_[1]=h,b.point=t,v=null}function r(t,n){if(v){var i=t-p;y+=_o(i)>180?i+(i>0?360:-360):i}else g=t,m=n;As.point(t,n),e(t,n)}function a(){As.lineStart()}function o(){r(g,m),As.lineEnd(),_o(y)>Fo&&(c=-(h=180)),_[0]=c,_[1]=h,v=null}function s(t,e){return(e-=t)<0?e+360:e}function l(t,e){return t[0]-e[0]}function u(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:tFo?f=90:y<-Fo&&(d=-90),_[0]=c,_[1]=h}};return function(t){f=h=-(c=d=1/0),x=[],so.geo.stream(t,b);var e=x.length;if(e){x.sort(l);for(var n,i=1,r=x[0],a=[r];is(r[0],r[1])&&(r[1]=n[1]),s(n[0],r[1])>s(r[0],r[1])&&(r[0]=n[0])):a.push(r=n);for(var o,n,p=-(1/0),e=a.length-1,i=0,r=a[e];i<=e;r=n,++i)n=a[i],(o=s(r[1],n[0]))>p&&(p=o,c=n[0],h=r[1])}return x=_=null,c===1/0||d===1/0?[[NaN,NaN],[NaN,NaN]]:[[c,d],[h,f]]}}(),so.geo.centroid=function(t){ks=Ps=Ms=Es=Ds=Os=Ls=Is=Ns=Rs=Fs=0,so.geo.stream(t,Vs);var e=Ns,n=Rs,i=Fs,r=e*e+n*n+i*i;return r=.12&&r<.234&&i>=-.425&&i<-.214?o:r>=.166&&r<.234&&i>=-.214&&i<-.115?s:a).invert(t)},t.stream=function(t){var e=a.stream(t),n=o.stream(t),i=s.stream(t);return{point:function(t,r){e.point(t,r),n.point(t,r),i.point(t,r)},sphere:function(){e.sphere(),n.sphere(),i.sphere()},lineStart:function(){e.lineStart(),n.lineStart(),i.lineStart()},lineEnd:function(){e.lineEnd(),n.lineEnd(),i.lineEnd()},polygonStart:function(){e.polygonStart(),n.polygonStart(),i.polygonStart()},polygonEnd:function(){e.polygonEnd(),n.polygonEnd(),i.polygonEnd()}}},t.precision=function(e){return arguments.length?(a.precision(e),o.precision(e),s.precision(e),t):a.precision()},t.scale=function(e){return arguments.length?(a.scale(e),o.scale(.35*e),s.scale(e),t.translate(a.translate())):a.scale()},t.translate=function(e){if(!arguments.length)return a.translate();var u=a.scale(),c=+e[0],d=+e[1];return n=a.translate(e).clipExtent([[c-.455*u,d-.238*u],[c+.455*u,d+.238*u]]).stream(l).point,i=o.translate([c-.307*u,d+.201*u]).clipExtent([[c-.425*u+Fo,d+.12*u+Fo],[c-.214*u-Fo,d+.234*u-Fo]]).stream(l).point,r=s.translate([c-.205*u,d+.212*u]).clipExtent([[c-.214*u+Fo,d+.166*u+Fo],[c-.115*u-Fo,d+.234*u-Fo]]).stream(l).point,t},t.scale(1070)};var Hs,$s,zs,Ys,Bs,Xs,qs={point:b,lineStart:b,lineEnd:b,polygonStart:function(){$s=0,qs.lineStart=Xe},polygonEnd:function(){qs.lineStart=qs.lineEnd=qs.point=b,Hs+=_o($s/2)}},Us={point:qe,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Ws={point:Qe,lineStart:Ke,lineEnd:Ze,polygonStart:function(){Ws.lineStart=Je},polygonEnd:function(){Ws.point=Qe,Ws.lineStart=Ke,Ws.lineEnd=Ze}};so.geo.path=function(){function t(t){return t&&("function"==typeof s&&a.pointRadius(+s.apply(this,arguments)),o&&o.valid||(o=r(a)),so.geo.stream(t,o)),a.result()}function e(){return o=null,t}var n,i,r,a,o,s=4.5;return t.area=function(t){return Hs=0,so.geo.stream(t,r(qs)),Hs},t.centroid=function(t){return Ms=Es=Ds=Os=Ls=Is=Ns=Rs=Fs=0,so.geo.stream(t,r(Ws)),Fs?[Ns/Fs,Rs/Fs]:Is?[Os/Is,Ls/Is]:Ds?[Ms/Ds,Es/Ds]:[NaN,NaN]},t.bounds=function(t){return Bs=Xs=-(zs=Ys=1/0),so.geo.stream(t,r(Us)),[[zs,Ys],[Bs,Xs]]},t.projection=function(t){return arguments.length?(r=(n=t)?t.stream||nn(t):y,e()):n},t.context=function(t){return arguments.length?(a=null==(i=t)?new Ue:new tn(t),"function"!=typeof s&&a.pointRadius(s),e()):i},t.pointRadius=function(e){return arguments.length?(s="function"==typeof e?e:(a.pointRadius(+e),+e),t):s},t.projection(so.geo.albersUsa()).context(null)},so.geo.transform=function(t){return{stream:function(e){var n=new rn(e);for(var i in t)n[i]=t[i];return n}}},rn.prototype={point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},so.geo.projection=on,so.geo.projectionMutator=sn,(so.geo.equirectangular=function(){return on(un)}).raw=un.invert=un,so.geo.rotation=function(t){function e(e){return e=t(e[0]*zo,e[1]*zo),e[0]*=Yo,e[1]*=Yo,e}return t=dn(t[0]%360*zo,t[1]*zo,t.length>2?t[2]*zo:0),e.invert=function(e){return e=t.invert(e[0]*zo,e[1]*zo),e[0]*=Yo,e[1]*=Yo,e},e},cn.invert=un,so.geo.circle=function(){function t(){var t="function"==typeof i?i.apply(this,arguments):i,e=dn(-t[0]*zo,-t[1]*zo,0).invert,r=[];return n(null,null,1,{point:function(t,n){r.push(t=e(t,n)),t[0]*=Yo,t[1]*=Yo}}),{type:"Polygon",coordinates:[r]}}var e,n,i=[0,0],r=6;return t.origin=function(e){return arguments.length?(i=e,t):i},t.angle=function(i){return arguments.length?(n=gn((e=+i)*zo,r*zo),t):e},t.precision=function(i){return arguments.length?(n=gn(e*zo,(r=+i)*zo),t):r},t.angle(90)},so.geo.distance=function(t,e){var n,i=(e[0]-t[0])*zo,r=t[1]*zo,a=e[1]*zo,o=Math.sin(i),s=Math.cos(i),l=Math.sin(r),u=Math.cos(r),c=Math.sin(a),d=Math.cos(a);return Math.atan2(Math.sqrt((n=d*o)*n+(n=u*c-l*d*s)*n),l*c+u*d*s)},so.geo.graticule=function(){function t(){return{type:"MultiLineString",coordinates:e()}}function e(){return so.range(Math.ceil(a/m)*m,r,m).map(h).concat(so.range(Math.ceil(u/v)*v,l,v).map(f)).concat(so.range(Math.ceil(i/p)*p,n,p).filter(function(t){return _o(t%m)>Fo}).map(c)).concat(so.range(Math.ceil(s/g)*g,o,g).filter(function(t){return _o(t%v)>Fo}).map(d))}var n,i,r,a,o,s,l,u,c,d,h,f,p=10,g=p,m=90,v=360,y=2.5;return t.lines=function(){return e().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[h(a).concat(f(l).slice(1),h(r).reverse().slice(1),f(u).reverse().slice(1))]}},t.extent=function(e){return arguments.length?t.majorExtent(e).minorExtent(e):t.minorExtent()},t.majorExtent=function(e){return arguments.length?(a=+e[0][0],r=+e[1][0],u=+e[0][1],l=+e[1][1],a>r&&(e=a,a=r,r=e),u>l&&(e=u,u=l,l=e),t.precision(y)):[[a,u],[r,l]]},t.minorExtent=function(e){return arguments.length?(i=+e[0][0],n=+e[1][0],s=+e[0][1],o=+e[1][1],i>n&&(e=i,i=n,n=e),s>o&&(e=s,s=o,o=e),t.precision(y)):[[i,s],[n,o]]},t.step=function(e){return arguments.length?t.majorStep(e).minorStep(e):t.minorStep()},t.majorStep=function(e){return arguments.length?(m=+e[0],v=+e[1],t):[m,v]},t.minorStep=function(e){return arguments.length?(p=+e[0],g=+e[1],t):[p,g]},t.precision=function(e){return arguments.length?(y=+e,c=vn(s,o,90),d=yn(i,n,y),h=vn(u,l,90),f=yn(a,r,y),t):y},t.majorExtent([[-180,-90+Fo],[180,90-Fo]]).minorExtent([[-180,-80-Fo],[180,80+Fo]])},so.geo.greatArc=function(){function t(){return{type:"LineString",coordinates:[e||i.apply(this,arguments),n||r.apply(this,arguments)]}}var e,n,i=xn,r=_n;return t.distance=function(){return so.geo.distance(e||i.apply(this,arguments),n||r.apply(this,arguments))},t.source=function(n){return arguments.length?(i=n,e="function"==typeof n?null:n,t):i},t.target=function(e){return arguments.length?(r=e,n="function"==typeof e?null:e,t):r},t.precision=function(){return arguments.length?t:0},t},so.geo.interpolate=function(t,e){return bn(t[0]*zo,t[1]*zo,e[0]*zo,e[1]*zo)},so.geo.length=function(t){return Qs=0,so.geo.stream(t,Ks),Qs};var Qs,Ks={sphere:b,point:b,lineStart:wn,lineEnd:b,polygonStart:b,polygonEnd:b},Zs=Sn(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(so.geo.azimuthalEqualArea=function(){return on(Zs)}).raw=Zs;var Js=Sn(function(t){var e=Math.acos(t);return e&&e/Math.sin(e)},y);(so.geo.azimuthalEquidistant=function(){return on(Js)}).raw=Js,(so.geo.conicConformal=function(){return Ye(Tn)}).raw=Tn,(so.geo.conicEquidistant=function(){return Ye(Cn)}).raw=Cn;var tl=Sn(function(t){return 1/t},Math.atan);(so.geo.gnomonic=function(){return on(tl)}).raw=tl,An.invert=function(t,e){return[t,2*Math.atan(Math.exp(e))-$o]},(so.geo.mercator=function(){return kn(An)}).raw=An;var el=Sn(function(){return 1},Math.asin);(so.geo.orthographic=function(){return on(el)}).raw=el;var nl=Sn(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});(so.geo.stereographic=function(){return on(nl)}).raw=nl,Pn.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-$o]},(so.geo.transverseMercator=function(){var t=kn(Pn),e=t.center,n=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):(t=e(),[t[1],-t[0]])},t.rotate=function(t){return t?n([t[0],t[1],t.length>2?t[2]+90:90]):(t=n(),[t[0],t[1],t[2]-90])},n([0,0,90])}).raw=Pn,so.geom={},so.geom.hull=function(t){function e(t){if(t.length<3)return[];var e,r=At(n),a=At(i),o=t.length,s=[],l=[];for(e=0;e=0;--e)f.push(t[s[u[e]][2]]);for(e=+d;e=i&&u.x<=a&&u.y>=r&&u.y<=o?[[i,o],[a,o],[a,r],[i,r]]:[];c.point=t[s]}),e}function n(t){return t.map(function(t,e){return{x:Math.round(a(t,e)/Fo)*Fo,y:Math.round(o(t,e)/Fo)*Fo,i:e}})}var i=Mn,r=En,a=i,o=r,s=dl;return t?e(t):(e.links=function(t){return si(n(t)).edges.filter(function(t){return t.l&&t.r}).map(function(e){return{source:t[e.l.i],target:t[e.r.i]}})},e.triangles=function(t){var e=[];return si(n(t)).cells.forEach(function(n,i){for(var r,a,o=n.site,s=n.edges.sort(Bn),l=-1,u=s.length,c=s[u-1].edge,d=c.l===o?c.r:c.l;++l=u,h=i>=c,f=h<<1|d;t.leaf=!1,t=t.nodes[f]||(t.nodes[f]=hi()),d?r=u:s=u,h?o=c:l=c,a(t,e,n,i,r,o,s,l)}var c,d,h,f,p,g,m,v,y,x=At(s),_=At(l);if(null!=e)g=e,m=n,v=i,y=r;else if(v=y=-(g=m=1/0),d=[],h=[],p=t.length,o)for(f=0;fv&&(v=c.x),c.y>y&&(y=c.y),d.push(c.x),h.push(c.y);else for(f=0;fv&&(v=b),w>y&&(y=w),d.push(b),h.push(w)}var S=v-g,T=y-m;S>T?y=m+S:v=g+T;var C=hi();if(C.add=function(t){a(C,t,+x(t,++f),+_(t,f),g,m,v,y)},C.visit=function(t){fi(t,C,g,m,v,y)},C.find=function(t){return pi(C,t[0],t[1],g,m,v,y)},f=-1,null==e){for(;++f=0?t.slice(0,e):t,i=e>=0?t.slice(e+1):"in";return n=gl.get(n)||pl,i=ml.get(i)||y,bi(i(n.apply(null,lo.call(arguments,1))))},so.interpolateHcl=Ii,so.interpolateHsl=Ni,so.interpolateLab=Ri,so.interpolateRound=Fi,so.transform=function(t){var e=co.createElementNS(so.ns.prefix.svg,"g");return(so.transform=function(t){if(null!=t){e.setAttribute("transform",t);var n=e.transform.baseVal.consolidate()}return new Vi(n?n.matrix:vl)})(t)},Vi.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var vl={a:1,b:0,c:0,d:1,e:0,f:0};so.interpolateTransform=qi,so.layout={},so.layout.bundle=function(){return function(t){for(var e=[],n=-1,i=t.length;++n0?r=t:(n.c=null,n.t=NaN,n=null,u.end({type:"end",alpha:r=0})):t>0&&(u.start({type:"start",alpha:r=t}),n=Dt(l.tick)),l):r},l.start=function(){function t(t,i){if(!n){for(n=new Array(r),l=0;l=0;)o.push(c=u[l]),c.parent=a,c.depth=a.depth+1;i&&(a.value=0),a.children=u}else i&&(a.value=+i.call(t,a,a.depth)||0),delete a.children;return or(r,function(t){var n,r;e&&(n=t.children)&&n.sort(e),i&&(r=t.parent)&&(r.value+=t.value)}),s}var e=ur,n=sr,i=lr;return t.sort=function(n){return arguments.length?(e=n,t):e},t.children=function(e){return arguments.length?(n=e,t):n},t.value=function(e){return arguments.length?(i=e,t):i},t.revalue=function(e){return i&&(ar(e,function(t){t.children&&(t.value=0)}),or(e,function(e){var n;e.children||(e.value=+i.call(t,e,e.depth)||0),(n=e.parent)&&(n.value+=e.value)})),e},t},so.layout.partition=function(){function t(e,n,i,r){var a=e.children;if(e.x=n,e.y=e.depth*r,e.dx=i,e.dy=r,a&&(o=a.length)){var o,s,l,u=-1;for(i=e.value?i/e.value:0;++us&&(s=i),o.push(i)}for(n=0;n0)for(a=-1;++a=c[0]&&s<=c[1]&&(o=l[so.bisect(d,s,1,f)-1],o.y+=p,o.push(t[a]));return l}var e=!0,n=Number,i=br,r=xr;return t.value=function(e){return arguments.length?(n=e,t):n},t.range=function(e){return arguments.length?(i=At(e),t):i},t.bins=function(e){return arguments.length?(r="number"==typeof e?function(t){return _r(t,e)}:At(e),t):r},t.frequency=function(n){return arguments.length?(e=!!n,t):e},t},so.layout.pack=function(){function t(t,a){var o=n.call(this,t,a),s=o[0],l=r[0],u=r[1],c=null==e?Math.sqrt:"function"==typeof e?e:function(){return e};if(s.x=s.y=0,or(s,function(t){t.r=+c(t.value)}),or(s,Ar),i){var d=i*(e?1:Math.max(2*s.r/l,2*s.r/u))/2;or(s,function(t){t.r+=d}),or(s,Ar),or(s,function(t){t.r-=d})}return Mr(s,l/2,u/2,e?1:1/Math.max(2*s.r/l,2*s.r/u)),o}var e,n=so.layout.hierarchy().sort(wr),i=0,r=[1,1];return t.size=function(e){return arguments.length?(r=e,t):r},t.radius=function(n){return arguments.length?(e=null==n||"function"==typeof n?n:+n,t):e},t.padding=function(e){return arguments.length?(i=+e,t):i},rr(t,n)},so.layout.tree=function(){function t(t,r){var c=o.call(this,t,r),d=c[0],h=e(d);if(or(h,n),h.parent.m=-h.z,ar(h,i),u)ar(d,a);else{var f=d,p=d,g=d;ar(d,function(t){t.xp.x&&(p=t),t.depth>g.depth&&(g=t)});var m=s(f,p)/2-f.x,v=l[0]/(p.x+s(p,f)/2+m),y=l[1]/(g.depth||1); -ar(d,function(t){t.x=(t.x+m)*v,t.y=t.depth*y})}return c}function e(t){for(var e,n={A:null,children:[t]},i=[n];null!=(e=i.pop());)for(var r,a=e.children,o=0,s=a.length;o0&&(Ir(Rr(o,t,n),t,i),u+=i,c+=i),d+=o.m,u+=r.m,h+=l.m,c+=a.m;o&&!Lr(a)&&(a.t=o,a.m+=d-c),r&&!Or(l)&&(l.t=r,l.m+=u-h,n=t)}return n}function a(t){t.x*=l[0],t.y=t.depth*l[1]}var o=so.layout.hierarchy().sort(null).value(null),s=Dr,l=[1,1],u=null;return t.separation=function(e){return arguments.length?(s=e,t):s},t.size=function(e){return arguments.length?(u=null==(l=e)?a:null,t):u?null:l},t.nodeSize=function(e){return arguments.length?(u=null==(l=e)?null:a,t):u?l:null},rr(t,o)},so.layout.cluster=function(){function t(t,a){var o,s=e.call(this,t,a),l=s[0],u=0;or(l,function(t){var e=t.children;e&&e.length?(t.x=Vr(e),t.y=Fr(e)):(t.x=o?u+=n(t,o):0,t.y=0,o=t)});var c=jr(l),d=Gr(l),h=c.x-n(c,d)/2,f=d.x+n(d,c)/2;return or(l,r?function(t){t.x=(t.x-l.x)*i[0],t.y=(l.y-t.y)*i[1]}:function(t){t.x=(t.x-h)/(f-h)*i[0],t.y=(1-(l.y?t.y/l.y:1))*i[1]}),s}var e=so.layout.hierarchy().sort(null).value(null),n=Dr,i=[1,1],r=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(e){return arguments.length?(r=null==(i=e),t):r?null:i},t.nodeSize=function(e){return arguments.length?(r=null!=(i=e),t):r?i:null},rr(t,e)},so.layout.treemap=function(){function t(t,e){for(var n,i,r=-1,a=t.length;++r0;)c.push(o=h[l-1]),c.area+=o.area,"squarify"!==f||(s=i(c,g))<=p?(h.pop(),p=s):(c.area-=c.pop().area,r(c,g,u,!1),g=Math.min(u.dx,u.dy),c.length=c.area=0,p=1/0);c.length&&(r(c,g,u,!0),c.length=c.area=0),a.forEach(e)}}function n(e){var i=e.children;if(i&&i.length){var a,o=d(e),s=i.slice(),l=[];for(t(s,o.dx*o.dy/e.value),l.area=0;a=s.pop();)l.push(a),l.area+=a.area,null!=a.z&&(r(l,a.z?o.dx:o.dy,o,!s.length),l.length=l.area=0);i.forEach(n)}}function i(t,e){for(var n,i=t.area,r=0,a=1/0,o=-1,s=t.length;++or&&(r=n));return i*=i,e*=e,i?Math.max(e*r*p/i,i/(e*a*p)):1/0}function r(t,e,n,i){var r,a=-1,o=t.length,s=n.x,u=n.y,c=e?l(t.area/e):0;if(e==n.dx){for((i||c>n.dy)&&(c=n.dy);++an.dx)&&(c=n.dx);++a1);return t+e*n*Math.sqrt(-2*Math.log(r)/r)}},logNormal:function(){var t=so.random.normal.apply(so,arguments);return function(){return Math.exp(t())}},bates:function(t){var e=so.random.irwinHall(t);return function(){return e()/t}},irwinHall:function(t){return function(){for(var e=0,n=0;nd?0:1;if(u=Ho)return e(u,f)+(t?e(t,1-f):"")+"Z";var p,g,m,v,y,x,_,b,w,S,T,C,A=0,k=0,P=[];if((v=(+l.apply(this,arguments)||0)/2)&&(m=a===Ol?Math.sqrt(t*t+u*u):+a.apply(this,arguments),f||(k*=-1),u&&(k=et(m/u*Math.sin(v))),t&&(A=et(m/t*Math.sin(v)))),u){y=u*Math.cos(c+k),x=u*Math.sin(c+k),_=u*Math.cos(d-k),b=u*Math.sin(d-k);var M=Math.abs(d-c-2*k)<=jo?0:1;if(k&&va(y,x,_,b)===f^M){var E=(c+d)/2;y=u*Math.cos(E),x=u*Math.sin(E),_=b=null}}else y=x=0;if(t){w=t*Math.cos(d-A),S=t*Math.sin(d-A),T=t*Math.cos(c+A),C=t*Math.sin(c+A);var D=Math.abs(c-d+2*A)<=jo?0:1;if(A&&va(w,S,T,C)===1-f^D){var O=(c+d)/2;w=t*Math.cos(O),S=t*Math.sin(O),T=C=null}}else w=S=0;if(h>Fo&&(p=Math.min(Math.abs(u-t)/2,+r.apply(this,arguments)))>.001){g=tjo)+",1 "+e}function r(t,e,n,i){return"Q 0,0 "+i}var a=xn,o=_n,s=$a,l=pa,u=ga;return t.radius=function(e){return arguments.length?(s=At(e),t):s},t.source=function(e){return arguments.length?(a=At(e),t):a},t.target=function(e){return arguments.length?(o=At(e),t):o},t.startAngle=function(e){return arguments.length?(l=At(e),t):l},t.endAngle=function(e){return arguments.length?(u=At(e),t):u},t},so.svg.diagonal=function(){function t(t,r){var a=e.call(this,t,r),o=n.call(this,t,r),s=(a.y+o.y)/2,l=[a,{x:a.x,y:s},{x:o.x,y:s},o];return l=l.map(i),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var e=xn,n=_n,i=za;return t.source=function(n){return arguments.length?(e=At(n),t):e},t.target=function(e){return arguments.length?(n=At(e),t):n},t.projection=function(e){return arguments.length?(i=e,t):i},t},so.svg.diagonal.radial=function(){var t=so.svg.diagonal(),e=za,n=t.projection;return t.projection=function(t){return arguments.length?n(Ya(e=t)):e},t},so.svg.symbol=function(){function t(t,i){return(Fl.get(e.call(this,t,i))||qa)(n.call(this,t,i))}var e=Xa,n=Ba;return t.type=function(n){return arguments.length?(e=At(n),t):e},t.size=function(e){return arguments.length?(n=At(e),t):n},t};var Fl=so.map({circle:qa,cross:function(t){var e=Math.sqrt(t/5)/2;return"M"+-3*e+","+-e+"H"+-e+"V"+-3*e+"H"+e+"V"+-e+"H"+3*e+"V"+e+"H"+e+"V"+3*e+"H"+-e+"V"+e+"H"+-3*e+"Z"},diamond:function(t){var e=Math.sqrt(t/(2*jl)),n=e*jl;return"M0,"+-e+"L"+n+",0 0,"+e+" "+-n+",0Z"},square:function(t){var e=Math.sqrt(t)/2;return"M"+-e+","+-e+"L"+e+","+-e+" "+e+","+e+" "+-e+","+e+"Z"},"triangle-down":function(t){var e=Math.sqrt(t/Vl),n=e*Vl/2;return"M0,"+n+"L"+e+","+-n+" "+-e+","+-n+"Z"},"triangle-up":function(t){var e=Math.sqrt(t/Vl),n=e*Vl/2;return"M0,"+-n+"L"+e+","+n+" "+-e+","+n+"Z"}});so.svg.symbolTypes=Fl.keys();var Vl=Math.sqrt(3),jl=Math.tan(30*zo);Mo.transition=function(t){for(var e,n,i=Gl||++Yl,r=Za(t),a=[],o=Hl||{time:Date.now(),ease:Ai,delay:0,duration:250},s=-1,l=this.length;++srect,.s>rect").attr("width",d[1]-d[0])}function r(t){t.select(".extent").attr("y",h[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function a(){function a(){32==so.event.keyCode&&(M||(x=null,D[0]-=d[1],D[1]-=h[1],M=2),T())}function g(){32==so.event.keyCode&&2==M&&(D[0]+=d[1],D[1]+=h[1],M=0,T())}function m(){var t=so.mouse(b),e=!1;_&&(t[0]+=_[0],t[1]+=_[1]),M||(so.event.altKey?(x||(x=[(d[0]+d[1])/2,(h[0]+h[1])/2]),D[0]=d[+(t[0]0&&n(t[r],e[r],i)})}(s,this,this)}function r(e){var n=this;n.d3=t.d3?t.d3:"undefined"!=typeof require?require("d3"):void 0,n.api=e,n.config=n.getDefaultConfig(),n.data={},n.cache={},n.axes={}}function a(t){e.call(this,t)}function o(t,e){function n(t,e){t.attr("transform",function(t){return"translate("+Math.ceil(e(t)+_)+", 0)"})}function i(t,e){t.attr("transform",function(t){return"translate(0,"+Math.ceil(e(t))+")"})}function r(t){var e=t[0],n=t[t.length-1];return e0&&i[0]>0&&i.unshift(i[0]-(i[1]-i[0])),i}function o(){var t,n=g.copy();return e.isCategory&&(t=g.domain(),n.domain([t[0],t[1]-1])),n}function s(t){var e=h?h(t):t;return"undefined"!=typeof e?e:""}function l(t){if(A)return A;var e={h:11.5,w:5.5};return t.select("text").text(s).each(function(t){var n=this.getBoundingClientRect(),i=s(t),r=n.height,a=i?n.width/i.length:void 0;r&&a&&(e.h=r,e.w=a)}).text(""),A=e,e}function u(n){return e.withoutTransition?n:t.transition(n)}function c(h){h.each(function(){function h(t,n){function i(t,e){a=void 0;for(var s=1;s0?"start":"end":"middle"}function S(t){return t?"rotate("+t+")":""}function T(t){return t?8*Math.sin(Math.PI*(t/180)):0}function C(t){return t?11.5-2.5*(t/15)*(t>0?1:-1):U}var A,k,P,M=c.g=t.select(this),E=this.__chart__||g,D=this.__chart__=o(),O=x?x:a(D),L=M.selectAll(".tick").data(O,D),I=L.enter().insert("g",".domain").attr("class","tick").style("opacity",1e-6),N=L.exit().remove(),R=u(L).style("opacity",1),F=g.rangeExtent?g.rangeExtent():r(g.range()),V=M.selectAll(".domain").data([0]),j=(V.enter().append("path").attr("class","domain"),u(V));I.append("line"),I.append("text");var G=I.select("line"),H=R.select("line"),$=I.select("text"),z=R.select("text");e.isCategory?(_=Math.ceil((D(1)-D(0))/2),k=p?0:_,P=p?_:0):_=k=0;var Y,B,X=l(M.select(".tick")),q=[],U=Math.max(v,0)+y,W="left"===m||"right"===m;Y=L.select("text"),B=Y.selectAll("tspan").data(function(t,n){var i=e.tickMultiline?h(t,e.tickWidth):[].concat(s(t));return q[n]=i.length,i.map(function(t){return{index:n,splitted:t}})}),B.enter().append("tspan"),B.exit().remove(),B.text(function(t){return t.splitted});var Q=e.tickTextRotate;switch(m){case"bottom":A=n,G.attr("y2",v),$.attr("y",U),H.attr("x1",k).attr("x2",k).attr("y2",b),z.attr("x",0).attr("y",C(Q)).style("text-anchor",w(Q)).attr("transform",S(Q)),B.attr("x",0).attr("dy",f).attr("dx",T(Q)),j.attr("d","M"+F[0]+","+d+"V0H"+F[1]+"V"+d);break;case"top":A=n,G.attr("y2",-v),$.attr("y",-U),H.attr("x2",0).attr("y2",-v),z.attr("x",0).attr("y",-U),Y.style("text-anchor","middle"),B.attr("x",0).attr("dy","0em"),j.attr("d","M"+F[0]+","+-d+"V0H"+F[1]+"V"+-d);break;case"left":A=i,G.attr("x2",-v),$.attr("x",-U),H.attr("x2",-v).attr("y1",P).attr("y2",P),z.attr("x",-U).attr("y",_),Y.style("text-anchor","end"),B.attr("x",-U).attr("dy",f),j.attr("d","M"+-d+","+F[0]+"H0V"+F[1]+"H"+-d);break;case"right":A=i,G.attr("x2",v),$.attr("x",U),H.attr("x2",v).attr("y2",0),z.attr("x",U).attr("y",0),Y.style("text-anchor","start"),B.attr("x",U).attr("dy",f),j.attr("d","M"+d+","+F[0]+"H0V"+F[1]+"H"+d)}if(D.rangeBand){var K=D,Z=K.rangeBand()/2;E=D=function(t){return K(t)+Z}}else E.rangeBand?E=D:N.call(A,D);I.call(A,E),R.call(A,D)})}var d,h,f,p,g=t.scale.linear(),m="bottom",v=6,y=3,x=null,_=0,b=!0;return e=e||{},d=e.withOuterTick?6:0,c.scale=function(t){return arguments.length?(g=t,c):g},c.orient=function(t){return arguments.length?(m=t in{top:1,right:1,bottom:1,left:1}?t+"":"bottom",c):m},c.tickFormat=function(t){return arguments.length?(h=t,c):h},c.tickCentered=function(t){return arguments.length?(p=t,c):p},c.tickOffset=function(){return _},c.tickInterval=function(){var t,n;return e.isCategory?t=2*_:(n=c.g.select("path.domain").node().getTotalLength()-2*d,t=n/c.g.selectAll("line").size()),t===1/0?0:t},c.ticks=function(){return arguments.length?(f=arguments,c):f},c.tickCulling=function(t){return arguments.length?(b=t,c):b},c.tickValues=function(t){if("function"==typeof t)x=function(){return t(g.domain())};else{if(!arguments.length)return x;x=t}return c},c}var s,l,u,c={version:"0.4.11"};c.generate=function(t){return new i(t)},c.chart={fn:i.prototype,internal:{fn:r.prototype,axis:{fn:a.prototype}}},s=c.chart.fn,l=c.chart.internal.fn,u=c.chart.internal.axis.fn,l.beforeInit=function(){},l.afterInit=function(){},l.init=function(){var t=this,e=t.config;if(t.initParams(),e.data_url)t.convertUrlToData(e.data_url,e.data_mimeType,e.data_headers,e.data_keys,t.initWithData);else if(e.data_json)t.initWithData(t.convertJsonToData(e.data_json,e.data_keys));else if(e.data_rows)t.initWithData(t.convertRowsToData(e.data_rows));else{ -if(!e.data_columns)throw Error("url or json or rows or columns is required.");t.initWithData(t.convertColumnsToData(e.data_columns))}},l.initParams=function(){var t=this,e=t.d3,n=t.config;t.clipId="c3-"+ +new Date+"-clip",t.clipIdForXAxis=t.clipId+"-xaxis",t.clipIdForYAxis=t.clipId+"-yaxis",t.clipIdForGrid=t.clipId+"-grid",t.clipIdForSubchart=t.clipId+"-subchart",t.clipPath=t.getClipPath(t.clipId),t.clipPathForXAxis=t.getClipPath(t.clipIdForXAxis),t.clipPathForYAxis=t.getClipPath(t.clipIdForYAxis),t.clipPathForGrid=t.getClipPath(t.clipIdForGrid),t.clipPathForSubchart=t.getClipPath(t.clipIdForSubchart),t.dragStart=null,t.dragging=!1,t.flowing=!1,t.cancelClick=!1,t.mouseover=!1,t.transiting=!1,t.color=t.generateColor(),t.levelColor=t.generateLevelColor(),t.dataTimeFormat=n.data_xLocaltime?e.time.format:e.time.format.utc,t.axisTimeFormat=n.axis_x_localtime?e.time.format:e.time.format.utc,t.defaultAxisTimeFormat=t.axisTimeFormat.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%-m/%-d",function(t){return t.getDay()&&1!==t.getDate()}],["%-m/%-d",function(t){return 1!==t.getDate()}],["%-m/%-d",function(t){return t.getMonth()}],["%Y/%-m/%-d",function(){return!0}]]),t.hiddenTargetIds=[],t.hiddenLegendIds=[],t.focusedTargetIds=[],t.defocusedTargetIds=[],t.xOrient=n.axis_rotated?"left":"bottom",t.yOrient=n.axis_rotated?n.axis_y_inner?"top":"bottom":n.axis_y_inner?"right":"left",t.y2Orient=n.axis_rotated?n.axis_y2_inner?"bottom":"top":n.axis_y2_inner?"left":"right",t.subXOrient=n.axis_rotated?"left":"bottom",t.isLegendRight="right"===n.legend_position,t.isLegendInset="inset"===n.legend_position,t.isLegendTop="top-left"===n.legend_inset_anchor||"top-right"===n.legend_inset_anchor,t.isLegendLeft="top-left"===n.legend_inset_anchor||"bottom-left"===n.legend_inset_anchor,t.legendStep=0,t.legendItemWidth=0,t.legendItemHeight=0,t.currentMaxTickWidths={x:0,y:0,y2:0},t.rotated_padding_left=30,t.rotated_padding_right=n.axis_rotated&&!n.axis_x_show?0:30,t.rotated_padding_top=5,t.withoutFadeIn={},t.intervalForObserveInserted=void 0,t.axes.subx=e.selectAll([])},l.initChartElements=function(){this.initBar&&this.initBar(),this.initLine&&this.initLine(),this.initArc&&this.initArc(),this.initGauge&&this.initGauge(),this.initText&&this.initText()},l.initWithData=function(t){var e,n,i=this,r=i.d3,o=i.config,s=!0;i.axis=new a(i),i.initPie&&i.initPie(),i.initBrush&&i.initBrush(),i.initZoom&&i.initZoom(),o.bindto?"function"==typeof o.bindto.node?i.selectChart=o.bindto:i.selectChart=r.select(o.bindto):i.selectChart=r.selectAll([]),i.selectChart.empty()&&(i.selectChart=r.select(document.createElement("div")).style("opacity",0),i.observeInserted(i.selectChart),s=!1),i.selectChart.html("").classed("c3",!0),i.data.xs={},i.data.targets=i.convertDataToTargets(t),o.data_filter&&(i.data.targets=i.data.targets.filter(o.data_filter)),o.data_hide&&i.addHiddenTargetIds(o.data_hide===!0?i.mapToIds(i.data.targets):o.data_hide),o.legend_hide&&i.addHiddenLegendIds(o.legend_hide===!0?i.mapToIds(i.data.targets):o.legend_hide),i.hasType("gauge")&&(o.legend_show=!1),i.updateSizes(),i.updateScales(),i.x.domain(r.extent(i.getXDomain(i.data.targets))),i.y.domain(i.getYDomain(i.data.targets,"y")),i.y2.domain(i.getYDomain(i.data.targets,"y2")),i.subX.domain(i.x.domain()),i.subY.domain(i.y.domain()),i.subY2.domain(i.y2.domain()),i.orgXDomain=i.x.domain(),i.brush&&i.brush.scale(i.subX),o.zoom_enabled&&i.zoom.scale(i.x),i.svg=i.selectChart.append("svg").style("overflow","hidden").on("mouseenter",function(){return o.onmouseover.call(i)}).on("mouseleave",function(){return o.onmouseout.call(i)}),i.config.svg_classname&&i.svg.attr("class",i.config.svg_classname),e=i.svg.append("defs"),i.clipChart=i.appendClip(e,i.clipId),i.clipXAxis=i.appendClip(e,i.clipIdForXAxis),i.clipYAxis=i.appendClip(e,i.clipIdForYAxis),i.clipGrid=i.appendClip(e,i.clipIdForGrid),i.clipSubchart=i.appendClip(e,i.clipIdForSubchart),i.updateSvgSize(),n=i.main=i.svg.append("g").attr("transform",i.getTranslate("main")),i.initSubchart&&i.initSubchart(),i.initTooltip&&i.initTooltip(),i.initLegend&&i.initLegend(),i.initTitle&&i.initTitle(),n.append("text").attr("class",d.text+" "+d.empty).attr("text-anchor","middle").attr("dominant-baseline","middle"),i.initRegion(),i.initGrid(),n.append("g").attr("clip-path",i.clipPath).attr("class",d.chart),o.grid_lines_front&&i.initGridLines(),i.initEventRect(),i.initChartElements(),n.insert("rect",o.zoom_privileged?null:"g."+d.regions).attr("class",d.zoomRect).attr("width",i.width).attr("height",i.height).style("opacity",0).on("dblclick.zoom",null),o.axis_x_extent&&i.brush.extent(i.getDefaultExtent()),i.axis.init(),i.updateTargets(i.data.targets),s&&(i.updateDimension(),i.config.oninit.call(i),i.redraw({withTransition:!1,withTransform:!0,withUpdateXDomain:!0,withUpdateOrgXDomain:!0,withTransitionForAxis:!1})),i.bindResize(),i.api.element=i.selectChart.node()},l.smoothLines=function(t,e){var n=this;"grid"===e&&t.each(function(){var t=n.d3.select(this),e=t.attr("x1"),i=t.attr("x2"),r=t.attr("y1"),a=t.attr("y2");t.attr({x1:Math.ceil(e),x2:Math.ceil(i),y1:Math.ceil(r),y2:Math.ceil(a)})})},l.updateSizes=function(){var t=this,e=t.config,n=t.legend?t.getLegendHeight():0,i=t.legend?t.getLegendWidth():0,r=t.isLegendRight||t.isLegendInset?0:n,a=t.hasArcType(),o=e.axis_rotated||a?0:t.getHorizontalAxisHeight("x"),s=e.subchart_show&&!a?e.subchart_size_height+o:0;t.currentWidth=t.getCurrentWidth(),t.currentHeight=t.getCurrentHeight(),t.margin=e.axis_rotated?{top:t.getHorizontalAxisHeight("y2")+t.getCurrentPaddingTop(),right:a?0:t.getCurrentPaddingRight(),bottom:t.getHorizontalAxisHeight("y")+r+t.getCurrentPaddingBottom(),left:s+(a?0:t.getCurrentPaddingLeft())}:{top:4+t.getCurrentPaddingTop(),right:a?0:t.getCurrentPaddingRight(),bottom:o+s+r+t.getCurrentPaddingBottom(),left:a?0:t.getCurrentPaddingLeft()},t.margin2=e.axis_rotated?{top:t.margin.top,right:NaN,bottom:20+r,left:t.rotated_padding_left}:{top:t.currentHeight-s-r,right:NaN,bottom:o+r,left:t.margin.left},t.margin3={top:0,right:NaN,bottom:0,left:0},t.updateSizeForLegend&&t.updateSizeForLegend(n,i),t.width=t.currentWidth-t.margin.left-t.margin.right,t.height=t.currentHeight-t.margin.top-t.margin.bottom,t.width<0&&(t.width=0),t.height<0&&(t.height=0),t.width2=e.axis_rotated?t.margin.left-t.rotated_padding_left-t.rotated_padding_right:t.width,t.height2=e.axis_rotated?t.height:t.currentHeight-t.margin2.top-t.margin2.bottom,t.width2<0&&(t.width2=0),t.height2<0&&(t.height2=0),t.arcWidth=t.width-(t.isLegendRight?i+10:0),t.arcHeight=t.height-(t.isLegendRight?0:10),t.hasType("gauge")&&!e.gauge_fullCircle&&(t.arcHeight+=t.height-t.getGaugeLabelHeight()),t.updateRadius&&t.updateRadius(),t.isLegendRight&&a&&(t.margin3.left=t.arcWidth/2+1.1*t.radiusExpanded)},l.updateTargets=function(t){var e=this;e.updateTargetsForText(t),e.updateTargetsForBar(t),e.updateTargetsForLine(t),e.hasArcType()&&e.updateTargetsForArc&&e.updateTargetsForArc(t),e.updateTargetsForSubchart&&e.updateTargetsForSubchart(t),e.showTargets()},l.showTargets=function(){var t=this;t.svg.selectAll("."+d.target).filter(function(e){return t.isTargetToShow(e.id)}).transition().duration(t.config.transition_duration).style("opacity",1)},l.redraw=function(t,e){var n,i,r,a,o,s,l,u,c,h,f,p,g,m,v,y,x,_,b,S,T,C,A,k,P,M,E,D,O,L=this,I=L.main,N=L.d3,R=L.config,F=L.getShapeIndices(L.isAreaType),V=L.getShapeIndices(L.isBarType),j=L.getShapeIndices(L.isLineType),G=L.hasArcType(),H=L.filterTargetsToShow(L.data.targets),$=L.xv.bind(L);if(t=t||{},n=w(t,"withY",!0),i=w(t,"withSubchart",!0),r=w(t,"withTransition",!0),s=w(t,"withTransform",!1),l=w(t,"withUpdateXDomain",!1),u=w(t,"withUpdateOrgXDomain",!1),c=w(t,"withTrimXDomain",!0),g=w(t,"withUpdateXAxis",l),h=w(t,"withLegend",!1),f=w(t,"withEventRect",!0),p=w(t,"withDimension",!0),a=w(t,"withTransitionForExit",r),o=w(t,"withTransitionForAxis",r),b=r?R.transition_duration:0,S=a?b:0,T=o?b:0,e=e||L.axis.generateTransitions(T),h&&R.legend_show?L.updateLegend(L.mapToIds(L.data.targets),t,e):p&&L.updateDimension(!0),L.isCategorized()&&0===H.length&&L.x.domain([0,L.axes.x.selectAll(".tick").size()]),H.length?(L.updateXDomain(H,l,u,c),R.axis_x_tick_values||(k=L.axis.updateXAxisTickValues(H))):(L.xAxis.tickValues([]),L.subXAxis.tickValues([])),R.zoom_rescale&&!t.flow&&(E=L.x.orgDomain()),L.y.domain(L.getYDomain(H,"y",E)),L.y2.domain(L.getYDomain(H,"y2",E)),!R.axis_y_tick_values&&R.axis_y_tick_count&&L.yAxis.tickValues(L.axis.generateTickValues(L.y.domain(),R.axis_y_tick_count)),!R.axis_y2_tick_values&&R.axis_y2_tick_count&&L.y2Axis.tickValues(L.axis.generateTickValues(L.y2.domain(),R.axis_y2_tick_count)),L.axis.redraw(e,G),L.axis.updateLabels(r),(l||g)&&H.length)if(R.axis_x_tick_culling&&k){for(P=1;P=0&&N.select(this).style("display",e%M?"none":"block")})}else L.svg.selectAll("."+d.axisX+" .tick text").style("display","block");m=L.generateDrawArea?L.generateDrawArea(F,!1):void 0,v=L.generateDrawBar?L.generateDrawBar(V):void 0,y=L.generateDrawLine?L.generateDrawLine(j,!1):void 0,x=L.generateXYForText(F,V,j,!0),_=L.generateXYForText(F,V,j,!1),n&&(L.subY.domain(L.getYDomain(H,"y")),L.subY2.domain(L.getYDomain(H,"y2"))),L.updateXgridFocus(),I.select("text."+d.text+"."+d.empty).attr("x",L.width/2).attr("y",L.height/2).text(R.data_empty_label_text).transition().style("opacity",H.length?0:1),L.updateGrid(b),L.updateRegion(b),L.updateBar(S),L.updateLine(S),L.updateArea(S),L.updateCircle(),L.hasDataLabel()&&L.updateText(S),L.redrawTitle&&L.redrawTitle(),L.redrawArc&&L.redrawArc(b,S,s),L.redrawSubchart&&L.redrawSubchart(i,e,b,S,F,V,j),I.selectAll("."+d.selectedCircles).filter(L.isBarType.bind(L)).selectAll("circle").remove(),R.interaction_enabled&&!t.flow&&f&&(L.redrawEventRect(),L.updateZoom&&L.updateZoom()),L.updateCircleY(),D=(L.config.axis_rotated?L.circleY:L.circleX).bind(L),O=(L.config.axis_rotated?L.circleX:L.circleY).bind(L),t.flow&&(A=L.generateFlow({targets:H,flow:t.flow,duration:t.flow.duration,drawBar:v,drawLine:y,drawArea:m,cx:D,cy:O,xv:$,xForText:x,yForText:_})),(b||A)&&L.isTabVisible()?N.transition().duration(b).each(function(){var e=[];[L.redrawBar(v,!0),L.redrawLine(y,!0),L.redrawArea(m,!0),L.redrawCircle(D,O,!0),L.redrawText(x,_,t.flow,!0),L.redrawRegion(!0),L.redrawGrid(!0)].forEach(function(t){t.forEach(function(t){e.push(t)})}),C=L.generateWait(),e.forEach(function(t){C.add(t)})}).call(C,function(){A&&A(),R.onrendered&&R.onrendered.call(L)}):(L.redrawBar(v),L.redrawLine(y),L.redrawArea(m),L.redrawCircle(D,O),L.redrawText(x,_,t.flow),L.redrawRegion(),L.redrawGrid(),R.onrendered&&R.onrendered.call(L)),L.mapToIds(L.data.targets).forEach(function(t){L.withoutFadeIn[t]=!0})},l.updateAndRedraw=function(t){var e,n=this,i=n.config;t=t||{},t.withTransition=w(t,"withTransition",!0),t.withTransform=w(t,"withTransform",!1),t.withLegend=w(t,"withLegend",!1),t.withUpdateXDomain=!0,t.withUpdateOrgXDomain=!0,t.withTransitionForExit=!1,t.withTransitionForTransform=w(t,"withTransitionForTransform",t.withTransition),n.updateSizes(),t.withLegend&&i.legend_show||(e=n.axis.generateTransitions(t.withTransitionForAxis?i.transition_duration:0),n.updateScales(),n.updateSvgSize(),n.transformAll(t.withTransitionForTransform,e)),n.redraw(t,e)},l.redrawWithoutRescale=function(){this.redraw({withY:!1,withSubchart:!1,withEventRect:!1,withTransitionForAxis:!1})},l.isTimeSeries=function(){return"timeseries"===this.config.axis_x_type},l.isCategorized=function(){return this.config.axis_x_type.indexOf("categor")>=0},l.isCustomX=function(){var t=this,e=t.config;return!t.isTimeSeries()&&(e.data_x||b(e.data_xs))},l.isTimeSeriesY=function(){return"timeseries"===this.config.axis_y_type},l.getTranslate=function(t){var e,n,i=this,r=i.config;return"main"===t?(e=y(i.margin.left),n=y(i.margin.top)):"context"===t?(e=y(i.margin2.left),n=y(i.margin2.top)):"legend"===t?(e=i.margin3.left,n=i.margin3.top):"x"===t?(e=0,n=r.axis_rotated?0:i.height):"y"===t?(e=0,n=r.axis_rotated?i.height:0):"y2"===t?(e=r.axis_rotated?0:i.width,n=r.axis_rotated?1:0):"subx"===t?(e=0,n=r.axis_rotated?0:i.height2):"arc"===t&&(e=i.arcWidth/2,n=i.arcHeight/2),"translate("+e+","+n+")"},l.initialOpacity=function(t){return null!==t.value&&this.withoutFadeIn[t.id]?1:0},l.initialOpacityForCircle=function(t){return null!==t.value&&this.withoutFadeIn[t.id]?this.opacityForCircle(t):0},l.opacityForCircle=function(t){var e=this.config.point_show?1:0;return h(t.value)?this.isScatterType(t)?.5:e:0},l.opacityForText=function(){return this.hasDataLabel()?1:0},l.xx=function(t){return t?this.x(t.x):null},l.xv=function(t){var e=this,n=t.value;return e.isTimeSeries()?n=e.parseDate(t.value):e.isCategorized()&&"string"==typeof t.value&&(n=e.config.axis_x_categories.indexOf(t.value)),Math.ceil(e.x(n))},l.yv=function(t){var e=this,n=t.axis&&"y2"===t.axis?e.y2:e.y;return Math.ceil(n(t.value))},l.subxx=function(t){return t?this.subX(t.x):null},l.transformMain=function(t,e){var n,i,r,a=this;e&&e.axisX?n=e.axisX:(n=a.main.select("."+d.axisX),t&&(n=n.transition())),e&&e.axisY?i=e.axisY:(i=a.main.select("."+d.axisY),t&&(i=i.transition())),e&&e.axisY2?r=e.axisY2:(r=a.main.select("."+d.axisY2),t&&(r=r.transition())),(t?a.main.transition():a.main).attr("transform",a.getTranslate("main")),n.attr("transform",a.getTranslate("x")),i.attr("transform",a.getTranslate("y")),r.attr("transform",a.getTranslate("y2")),a.main.select("."+d.chartArcs).attr("transform",a.getTranslate("arc"))},l.transformAll=function(t,e){var n=this;n.transformMain(t,e),n.config.subchart_show&&n.transformContext(t,e),n.legend&&n.transformLegend(t)},l.updateSvgSize=function(){var t=this,e=t.svg.select(".c3-brush .background");t.svg.attr("width",t.currentWidth).attr("height",t.currentHeight),t.svg.selectAll(["#"+t.clipId,"#"+t.clipIdForGrid]).select("rect").attr("width",t.width).attr("height",t.height),t.svg.select("#"+t.clipIdForXAxis).select("rect").attr("x",t.getXAxisClipX.bind(t)).attr("y",t.getXAxisClipY.bind(t)).attr("width",t.getXAxisClipWidth.bind(t)).attr("height",t.getXAxisClipHeight.bind(t)),t.svg.select("#"+t.clipIdForYAxis).select("rect").attr("x",t.getYAxisClipX.bind(t)).attr("y",t.getYAxisClipY.bind(t)).attr("width",t.getYAxisClipWidth.bind(t)).attr("height",t.getYAxisClipHeight.bind(t)),t.svg.select("#"+t.clipIdForSubchart).select("rect").attr("width",t.width).attr("height",e.size()?e.attr("height"):0),t.svg.select("."+d.zoomRect).attr("width",t.width).attr("height",t.height),t.selectChart.style("max-height",t.currentHeight+"px")},l.updateDimension=function(t){var e=this;t||(e.config.axis_rotated?(e.axes.x.call(e.xAxis),e.axes.subx.call(e.subXAxis)):(e.axes.y.call(e.yAxis),e.axes.y2.call(e.y2Axis))),e.updateSizes(),e.updateScales(),e.updateSvgSize(),e.transformAll(!1)},l.observeInserted=function(e){var n,i=this;return"undefined"==typeof MutationObserver?void t.console.error("MutationObserver not defined."):(n=new MutationObserver(function(r){r.forEach(function(r){"childList"===r.type&&r.previousSibling&&(n.disconnect(),i.intervalForObserveInserted=t.setInterval(function(){e.node().parentNode&&(t.clearInterval(i.intervalForObserveInserted),i.updateDimension(),i.brush&&i.brush.update(),i.config.oninit.call(i),i.redraw({withTransform:!0,withUpdateXDomain:!0,withUpdateOrgXDomain:!0,withTransition:!1,withTransitionForTransform:!1,withLegend:!0}),e.transition().style("opacity",1))},10))})}),void n.observe(e.node(),{attributes:!0,childList:!0,characterData:!0}))},l.bindResize=function(){var e=this,n=e.config;if(e.resizeFunction=e.generateResize(),e.resizeFunction.add(function(){n.onresize.call(e)}),n.resize_auto&&e.resizeFunction.add(function(){void 0!==e.resizeTimeout&&t.clearTimeout(e.resizeTimeout),e.resizeTimeout=t.setTimeout(function(){delete e.resizeTimeout,e.api.flush()},100)}),e.resizeFunction.add(function(){n.onresized.call(e)}),t.attachEvent)t.attachEvent("onresize",e.resizeFunction);else if(t.addEventListener)t.addEventListener("resize",e.resizeFunction,!1);else{var i=t.onresize;i?i.add&&i.remove||(i=e.generateResize(),i.add(t.onresize)):i=e.generateResize(),i.add(e.resizeFunction),t.onresize=i}},l.generateResize=function(){function t(){e.forEach(function(t){t()})}var e=[];return t.add=function(t){e.push(t)},t.remove=function(t){for(var n=0;n0)for(o=s.hasNegativeValueInTargets(t),e=0;e=0}),0!==r.length)for(i=r[0],o&&c[i]&&c[i].forEach(function(t,e){c[i][e]=t<0?t:0}),n=1;n0||(c[i][e]+=+t)});return s.d3.min(Object.keys(c).map(function(t){return s.d3.min(c[t])}))},l.getYDomainMax=function(t){var e,n,i,r,a,o,s=this,l=s.config,u=s.mapToIds(t),c=s.getValuesAsIdKeyed(t);if(l.data_groups.length>0)for(o=s.hasPositiveValueInTargets(t),e=0;e=0}),0!==r.length)for(i=r[0],o&&c[i]&&c[i].forEach(function(t,e){c[i][e]=t>0?t:0}),n=1;n=0&&T>=0,p=S<=0&&T<=0,(h(_)&&f||h(w)&&p)&&(A=!1),A&&(f&&(S=0),p&&(T=0)),r=Math.abs(T-S),a=o=s=.1*r,"undefined"!=typeof C&&(l=Math.max(Math.abs(S),Math.abs(T)),T=C+l,S=C-l),P?(u=g.getDataLabelLength(S,T,"width"),c=x(g.y.range()),d=[u[0]/c,u[1]/c],o+=r*(d[1]/(1-d[0]-d[1])),s+=r*(d[0]/(1-d[0]-d[1]))):M&&(u=g.getDataLabelLength(S,T,"height"),o+=g.axis.convertPixelsToAxisPadding(u[1],r),s+=g.axis.convertPixelsToAxisPadding(u[0],r)),"y"===e&&b(m.axis_y_padding)&&(o=g.axis.getPadding(m.axis_y_padding,"top",o,r),s=g.axis.getPadding(m.axis_y_padding,"bottom",s,r)),"y2"===e&&b(m.axis_y2_padding)&&(o=g.axis.getPadding(m.axis_y2_padding,"top",o,r),s=g.axis.getPadding(m.axis_y2_padding,"bottom",s,r)),A&&(f&&(s=S),p&&(o=-T)),i=[S-s,T+o],k?i.reverse():i)},l.getXDomainMin=function(t){var e=this,n=e.config;return m(n.axis_x_min)?e.isTimeSeries()?this.parseDate(n.axis_x_min):n.axis_x_min:e.d3.min(t,function(t){return e.d3.min(t.values,function(t){return t.x})})},l.getXDomainMax=function(t){var e=this,n=e.config;return m(n.axis_x_max)?e.isTimeSeries()?this.parseDate(n.axis_x_max):n.axis_x_max:e.d3.max(t,function(t){return e.d3.max(t.values,function(t){return t.x})})},l.getXDomainPadding=function(t){var e,n,i,r,a=this,o=a.config,s=t[1]-t[0];return a.isCategorized()?n=0:a.hasType("bar")?(e=a.getMaxDataCount(),n=e>1?s/(e-1)/2:.5):n=.01*s,"object"==typeof o.axis_x_padding&&b(o.axis_x_padding)?(i=h(o.axis_x_padding.left)?o.axis_x_padding.left:n,r=h(o.axis_x_padding.right)?o.axis_x_padding.right:n):i=r="number"==typeof o.axis_x_padding?o.axis_x_padding:n,{left:i,right:r}},l.getXDomain=function(t){var e=this,n=[e.getXDomainMin(t),e.getXDomainMax(t)],i=n[0],r=n[1],a=e.getXDomainPadding(n),o=0,s=0;return i-r!==0||e.isCategorized()||(e.isTimeSeries()?(i=new Date(.5*i.getTime()),r=new Date(1.5*r.getTime())):(i=0===i?1:.5*i,r=0===r?-1:1.5*r)),(i||0===i)&&(o=e.isTimeSeries()?new Date(i.getTime()-a.left):i-a.left),(r||0===r)&&(s=e.isTimeSeries()?new Date(r.getTime()+a.right):r+a.right),[o,s]},l.updateXDomain=function(t,e,n,i,r){var a=this,o=a.config;return n&&(a.x.domain(r?r:a.d3.extent(a.getXDomain(t))),a.orgXDomain=a.x.domain(),o.zoom_enabled&&a.zoom.scale(a.x).updateScaleExtent(),a.subX.domain(a.x.domain()),a.brush&&a.brush.scale(a.subX)),e&&(a.x.domain(r?r:!a.brush||a.brush.empty()?a.orgXDomain:a.brush.extent()),o.zoom_enabled&&a.zoom.scale(a.x).updateScaleExtent()),i&&a.x.domain(a.trimXDomain(a.x.orgDomain())),a.x.domain()},l.trimXDomain=function(t){var e=this.getZoomDomain(),n=e[0],i=e[1];return t[0]<=n&&(t[1]=+t[1]+(n-t[0]),t[0]=n),i<=t[1]&&(t[0]=+t[0]-(t[1]-i),t[1]=i),t},l.isX=function(t){var e=this,n=e.config;return n.data_x&&t===n.data_x||b(n.data_xs)&&S(n.data_xs,t)},l.isNotX=function(t){return!this.isX(t)},l.getXKey=function(t){var e=this,n=e.config;return n.data_x?n.data_x:b(n.data_xs)?n.data_xs[t]:null},l.getXValuesOfXKey=function(t,e){var n,i=this,r=e&&b(e)?i.mapToIds(e):[];return r.forEach(function(e){i.getXKey(e)===t&&(n=i.data.xs[e])}),n},l.getIndexByX=function(t){var e=this,n=e.filterByX(e.data.targets,t);return n.length?n[0].index:null},l.getXValue=function(t,e){var n=this;return t in n.data.xs&&n.data.xs[t]&&h(n.data.xs[t][e])?n.data.xs[t][e]:e},l.getOtherTargetXs=function(){var t=this,e=Object.keys(t.data.xs);return e.length?t.data.xs[e[0]]:null},l.getOtherTargetX=function(t){var e=this.getOtherTargetXs();return e&&t1},l.isMultipleX=function(){return b(this.config.data_xs)||!this.config.data_xSort||this.hasType("scatter")},l.addName=function(t){var e,n=this;return t&&(e=n.config.data_names[t.id],t.name=void 0!==e?e:t.id),t},l.getValueOnIndex=function(t,e){var n=t.filter(function(t){return t.index===e});return n.length?n[0]:null},l.updateTargetX=function(t,e){var n=this;t.forEach(function(t){t.values.forEach(function(i,r){i.x=n.generateTargetX(e[r],t.id,r)}),n.data.xs[t.id]=e})},l.updateTargetXs=function(t,e){var n=this;t.forEach(function(t){e[t.id]&&n.updateTargetX([t],e[t.id])})},l.generateTargetX=function(t,e,n){var i,r=this;return i=r.isTimeSeries()?t?r.parseDate(t):r.parseDate(r.getXValue(e,n)):r.isCustomX()&&!r.isCategorized()?h(t)?+t:r.getXValue(e,n):n},l.cloneTarget=function(t){return{id:t.id,id_org:t.id_org,values:t.values.map(function(t){return{x:t.x,value:t.value,id:t.id}})}},l.updateXs=function(){var t=this;t.data.targets.length&&(t.xs=[],t.data.targets[0].values.forEach(function(e){t.xs[e.index]=e.x}))},l.getPrevX=function(t){var e=this.xs[t-1];return"undefined"!=typeof e?e:null},l.getNextX=function(t){var e=this.xs[t+1];return"undefined"!=typeof e?e:null},l.getMaxDataCount=function(){var t=this;return t.d3.max(t.data.targets,function(t){return t.values.length})},l.getMaxDataCountTarget=function(t){var e,n=t.length,i=0;return n>1?t.forEach(function(t){t.values.length>i&&(e=t,i=t.values.length)}):e=n?t[0]:null,e},l.getEdgeX=function(t){var e=this;return t.length?[e.d3.min(t,function(t){return t.values[0].x}),e.d3.max(t,function(t){return t.values[t.values.length-1].x})]:[0,0]},l.mapToIds=function(t){return t.map(function(t){return t.id})},l.mapToTargetIds=function(t){var e=this;return t?[].concat(t):e.mapToIds(e.data.targets)},l.hasTarget=function(t,e){var n,i=this.mapToIds(t);for(n=0;ne?1:t>=e?0:NaN})},l.addHiddenTargetIds=function(t){this.hiddenTargetIds=this.hiddenTargetIds.concat(t)},l.removeHiddenTargetIds=function(t){this.hiddenTargetIds=this.hiddenTargetIds.filter(function(e){return t.indexOf(e)<0})},l.addHiddenLegendIds=function(t){this.hiddenLegendIds=this.hiddenLegendIds.concat(t)},l.removeHiddenLegendIds=function(t){this.hiddenLegendIds=this.hiddenLegendIds.filter(function(e){return t.indexOf(e)<0})},l.getValuesAsIdKeyed=function(t){var e={};return t.forEach(function(t){e[t.id]=[],t.values.forEach(function(n){e[t.id].push(n.value)})}),e},l.checkValueInTargets=function(t,e){var n,i,r,a=Object.keys(t);for(n=0;n0})},l.isOrderDesc=function(){var t=this.config;return"string"==typeof t.data_order&&"desc"===t.data_order.toLowerCase()},l.isOrderAsc=function(){var t=this.config;return"string"==typeof t.data_order&&"asc"===t.data_order.toLowerCase()},l.orderTargets=function(t){var e=this,n=e.config,i=e.isOrderAsc(),r=e.isOrderDesc();return i||r?t.sort(function(t,e){var n=function(t,e){return t+Math.abs(e.value)},r=t.values.reduce(n,0),a=e.values.reduce(n,0);return i?a-r:r-a}):f(n.data_order)&&t.sort(n.data_order),t},l.filterByX=function(t,e){return this.d3.merge(t.map(function(t){return t.values})).filter(function(t){return t.x-e===0})},l.filterRemoveNull=function(t){return t.filter(function(t){return h(t.value)})},l.filterByXDomain=function(t,e){return t.map(function(t){return{id:t.id,id_org:t.id_org,values:t.values.filter(function(t){return e[0]<=t.x&&t.x<=e[1]})}})},l.hasDataLabel=function(){var t=this.config;return!("boolean"!=typeof t.data_labels||!t.data_labels)||!("object"!=typeof t.data_labels||!b(t.data_labels))},l.getDataLabelLength=function(t,e,n){var i=this,r=[0,0],a=1.3;return i.selectChart.select("svg").selectAll(".dummy").data([t,e]).enter().append("text").text(function(t){return i.dataLabelFormat(t.id)(t)}).each(function(t,e){r[e]=this.getBoundingClientRect()[n]*a}).remove(),r},l.isNoneArc=function(t){return this.hasTarget(this.data.targets,t.id)},l.isArc=function(t){return"data"in t&&this.hasTarget(this.data.targets,t.data.id)},l.findSameXOfValues=function(t,e){var n,i=t[e].x,r=[];for(n=e-1;n>=0&&i===t[n].x;n--)r.push(t[n]);for(n=e;n=0?i.data.xs[n]=(e&&i.data.xs[n]?i.data.xs[n]:[]).concat(t.map(function(t){return t[a]}).filter(h).map(function(t,e){return i.generateTargetX(t,n,e)})):r.data_x?i.data.xs[n]=i.getOtherTargetXs():b(r.data_xs)&&(i.data.xs[n]=i.getXValuesOfXKey(a,i.data.targets)):i.data.xs[n]=t.map(function(t,e){return e})}),a.forEach(function(t){if(!i.data.xs[t])throw new Error('x is not defined for id = "'+t+'".')}),n=a.map(function(e,n){var a=r.data_idConverter(e);return{id:a,id_org:e,values:t.map(function(t,o){var s,l=i.getXKey(e),u=t[l],c=null===t[e]||isNaN(t[e])?null:+t[e];return i.isCustomX()&&i.isCategorized()&&0===n&&!g(u)?(0===n&&0===o&&(r.axis_x_categories=[]),s=r.axis_x_categories.indexOf(u),s===-1&&(s=r.axis_x_categories.length,r.axis_x_categories.push(u))):s=i.generateTargetX(u,e,o),(g(t[e])||i.data.xs[e].length<=o)&&(s=void 0),{x:s,value:c,id:a}}).filter(function(t){return m(t.x)})}}),n.forEach(function(t){var e;r.data_xSort&&(t.values=t.values.sort(function(t,e){var n=t.x||0===t.x?t.x:1/0,i=e.x||0===e.x?e.x:1/0;return n-i})),e=0,t.values.forEach(function(t){t.index=e++}),i.data.xs[t.id].sort(function(t,e){return t-e})}),i.hasNegativeValue=i.hasNegativeValueInTargets(n),i.hasPositiveValue=i.hasPositiveValueInTargets(n),r.data_type&&i.setTargetType(i.mapToIds(n).filter(function(t){return!(t in r.data_types)}),r.data_type),n.forEach(function(t){i.addCache(t.id_org,t)}),n},l.load=function(t,e){var n=this;t&&(e.filter&&(t=t.filter(e.filter)),(e.type||e.types)&&t.forEach(function(t){var i=e.types&&e.types[t.id]?e.types[t.id]:e.type;n.setTargetType(t.id,i)}),n.data.targets.forEach(function(e){for(var n=0;n0?n:320/(t.hasType("gauge")&&!e.gauge_fullCircle?2:1)},l.getCurrentPaddingTop=function(){var t=this,e=t.config,n=h(e.padding_top)?e.padding_top:0;return t.title&&t.title.node()&&(n+=t.getTitlePadding()),n},l.getCurrentPaddingBottom=function(){var t=this.config;return h(t.padding_bottom)?t.padding_bottom:0},l.getCurrentPaddingLeft=function(t){var e=this,n=e.config;return h(n.padding_left)?n.padding_left:n.axis_rotated?n.axis_x_show?Math.max(v(e.getAxisWidthByAxisId("x",t)),40):1:!n.axis_y_show||n.axis_y_inner?e.axis.getYAxisLabelPosition().isOuter?30:1:v(e.getAxisWidthByAxisId("y",t))},l.getCurrentPaddingRight=function(){var t=this,e=t.config,n=10,i=t.isLegendRight?t.getLegendWidth()+20:0;return h(e.padding_right)?e.padding_right+1:e.axis_rotated?n+i:!e.axis_y2_show||e.axis_y2_inner?2+i+(t.axis.getY2AxisLabelPosition().isOuter?20:0):v(t.getAxisWidthByAxisId("y2"))+i},l.getParentRectValue=function(t){for(var e,n=this.selectChart.node();n&&"BODY"!==n.tagName;){try{e=n.getBoundingClientRect()[t]}catch(i){"width"===t&&(e=n.offsetWidth)}if(e)break;n=n.parentNode}return e},l.getParentWidth=function(){return this.getParentRectValue("width")},l.getParentHeight=function(){var t=this.selectChart.style("height");return t.indexOf("px")>0?+t.replace("px",""):0},l.getSvgLeft=function(t){var e=this,n=e.config,i=n.axis_rotated||!n.axis_rotated&&!n.axis_y_inner,r=n.axis_rotated?d.axisX:d.axisY,a=e.main.select("."+r).node(),o=a&&i?a.getBoundingClientRect():{right:0},s=e.selectChart.node().getBoundingClientRect(),l=e.hasArcType(),u=o.right-s.left-(l?0:e.getCurrentPaddingLeft(t));return u>0?u:0},l.getAxisWidthByAxisId=function(t,e){var n=this,i=n.axis.getLabelPositionById(t);return n.axis.getMaxTickWidth(t,e)+(i.isInner?20:40)},l.getHorizontalAxisHeight=function(t){var e=this,n=e.config,i=30;return"x"!==t||n.axis_x_show?"x"===t&&n.axis_x_height?n.axis_x_height:"y"!==t||n.axis_y_show?"y2"!==t||n.axis_y2_show?("x"===t&&!n.axis_rotated&&n.axis_x_tick_rotate&&(i=30+e.axis.getMaxTickWidth(t)*Math.cos(Math.PI*(90-n.axis_x_tick_rotate)/180)),"y"===t&&n.axis_rotated&&n.axis_y_tick_rotate&&(i=30+e.axis.getMaxTickWidth(t)*Math.cos(Math.PI*(90-n.axis_y_tick_rotate)/180)),i+(e.axis.getLabelPositionById(t).isInner?0:10)+("y2"===t?-10:0)):e.rotated_padding_top:!n.legend_show||e.isLegendRight||e.isLegendInset?1:10:8},l.getEventRectWidth=function(){return Math.max(0,this.xAxis.tickInterval())},l.getShapeIndices=function(t){var e,n,i=this,r=i.config,a={},o=0;return i.filterTargetsToShow(i.data.targets.filter(t,i)).forEach(function(t){for(e=0;e=0&&(u+=s(r[o].value)-l))}),u}},l.isWithinShape=function(t,e){var n,i=this,r=i.d3.select(t);return i.isTargetToShow(e.id)?"circle"===t.nodeName?n=i.isStepType(e)?i.isWithinStep(t,i.getYScale(e.id)(e.value)):i.isWithinCircle(t,1.5*i.pointSelectR(e)):"path"===t.nodeName&&(n=!r.classed(d.bar)||i.isWithinBar(t)):n=!1,n},l.getInterpolate=function(t){var e=this,n=e.isInterpolationType(e.config.spline_interpolation_type)?e.config.spline_interpolation_type:"cardinal";return e.isSplineType(t)?n:e.isStepType(t)?e.config.line_step_type:"linear"},l.initLine=function(){var t=this;t.main.select("."+d.chart).append("g").attr("class",d.chartLines)},l.updateTargetsForLine=function(t){var e,n,i=this,r=i.config,a=i.classChartLine.bind(i),o=i.classLines.bind(i),s=i.classAreas.bind(i),l=i.classCircles.bind(i),u=i.classFocus.bind(i);e=i.main.select("."+d.chartLines).selectAll("."+d.chartLine).data(t).attr("class",function(t){return a(t)+u(t)}),n=e.enter().append("g").attr("class",a).style("opacity",0).style("pointer-events","none"),n.append("g").attr("class",o),n.append("g").attr("class",s),n.append("g").attr("class",function(t){return i.generateClass(d.selectedCircles,t.id)}),n.append("g").attr("class",l).style("cursor",function(t){return r.data_selection_isselectable(t)?"pointer":null}),t.forEach(function(t){i.main.selectAll("."+d.selectedCircles+i.getTargetSelectorSuffix(t.id)).selectAll("."+d.selectedCircle).each(function(e){e.value=t.values[e.index].value})})},l.updateLine=function(t){var e=this;e.mainLine=e.main.selectAll("."+d.lines).selectAll("."+d.line).data(e.lineData.bind(e)),e.mainLine.enter().append("path").attr("class",e.classLine.bind(e)).style("stroke",e.color),e.mainLine.style("opacity",e.initialOpacity.bind(e)).style("shape-rendering",function(t){return e.isStepType(t)?"crispEdges":""}).attr("transform",null),e.mainLine.exit().transition().duration(t).style("opacity",0).remove()},l.redrawLine=function(t,e){return[(e?this.mainLine.transition(Math.random().toString()):this.mainLine).attr("d",t).style("stroke",this.color).style("opacity",1)]},l.generateDrawLine=function(t,e){var n=this,i=n.config,r=n.d3.svg.line(),a=n.generateGetLinePoints(t,e),o=e?n.getSubYScale:n.getYScale,s=function(t){return(e?n.subxx:n.xx).call(n,t)},l=function(t,e){return i.data_groups.length>0?a(t,e)[0][1]:o.call(n,t.id)(t.value)};return r=i.axis_rotated?r.x(l).y(s):r.x(s).y(l),i.line_connectNull||(r=r.defined(function(t){return null!=t.value})),function(t){var a,s=i.line_connectNull?n.filterRemoveNull(t.values):t.values,l=e?n.x:n.subX,u=o.call(n,t.id),c=0,d=0;return n.isLineType(t)?i.data_regions[t.id]?a=n.lineWithRegions(s,l,u,i.data_regions[t.id]):(n.isStepType(t)&&(s=n.convertValuesToStep(s)),a=r.interpolate(n.getInterpolate(t))(s)):(s[0]&&(c=l(s[0].x),d=u(s[0].value)),a=i.axis_rotated?"M "+d+" "+c:"M "+c+" "+d),a?a:"M 0 0"}},l.generateGetLinePoints=function(t,e){var n=this,i=n.config,r=t.__max__+1,a=n.getShapeX(0,r,t,!!e),o=n.getShapeY(!!e),s=n.getShapeOffset(n.isLineType,t,!!e),l=e?n.getSubYScale:n.getYScale;return function(t,e){var r=l.call(n,t.id)(0),u=s(t,e)||r,c=a(t),d=o(t);return i.axis_rotated&&(00?a(t,e)[0][1]:o.call(n,t.id)(n.getAreaBaseValue(t.id))},u=function(t,e){return i.data_groups.length>0?a(t,e)[1][1]:o.call(n,t.id)(t.value)};return r=i.axis_rotated?r.x0(l).x1(u).y(s):r.x(s).y0(i.area_above?0:l).y1(u),i.line_connectNull||(r=r.defined(function(t){return null!==t.value})),function(t){var e,a=i.line_connectNull?n.filterRemoveNull(t.values):t.values,o=0,s=0;return n.isAreaType(t)?(n.isStepType(t)&&(a=n.convertValuesToStep(a)),e=r.interpolate(n.getInterpolate(t))(a)):(a[0]&&(o=n.x(a[0].x),s=n.getYScale(t.id)(a[0].value)),e=i.axis_rotated?"M "+s+" "+o:"M "+o+" "+s),e?e:"M 0 0"}},l.getAreaBaseValue=function(){return 0},l.generateGetAreaPoints=function(t,e){var n=this,i=n.config,r=t.__max__+1,a=n.getShapeX(0,r,t,!!e),o=n.getShapeY(!!e),s=n.getShapeOffset(n.isAreaType,t,!!e),l=e?n.getSubYScale:n.getYScale;return function(t,e){var r=l.call(n,t.id)(0),u=s(t,e)||r,c=a(t),d=o(t);return i.axis_rotated&&(00?(t=n.getShapeIndices(n.isLineType),e=n.generateGetLinePoints(t),n.circleY=function(t,n){return e(t,n)[0][1]}):n.circleY=function(t){return n.getYScale(t.id)(t.value)}},l.getCircles=function(t,e){var n=this;return(e?n.main.selectAll("."+d.circles+n.getTargetSelectorSuffix(e)):n.main).selectAll("."+d.circle+(h(t)?"-"+t:""))},l.expandCircles=function(t,e,n){var i=this,r=i.pointExpandedR.bind(i);n&&i.unexpandCircles(),i.getCircles(t,e).classed(d.EXPANDED,!0).attr("r",r)},l.unexpandCircles=function(t){var e=this,n=e.pointR.bind(e);e.getCircles(t).filter(function(){return e.d3.select(this).classed(d.EXPANDED)}).classed(d.EXPANDED,!1).attr("r",n)},l.pointR=function(t){var e=this,n=e.config;return e.isStepType(t)?0:f(n.point_r)?n.point_r(t):n.point_r},l.pointExpandedR=function(t){var e=this,n=e.config;return n.point_focus_expand_enabled?n.point_focus_expand_r?n.point_focus_expand_r:1.75*e.pointR(t):e.pointR(t)},l.pointSelectR=function(t){var e=this,n=e.config;return f(n.point_select_r)?n.point_select_r(t):n.point_select_r?n.point_select_r:4*e.pointR(t)},l.isWithinCircle=function(t,e){var n=this.d3,i=n.mouse(t),r=n.select(t),a=+r.attr("cx"),o=+r.attr("cy");return Math.sqrt(Math.pow(a-i[0],2)+Math.pow(o-i[1],2))i.bar_width_max?i.bar_width_max:r},l.getBars=function(t,e){var n=this;return(e?n.main.selectAll("."+d.bars+n.getTargetSelectorSuffix(e)):n.main).selectAll("."+d.bar+(h(t)?"-"+t:""))},l.expandBars=function(t,e,n){var i=this;n&&i.unexpandBars(),i.getBars(t,e).classed(d.EXPANDED,!0)},l.unexpandBars=function(t){var e=this;e.getBars(t).classed(d.EXPANDED,!1)},l.generateDrawBar=function(t,e){var n=this,i=n.config,r=n.generateGetBarPoints(t,e);return function(t,e){var n=r(t,e),a=i.axis_rotated?1:0,o=i.axis_rotated?0:1,s="M "+n[0][a]+","+n[0][o]+" L"+n[1][a]+","+n[1][o]+" L"+n[2][a]+","+n[2][o]+" L"+n[3][a]+","+n[3][o]+" z";return s}},l.generateGetBarPoints=function(t,e){var n=this,i=e?n.subXAxis:n.xAxis,r=t.__max__+1,a=n.getBarW(i,r),o=n.getShapeX(a,r,t,!!e),s=n.getShapeY(!!e),l=n.getShapeOffset(n.isBarType,t,!!e),u=e?n.getSubYScale:n.getYScale;return function(t,e){var i=u.call(n,t.id)(0),r=l(t,e)||i,c=o(t),d=s(t);return n.config.axis_rotated&&(0a.width?i=a.width-o.width:i<0&&(i=4)),i},l.getYForText=function(t,e,n){var i,r=this,a=n.getBoundingClientRect();return r.config.axis_rotated?i=(t[0][0]+t[2][0]+.6*a.height)/2:(i=t[2][1],e.value<0||0===e.value&&!r.hasPositiveValue?(i+=a.height,r.isBarType(e)&&r.isSafari()?i-=3:!r.isBarType(e)&&r.isChrome()&&(i+=3)):i+=r.isBarType(e)?-3:-6),null!==e.value||r.config.axis_rotated||(ithis.height&&(i=this.height-4)), -i},l.setTargetType=function(t,e){var n=this,i=n.config;n.mapToTargetIds(t).forEach(function(t){n.withoutFadeIn[t]=e===i.data_types[t],i.data_types[t]=e}),t||(i.data_type=e)},l.hasType=function(t,e){var n=this,i=n.config.data_types,r=!1;return e=e||n.data.targets,e&&e.length?e.forEach(function(e){var n=i[e.id];(n&&n.indexOf(t)>=0||!n&&"line"===t)&&(r=!0)}):Object.keys(i).length?Object.keys(i).forEach(function(e){i[e]===t&&(r=!0)}):r=n.config.data_type===t,r},l.hasArcType=function(t){return this.hasType("pie",t)||this.hasType("donut",t)||this.hasType("gauge",t)},l.isLineType=function(t){var e=this.config,n=p(t)?t:t.id;return!e.data_types[n]||["line","spline","area","area-spline","step","area-step"].indexOf(e.data_types[n])>=0},l.isStepType=function(t){var e=p(t)?t:t.id;return["step","area-step"].indexOf(this.config.data_types[e])>=0},l.isSplineType=function(t){var e=p(t)?t:t.id;return["spline","area-spline"].indexOf(this.config.data_types[e])>=0},l.isAreaType=function(t){var e=p(t)?t:t.id;return["area","area-spline","area-step"].indexOf(this.config.data_types[e])>=0},l.isBarType=function(t){var e=p(t)?t:t.id;return"bar"===this.config.data_types[e]},l.isScatterType=function(t){var e=p(t)?t:t.id;return"scatter"===this.config.data_types[e]},l.isPieType=function(t){var e=p(t)?t:t.id;return"pie"===this.config.data_types[e]},l.isGaugeType=function(t){var e=p(t)?t:t.id;return"gauge"===this.config.data_types[e]},l.isDonutType=function(t){var e=p(t)?t:t.id;return"donut"===this.config.data_types[e]},l.isArcType=function(t){return this.isPieType(t)||this.isDonutType(t)||this.isGaugeType(t)},l.lineData=function(t){return this.isLineType(t)?[t]:[]},l.arcData=function(t){return this.isArcType(t.data)?[t]:[]},l.barData=function(t){return this.isBarType(t)?t.values:[]},l.lineOrScatterData=function(t){return this.isLineType(t)||this.isScatterType(t)?t.values:[]},l.barOrLineData=function(t){return this.isBarType(t)||this.isLineType(t)?t.values:[]},l.isInterpolationType=function(t){return["linear","linear-closed","basis","basis-open","basis-closed","bundle","cardinal","cardinal-open","cardinal-closed","monotone"].indexOf(t)>=0},l.initGrid=function(){var t=this,e=t.config,n=t.d3;t.grid=t.main.append("g").attr("clip-path",t.clipPathForGrid).attr("class",d.grid),e.grid_x_show&&t.grid.append("g").attr("class",d.xgrids),e.grid_y_show&&t.grid.append("g").attr("class",d.ygrids),e.grid_focus_show&&t.grid.append("g").attr("class",d.xgridFocus).append("line").attr("class",d.xgridFocus),t.xgrid=n.selectAll([]),e.grid_lines_front||t.initGridLines()},l.initGridLines=function(){var t=this,e=t.d3;t.gridLines=t.main.append("g").attr("clip-path",t.clipPathForGrid).attr("class",d.grid+" "+d.gridLines),t.gridLines.append("g").attr("class",d.xgridLines),t.gridLines.append("g").attr("class",d.ygridLines),t.xgridLines=e.selectAll([])},l.updateXGrid=function(t){var e=this,n=e.config,i=e.d3,r=e.generateGridData(n.grid_x_type,e.x),a=e.isCategorized()?e.xAxis.tickOffset():0;e.xgridAttr=n.axis_rotated?{x1:0,x2:e.width,y1:function(t){return e.x(t)-a},y2:function(t){return e.x(t)-a}}:{x1:function(t){return e.x(t)+a},x2:function(t){return e.x(t)+a},y1:0,y2:e.height},e.xgrid=e.main.select("."+d.xgrids).selectAll("."+d.xgrid).data(r),e.xgrid.enter().append("line").attr("class",d.xgrid),t||e.xgrid.attr(e.xgridAttr).style("opacity",function(){return+i.select(this).attr(n.axis_rotated?"y1":"x1")===(n.axis_rotated?e.height:0)?0:1}),e.xgrid.exit().remove()},l.updateYGrid=function(){var t=this,e=t.config,n=t.yAxis.tickValues()||t.y.ticks(e.grid_y_ticks);t.ygrid=t.main.select("."+d.ygrids).selectAll("."+d.ygrid).data(n),t.ygrid.enter().append("line").attr("class",d.ygrid),t.ygrid.attr("x1",e.axis_rotated?t.y:0).attr("x2",e.axis_rotated?t.y:t.width).attr("y1",e.axis_rotated?0:t.y).attr("y2",e.axis_rotated?t.height:t.y),t.ygrid.exit().remove(),t.smoothLines(t.ygrid,"grid")},l.gridTextAnchor=function(t){return t.position?t.position:"end"},l.gridTextDx=function(t){return"start"===t.position?4:"middle"===t.position?0:-4},l.xGridTextX=function(t){return"start"===t.position?-this.height:"middle"===t.position?-this.height/2:0},l.yGridTextX=function(t){return"start"===t.position?0:"middle"===t.position?this.width/2:this.width},l.updateGrid=function(t){var e,n,i,r=this,a=r.main,o=r.config;r.grid.style("visibility",r.hasArcType()?"hidden":"visible"),a.select("line."+d.xgridFocus).style("visibility","hidden"),o.grid_x_show&&r.updateXGrid(),r.xgridLines=a.select("."+d.xgridLines).selectAll("."+d.xgridLine).data(o.grid_x_lines),e=r.xgridLines.enter().append("g").attr("class",function(t){return d.xgridLine+(t["class"]?" "+t["class"]:"")}),e.append("line").style("opacity",0),e.append("text").attr("text-anchor",r.gridTextAnchor).attr("transform",o.axis_rotated?"":"rotate(-90)").attr("dx",r.gridTextDx).attr("dy",-5).style("opacity",0),r.xgridLines.exit().transition().duration(t).style("opacity",0).remove(),o.grid_y_show&&r.updateYGrid(),r.ygridLines=a.select("."+d.ygridLines).selectAll("."+d.ygridLine).data(o.grid_y_lines),n=r.ygridLines.enter().append("g").attr("class",function(t){return d.ygridLine+(t["class"]?" "+t["class"]:"")}),n.append("line").style("opacity",0),n.append("text").attr("text-anchor",r.gridTextAnchor).attr("transform",o.axis_rotated?"rotate(-90)":"").attr("dx",r.gridTextDx).attr("dy",-5).style("opacity",0),i=r.yv.bind(r),r.ygridLines.select("line").transition().duration(t).attr("x1",o.axis_rotated?i:0).attr("x2",o.axis_rotated?i:r.width).attr("y1",o.axis_rotated?0:i).attr("y2",o.axis_rotated?r.height:i).style("opacity",1),r.ygridLines.select("text").transition().duration(t).attr("x",o.axis_rotated?r.xGridTextX.bind(r):r.yGridTextX.bind(r)).attr("y",i).text(function(t){return t.text}).style("opacity",1),r.ygridLines.exit().transition().duration(t).style("opacity",0).remove()},l.redrawGrid=function(t){var e=this,n=e.config,i=e.xv.bind(e),r=e.xgridLines.select("line"),a=e.xgridLines.select("text");return[(t?r.transition():r).attr("x1",n.axis_rotated?0:i).attr("x2",n.axis_rotated?e.width:i).attr("y1",n.axis_rotated?i:0).attr("y2",n.axis_rotated?i:e.height).style("opacity",1),(t?a.transition():a).attr("x",n.axis_rotated?e.yGridTextX.bind(e):e.xGridTextX.bind(e)).attr("y",i).text(function(t){return t.text}).style("opacity",1)]},l.showXGridFocus=function(t){var e=this,n=e.config,i=t.filter(function(t){return t&&h(t.value)}),r=e.main.selectAll("line."+d.xgridFocus),a=e.xx.bind(e);n.tooltip_show&&(e.hasType("scatter")||e.hasArcType()||(r.style("visibility","visible").data([i[0]]).attr(n.axis_rotated?"y1":"x1",a).attr(n.axis_rotated?"y2":"x2",a),e.smoothLines(r,"grid")))},l.hideXGridFocus=function(){this.main.select("line."+d.xgridFocus).style("visibility","hidden")},l.updateXgridFocus=function(){var t=this,e=t.config;t.main.select("line."+d.xgridFocus).attr("x1",e.axis_rotated?0:-10).attr("x2",e.axis_rotated?t.width:-10).attr("y1",e.axis_rotated?-10:0).attr("y2",e.axis_rotated?-10:t.height)},l.generateGridData=function(t,e){var n,i,r,a,o=this,s=[],l=o.main.select("."+d.axisX).selectAll(".tick").size();if("year"===t)for(n=o.getXDomain(),i=n[0].getFullYear(),r=n[1].getFullYear(),a=i;a<=r;a++)s.push(new Date(a+"-01-01 00:00:00"));else s=e.ticks(10),s.length>l&&(s=s.filter(function(t){return(""+t).indexOf(".")<0}));return s},l.getGridFilterToRemove=function(t){return t?function(e){var n=!1;return[].concat(t).forEach(function(t){("value"in t&&e.value===t.value||"class"in t&&e["class"]===t["class"])&&(n=!0)}),n}:function(){return!0}},l.removeGridLines=function(t,e){var n=this,i=n.config,r=n.getGridFilterToRemove(t),a=function(t){return!r(t)},o=e?d.xgridLines:d.ygridLines,s=e?d.xgridLine:d.ygridLine;n.main.select("."+o).selectAll("."+s).filter(r).transition().duration(i.transition_duration).style("opacity",0).remove(),e?i.grid_x_lines=i.grid_x_lines.filter(a):i.grid_y_lines=i.grid_y_lines.filter(a)},l.initTooltip=function(){var t,e=this,n=e.config;if(e.tooltip=e.selectChart.style("position","relative").append("div").attr("class",d.tooltipContainer).style("position","absolute").style("pointer-events","none").style("display","none"),n.tooltip_init_show){if(e.isTimeSeries()&&p(n.tooltip_init_x)){for(n.tooltip_init_x=e.parseDate(n.tooltip_init_x),t=0;t0&&i>0&&(n=t?m.indexOf(t.id):null,i=e?m.indexOf(e.id):null),g?n-i:i-n})}for(a=0;a"+(o||0===o?"
    ":"")),s=T(p(t[a].value,t[a].ratio,t[a].id,t[a].index,t)),void 0!==s)){if(null===t[a].name)continue;l=T(f(t[a].name,t[a].ratio,t[a].id,t[a].index)),u=c.levelColor?c.levelColor(t[a].value):i(t[a].id),r+="",r+="",r+="",r+=""}return r+"
    ").addClass("cw").text("#"));n.isBefore(d.clone().endOf("w"));)e.append(t("").addClass("dow").text(n.format("dd"))),n.add(1,"d");p.find(".datepicker-days thead").append(e)},F=function(t){return i.disabledDates[t.format("YYYY-MM-DD")]===!0},V=function(t){return i.enabledDates[t.format("YYYY-MM-DD")]===!0},j=function(t){return i.disabledHours[t.format("H")]===!0},G=function(t){return i.enabledHours[t.format("H")]===!0},H=function(e,n){if(!e.isValid())return!1;if(i.disabledDates&&"d"===n&&F(e))return!1;if(i.enabledDates&&"d"===n&&!V(e))return!1;if(i.minDate&&e.isBefore(i.minDate,n))return!1;if(i.maxDate&&e.isAfter(i.maxDate,n))return!1;if(i.daysOfWeekDisabled&&"d"===n&&i.daysOfWeekDisabled.indexOf(e.day())!==-1)return!1;if(i.disabledHours&&("h"===n||"m"===n||"s"===n)&&j(e))return!1;if(i.enabledHours&&("h"===n||"m"===n||"s"===n)&&!G(e))return!1;if(i.disabledTimeIntervals&&("h"===n||"m"===n||"s"===n)){var r=!1;if(t.each(i.disabledTimeIntervals,function(){if(e.isBetween(this[0],this[1]))return r=!0,!1}),r)return!1}return!0},$=function(){for(var e=[],n=d.clone().startOf("y").startOf("d");n.isSame(d,"y");)e.push(t("").attr("data-action","selectMonth").addClass("month").text(n.format("MMM"))),n.add(1,"M");p.find(".datepicker-months td").empty().append(e)},z=function(){var e=p.find(".datepicker-months"),n=e.find("th"),r=e.find("tbody").find("span");n.eq(0).find("span").attr("title",i.tooltips.prevYear),n.eq(1).attr("title",i.tooltips.selectYear),n.eq(2).find("span").attr("title",i.tooltips.nextYear),e.find(".disabled").removeClass("disabled"),H(d.clone().subtract(1,"y"),"y")||n.eq(0).addClass("disabled"),n.eq(1).text(d.year()),H(d.clone().add(1,"y"),"y")||n.eq(2).addClass("disabled"),r.removeClass("active"),c.isSame(d,"y")&&!h&&r.eq(c.month()).addClass("active"),r.each(function(e){H(d.clone().month(e),"M")||t(this).addClass("disabled")})},Y=function(){var t=p.find(".datepicker-years"),e=t.find("th"),n=d.clone().subtract(5,"y"),r=d.clone().add(6,"y"),a="";for(e.eq(0).find("span").attr("title",i.tooltips.nextDecade),e.eq(1).attr("title",i.tooltips.selectDecade),e.eq(2).find("span").attr("title",i.tooltips.prevDecade),t.find(".disabled").removeClass("disabled"),i.minDate&&i.minDate.isAfter(n,"y")&&e.eq(0).addClass("disabled"),e.eq(1).text(n.year()+"-"+r.year()),i.maxDate&&i.maxDate.isBefore(r,"y")&&e.eq(2).addClass("disabled");!n.isAfter(r,"y");)a+=''+n.year()+"", -n.add(1,"y");t.find("td").html(a)},B=function(){var t=p.find(".datepicker-decades"),n=t.find("th"),r=e(d.isBefore(e({y:1999}))?{y:1899}:{y:1999}),a=r.clone().add(100,"y"),o="";for(n.eq(0).find("span").attr("title",i.tooltips.prevCentury),n.eq(2).find("span").attr("title",i.tooltips.nextCentury),t.find(".disabled").removeClass("disabled"),(r.isSame(e({y:1900}))||i.minDate&&i.minDate.isAfter(r,"y"))&&n.eq(0).addClass("disabled"),n.eq(1).text(r.year()+"-"+a.year()),(r.isSame(e({y:2e3}))||i.maxDate&&i.maxDate.isBefore(a,"y"))&&n.eq(2).addClass("disabled");!r.isAfter(a,"y");)o+=''+(r.year()+1)+" - "+(r.year()+12)+"",r.add(12,"y");o+="",t.find("td").html(o)},X=function(){var n,r,a,o,s=p.find(".datepicker-days"),l=s.find("th"),u=[];if(C()){for(l.eq(0).find("span").attr("title",i.tooltips.prevMonth),l.eq(1).attr("title",i.tooltips.selectMonth),l.eq(2).find("span").attr("title",i.tooltips.nextMonth),s.find(".disabled").removeClass("disabled"),l.eq(1).text(d.format(i.dayViewHeaderFormat)),H(d.clone().subtract(1,"M"),"M")||l.eq(0).addClass("disabled"),H(d.clone().add(1,"M"),"M")||l.eq(2).addClass("disabled"),n=d.clone().startOf("M").startOf("w").startOf("d"),o=0;o<42;o++)0===n.weekday()&&(r=t("
    '+n.week()+"'+n.date()+"
    '+n.format(a?"HH":"hh")+"
    '+n.format("mm")+"
    '+n.format("ss")+"
    "+o+"
    "+l+""+s+"
    "},l.tooltipPosition=function(t,e,n,i){var r,a,o,s,l,u=this,c=u.config,d=u.d3,h=u.hasArcType(),f=d.mouse(i);return h?(a=(u.width-(u.isLegendRight?u.getLegendWidth():0))/2+f[0],s=u.height/2+f[1]+20):(r=u.getSvgLeft(!0),c.axis_rotated?(a=r+f[0]+100,o=a+e,l=u.currentWidth-u.getCurrentPaddingRight(),s=u.x(t[0].x)+20):(a=r+u.getCurrentPaddingLeft(!0)+u.x(t[0].x)+20,o=a+e,l=r+u.currentWidth-u.getCurrentPaddingRight(),s=f[1]+15),o>l&&(a-=o-l+20),s+n>u.currentHeight&&(s-=n+30)),s<0&&(s=0),{top:s,left:a}},l.showTooltip=function(t,e){var n,i,r,a=this,o=a.config,s=a.hasArcType(),u=t.filter(function(t){return t&&h(t.value)}),c=o.tooltip_position||l.tooltipPosition;0!==u.length&&o.tooltip_show&&(a.tooltip.html(o.tooltip_contents.call(a,t,a.axis.getXAxisTickFormat(),a.getYFormat(s),a.color)).style("display","block"),n=a.tooltip.property("offsetWidth"),i=a.tooltip.property("offsetHeight"),r=c.call(this,u,n,i,e),a.tooltip.style("top",r.top+"px").style("left",r.left+"px"))},l.hideTooltip=function(){this.tooltip.style("display","none")},l.initLegend=function(){var t=this;return t.legendItemTextBox={},t.legendHasRendered=!1,t.legend=t.svg.append("g").attr("transform",t.getTranslate("legend")),t.config.legend_show?void t.updateLegendWithDefaults():(t.legend.style("visibility","hidden"),void(t.hiddenLegendIds=t.mapToIds(t.data.targets)))},l.updateLegendWithDefaults=function(){var t=this;t.updateLegend(t.mapToIds(t.data.targets),{withTransform:!1,withTransitionForTransform:!1,withTransition:!1})},l.updateSizeForLegend=function(t,e){var n=this,i=n.config,r={top:n.isLegendTop?n.getCurrentPaddingTop()+i.legend_inset_y+5.5:n.currentHeight-t-n.getCurrentPaddingBottom()-i.legend_inset_y,left:n.isLegendLeft?n.getCurrentPaddingLeft()+i.legend_inset_x+.5:n.currentWidth-e-n.getCurrentPaddingRight()-i.legend_inset_x+.5};n.margin3={top:n.isLegendRight?0:n.isLegendInset?r.top:n.currentHeight-t,right:NaN,bottom:0,left:n.isLegendRight?n.currentWidth-e:n.isLegendInset?r.left:0}},l.transformLegend=function(t){var e=this;(t?e.legend.transition():e.legend).attr("transform",e.getTranslate("legend"))},l.updateLegendStep=function(t){this.legendStep=t},l.updateLegendItemWidth=function(t){this.legendItemWidth=t},l.updateLegendItemHeight=function(t){this.legendItemHeight=t},l.getLegendWidth=function(){var t=this;return t.config.legend_show?t.isLegendRight||t.isLegendInset?t.legendItemWidth*(t.legendStep+1):t.currentWidth:0},l.getLegendHeight=function(){var t=this,e=0;return t.config.legend_show&&(e=t.isLegendRight?t.currentHeight:Math.max(20,t.legendItemHeight)*(t.legendStep+1)),e},l.opacityForLegend=function(t){return t.classed(d.legendItemHidden)?null:1},l.opacityForUnfocusedLegend=function(t){return t.classed(d.legendItemHidden)?null:.3},l.toggleFocusLegend=function(t,e){var n=this;t=n.mapToTargetIds(t),n.legend.selectAll("."+d.legendItem).filter(function(e){return t.indexOf(e)>=0}).classed(d.legendItemFocused,e).transition().duration(100).style("opacity",function(){var t=e?n.opacityForLegend:n.opacityForUnfocusedLegend;return t.call(n,n.d3.select(this))})},l.revertLegend=function(){var t=this,e=t.d3;t.legend.selectAll("."+d.legendItem).classed(d.legendItemFocused,!1).transition().duration(100).style("opacity",function(){return t.opacityForLegend(e.select(this))})},l.showLegend=function(t){var e=this,n=e.config;n.legend_show||(n.legend_show=!0,e.legend.style("visibility","visible"),e.legendHasRendered||e.updateLegendWithDefaults()),e.removeHiddenLegendIds(t),e.legend.selectAll(e.selectorLegends(t)).style("visibility","visible").transition().style("opacity",function(){return e.opacityForLegend(e.d3.select(this))})},l.hideLegend=function(t){var e=this,n=e.config;n.legend_show&&_(t)&&(n.legend_show=!1,e.legend.style("visibility","hidden")),e.addHiddenLegendIds(t),e.legend.selectAll(e.selectorLegends(t)).style("opacity",0).style("visibility","hidden")},l.clearLegendItemTextBoxCache=function(){this.legendItemTextBox={}},l.updateLegend=function(t,e,n){function i(t,e){return T.legendItemTextBox[e]||(T.legendItemTextBox[e]=T.getTextRect(t.textContent,d.legendItem,t)),T.legendItemTextBox[e]}function r(e,n,r){function a(t,e){e||(o=(p-O-f)/2,o=P)&&(P=d),(!M||h>=M)&&(M=h),s=T.isLegendRight||T.isLegendInset?M:P,void(C.legend_equally?(Object.keys(I).forEach(function(t){I[t]=P}),Object.keys(N).forEach(function(t){N[t]=M}),o=(p-s*t.length)/2,o0&&0===S.size()&&(S=T.legend.insert("g","."+d.legendItem).attr("class",d.legendBackground).append("rect")),x=T.legend.selectAll("text").data(t).text(function(t){return m(C.data_names[t])?C.data_names[t]:t}).each(function(t,e){r(this,t,e)}),(v?x.transition():x).attr("x",o).attr("y",u),_=T.legend.selectAll("rect."+d.legendItemEvent).data(t),(v?_.transition():_).attr("width",function(t){return I[t]}).attr("height",function(t){return N[t]}).attr("x",s).attr("y",c),b=T.legend.selectAll("line."+d.legendItemTile).data(t),(v?b.transition():b).style("stroke",T.color).attr("x1",h).attr("y1",p).attr("x2",f).attr("y2",p),S&&(v?S.transition():S).attr("height",T.getLegendHeight()-12).attr("width",P*(V+1)+10),T.legend.selectAll("."+d.legendItem).classed(d.legendItemHidden,function(t){return!T.isTargetToShow(t)}),T.updateLegendItemWidth(P),T.updateLegendItemHeight(M),T.updateLegendStep(V),T.updateSizes(),T.updateScales(),T.updateSvgSize(),T.transformAll(y,n),T.legendHasRendered=!0},l.initTitle=function(){var t=this;t.title=t.svg.append("text").text(t.config.title_text).attr("class",t.CLASS.title)},l.redrawTitle=function(){var t=this;t.title.attr("x",t.xForTitle.bind(t)).attr("y",t.yForTitle.bind(t))},l.xForTitle=function(){var t,e=this,n=e.config,i=n.title_position||"left";return t=i.indexOf("right")>=0?e.currentWidth-e.getTextRect(e.title.node().textContent,e.CLASS.title,e.title.node()).width-n.title_padding.right:i.indexOf("center")>=0?(e.currentWidth-e.getTextRect(e.title.node().textContent,e.CLASS.title,e.title.node()).width)/2:n.title_padding.left},l.yForTitle=function(){var t=this;return t.config.title_padding.top+t.getTextRect(t.title.node().textContent,t.CLASS.title,t.title.node()).height},l.getTitlePadding=function(){var t=this;return t.yForTitle()+t.config.title_padding.bottom},n(e,a),a.prototype.init=function(){var t=this.owner,e=t.config,n=t.main;t.axes.x=n.append("g").attr("class",d.axis+" "+d.axisX).attr("clip-path",t.clipPathForXAxis).attr("transform",t.getTranslate("x")).style("visibility",e.axis_x_show?"visible":"hidden"),t.axes.x.append("text").attr("class",d.axisXLabel).attr("transform",e.axis_rotated?"rotate(-90)":"").style("text-anchor",this.textAnchorForXAxisLabel.bind(this)),t.axes.y=n.append("g").attr("class",d.axis+" "+d.axisY).attr("clip-path",e.axis_y_inner?"":t.clipPathForYAxis).attr("transform",t.getTranslate("y")).style("visibility",e.axis_y_show?"visible":"hidden"),t.axes.y.append("text").attr("class",d.axisYLabel).attr("transform",e.axis_rotated?"":"rotate(-90)").style("text-anchor",this.textAnchorForYAxisLabel.bind(this)),t.axes.y2=n.append("g").attr("class",d.axis+" "+d.axisY2).attr("transform",t.getTranslate("y2")).style("visibility",e.axis_y2_show?"visible":"hidden"),t.axes.y2.append("text").attr("class",d.axisY2Label).attr("transform",e.axis_rotated?"":"rotate(-90)").style("text-anchor",this.textAnchorForY2AxisLabel.bind(this))},a.prototype.getXAxis=function(t,e,n,i,r,a,s){var l=this.owner,u=l.config,c={isCategory:l.isCategorized(),withOuterTick:r,tickMultiline:u.axis_x_tick_multiline,tickWidth:u.axis_x_tick_width,tickTextRotate:s?0:u.axis_x_tick_rotate,withoutTransition:a},d=o(l.d3,c).scale(t).orient(e);return l.isTimeSeries()&&i&&"function"!=typeof i&&(i=i.map(function(t){return l.parseDate(t)})),d.tickFormat(n).tickValues(i),l.isCategorized()&&(d.tickCentered(u.axis_x_tick_centered),_(u.axis_x_tick_culling)&&(u.axis_x_tick_culling=!1)),d},a.prototype.updateXAxisTickValues=function(t,e){var n,i=this.owner,r=i.config;return(r.axis_x_tick_fit||r.axis_x_tick_count)&&(n=this.generateTickValues(i.mapTargetsToUniqueXs(t),r.axis_x_tick_count,i.isTimeSeries())),e?e.tickValues(n):(i.xAxis.tickValues(n),i.subXAxis.tickValues(n)),n},a.prototype.getYAxis=function(t,e,n,i,r,a,s){var l=this.owner,u=l.config,c={withOuterTick:r,withoutTransition:a,tickTextRotate:s?0:u.axis_y_tick_rotate},d=o(l.d3,c).scale(t).orient(e).tickFormat(n);return l.isTimeSeriesY()?d.ticks(l.d3.time[u.axis_y_tick_time_value],u.axis_y_tick_time_interval):d.tickValues(i),d},a.prototype.getId=function(t){var e=this.owner.config;return t in e.data_axes?e.data_axes[t]:"y"},a.prototype.getXAxisTickFormat=function(){var t=this.owner,e=t.config,n=t.isTimeSeries()?t.defaultAxisTimeFormat:t.isCategorized()?t.categoryName:function(t){return t<0?t.toFixed(0):t};return e.axis_x_tick_format&&(f(e.axis_x_tick_format)?n=e.axis_x_tick_format:t.isTimeSeries()&&(n=function(n){return n?t.axisTimeFormat(e.axis_x_tick_format)(n):""})),f(n)?function(e){return n.call(t,e)}:n},a.prototype.getTickValues=function(t,e){return t?t:e?e.tickValues():void 0},a.prototype.getXAxisTickValues=function(){return this.getTickValues(this.owner.config.axis_x_tick_values,this.owner.xAxis)},a.prototype.getYAxisTickValues=function(){return this.getTickValues(this.owner.config.axis_y_tick_values,this.owner.yAxis)},a.prototype.getY2AxisTickValues=function(){return this.getTickValues(this.owner.config.axis_y2_tick_values,this.owner.y2Axis)},a.prototype.getLabelOptionByAxisId=function(t){var e,n=this.owner,i=n.config;return"y"===t?e=i.axis_y_label:"y2"===t?e=i.axis_y2_label:"x"===t&&(e=i.axis_x_label),e},a.prototype.getLabelText=function(t){var e=this.getLabelOptionByAxisId(t);return p(e)?e:e?e.text:null},a.prototype.setLabelText=function(t,e){var n=this.owner,i=n.config,r=this.getLabelOptionByAxisId(t);p(r)?"y"===t?i.axis_y_label=e:"y2"===t?i.axis_y2_label=e:"x"===t&&(i.axis_x_label=e):r&&(r.text=e)},a.prototype.getLabelPosition=function(t,e){var n=this.getLabelOptionByAxisId(t),i=n&&"object"==typeof n&&n.position?n.position:e;return{isInner:i.indexOf("inner")>=0,isOuter:i.indexOf("outer")>=0,isLeft:i.indexOf("left")>=0,isCenter:i.indexOf("center")>=0,isRight:i.indexOf("right")>=0,isTop:i.indexOf("top")>=0,isMiddle:i.indexOf("middle")>=0,isBottom:i.indexOf("bottom")>=0}},a.prototype.getXAxisLabelPosition=function(){return this.getLabelPosition("x",this.owner.config.axis_rotated?"inner-top":"inner-right")},a.prototype.getYAxisLabelPosition=function(){return this.getLabelPosition("y",this.owner.config.axis_rotated?"inner-right":"inner-top")},a.prototype.getY2AxisLabelPosition=function(){return this.getLabelPosition("y2",this.owner.config.axis_rotated?"inner-right":"inner-top")},a.prototype.getLabelPositionById=function(t){return"y2"===t?this.getY2AxisLabelPosition():"y"===t?this.getYAxisLabelPosition():this.getXAxisLabelPosition()},a.prototype.textForXAxisLabel=function(){return this.getLabelText("x")},a.prototype.textForYAxisLabel=function(){return this.getLabelText("y")},a.prototype.textForY2AxisLabel=function(){return this.getLabelText("y2")},a.prototype.xForAxisLabel=function(t,e){var n=this.owner;return t?e.isLeft?0:e.isCenter?n.width/2:n.width:e.isBottom?-n.height:e.isMiddle?-n.height/2:0},a.prototype.dxForAxisLabel=function(t,e){return t?e.isLeft?"0.5em":e.isRight?"-0.5em":"0":e.isTop?"-0.5em":e.isBottom?"0.5em":"0"},a.prototype.textAnchorForAxisLabel=function(t,e){return t?e.isLeft?"start":e.isCenter?"middle":"end":e.isBottom?"start":e.isMiddle?"middle":"end"},a.prototype.xForXAxisLabel=function(){return this.xForAxisLabel(!this.owner.config.axis_rotated,this.getXAxisLabelPosition())},a.prototype.xForYAxisLabel=function(){return this.xForAxisLabel(this.owner.config.axis_rotated,this.getYAxisLabelPosition())},a.prototype.xForY2AxisLabel=function(){return this.xForAxisLabel(this.owner.config.axis_rotated,this.getY2AxisLabelPosition())},a.prototype.dxForXAxisLabel=function(){return this.dxForAxisLabel(!this.owner.config.axis_rotated,this.getXAxisLabelPosition())},a.prototype.dxForYAxisLabel=function(){return this.dxForAxisLabel(this.owner.config.axis_rotated,this.getYAxisLabelPosition())},a.prototype.dxForY2AxisLabel=function(){return this.dxForAxisLabel(this.owner.config.axis_rotated,this.getY2AxisLabelPosition())},a.prototype.dyForXAxisLabel=function(){var t=this.owner,e=t.config,n=this.getXAxisLabelPosition();return e.axis_rotated?n.isInner?"1.2em":-25-this.getMaxTickWidth("x"):n.isInner?"-0.5em":e.axis_x_height?e.axis_x_height-10:"3em"},a.prototype.dyForYAxisLabel=function(){var t=this.owner,e=this.getYAxisLabelPosition();return t.config.axis_rotated?e.isInner?"-0.5em":"3em":e.isInner?"1.2em":-10-(t.config.axis_y_inner?0:this.getMaxTickWidth("y")+10)},a.prototype.dyForY2AxisLabel=function(){var t=this.owner,e=this.getY2AxisLabelPosition();return t.config.axis_rotated?e.isInner?"1.2em":"-2.2em":e.isInner?"-0.5em":15+(t.config.axis_y2_inner?0:this.getMaxTickWidth("y2")+15)},a.prototype.textAnchorForXAxisLabel=function(){var t=this.owner;return this.textAnchorForAxisLabel(!t.config.axis_rotated,this.getXAxisLabelPosition())},a.prototype.textAnchorForYAxisLabel=function(){var t=this.owner;return this.textAnchorForAxisLabel(t.config.axis_rotated,this.getYAxisLabelPosition())},a.prototype.textAnchorForY2AxisLabel=function(){var t=this.owner;return this.textAnchorForAxisLabel(t.config.axis_rotated,this.getY2AxisLabelPosition())},a.prototype.getMaxTickWidth=function(t,e){var n,i,r,a,o,s=this.owner,l=s.config,u=0;return e&&s.currentMaxTickWidths[t]?s.currentMaxTickWidths[t]:(s.svg&&(n=s.filterTargetsToShow(s.data.targets),"y"===t?(i=s.y.copy().domain(s.getYDomain(n,"y")),r=this.getYAxis(i,s.yOrient,l.axis_y_tick_format,s.yAxisTickValues,!1,!0,!0)):"y2"===t?(i=s.y2.copy().domain(s.getYDomain(n,"y2")),r=this.getYAxis(i,s.y2Orient,l.axis_y2_tick_format,s.y2AxisTickValues,!1,!0,!0)):(i=s.x.copy().domain(s.getXDomain(n)),r=this.getXAxis(i,s.xOrient,s.xAxisTickFormat,s.xAxisTickValues,!1,!0,!0),this.updateXAxisTickValues(n,r)),a=s.d3.select("body").append("div").classed("c3",!0),o=a.append("svg").style("visibility","hidden").style("position","fixed").style("top",0).style("left",0),o.append("g").call(r).each(function(){s.d3.select(this).selectAll("text").each(function(){var t=this.getBoundingClientRect();u2){for(o=i-2,r=t[0],a=t[t.length-1],s=(a-r)/(o+1),c=[r],l=0;l=0;return"url("+(n?"":document.URL.split("#")[0])+"#"+e+")"},l.appendClip=function(t,e){return t.append("clipPath").attr("id",e).append("rect")},l.getAxisClipX=function(t){var e=Math.max(30,this.margin.left);return t?-(1+e):-(e-1)},l.getAxisClipY=function(t){return t?-20:-this.margin.top},l.getXAxisClipX=function(){var t=this;return t.getAxisClipX(!t.config.axis_rotated)},l.getXAxisClipY=function(){var t=this;return t.getAxisClipY(!t.config.axis_rotated)},l.getYAxisClipX=function(){var t=this;return t.config.axis_y_inner?-1:t.getAxisClipX(t.config.axis_rotated)},l.getYAxisClipY=function(){var t=this;return t.getAxisClipY(t.config.axis_rotated)},l.getAxisClipWidth=function(t){var e=this,n=Math.max(30,e.margin.left),i=Math.max(30,e.margin.right);return t?e.width+2+n+i:e.margin.left+20},l.getAxisClipHeight=function(t){return(t?this.margin.bottom:this.margin.top+this.height)+20},l.getXAxisClipWidth=function(){var t=this;return t.getAxisClipWidth(!t.config.axis_rotated)},l.getXAxisClipHeight=function(){var t=this;return t.getAxisClipHeight(!t.config.axis_rotated)},l.getYAxisClipWidth=function(){var t=this;return t.getAxisClipWidth(t.config.axis_rotated)+(t.config.axis_y_inner?20:0)},l.getYAxisClipHeight=function(){var t=this;return t.getAxisClipHeight(t.config.axis_rotated)},l.initPie=function(){var t=this,e=t.d3,n=t.config;t.pie=e.layout.pie().value(function(t){return t.values.reduce(function(t,e){return t+e.value},0)}),n.data_order||t.pie.sort(null)},l.updateRadius=function(){var t=this,e=t.config,n=e.gauge_width||e.donut_width;t.radiusExpanded=Math.min(t.arcWidth,t.arcHeight)/2,t.radius=.95*t.radiusExpanded,t.innerRadiusRatio=n?(t.radius-n)/t.radius:.6,t.innerRadius=t.hasType("donut")||t.hasType("gauge")?t.radius*t.innerRadiusRatio:0},l.updateArc=function(){var t=this;t.svgArc=t.getSvgArc(),t.svgArcExpanded=t.getSvgArcExpanded(),t.svgArcExpandedSub=t.getSvgArcExpanded(.98)},l.updateAngle=function(t){var e,n,i,r,a=this,o=a.config,s=!1,l=0;return o?(a.pie(a.filterTargetsToShow(a.data.targets)).forEach(function(e){s||e.data.id!==t.data.id||(s=!0,t=e,t.index=l),l++}),isNaN(t.startAngle)&&(t.startAngle=0),isNaN(t.endAngle)&&(t.endAngle=t.startAngle),a.isGaugeType(t.data)&&(e=o.gauge_min,n=o.gauge_max,i=Math.PI*(o.gauge_fullCircle?2:1)/(n-e),r=t.value.375?1.175-36/o.radius:.8)*o.radius/r:0,u="translate("+n*a+","+i*a+")"),u},l.getArcRatio=function(t){var e=this,n=e.config,i=Math.PI*(e.hasType("gauge")&&!n.gauge_fullCircle?1:2);return t?(t.endAngle-t.startAngle)/i:null},l.convertToArcData=function(t){return this.addName({id:t.data.id,value:t.value,ratio:this.getArcRatio(t),index:t.index})},l.textForArcLabel=function(t){var e,n,i,r,a,o=this;return o.shouldShowArcLabel()?(e=o.updateAngle(t),n=e?e.value:null,i=o.getArcRatio(e),r=t.data.id,o.hasType("gauge")||o.meetsArcLabelThreshold(i)?(a=o.getArcLabelFormat(),a?a(n,i,r):o.defaultArcValueFormat(n,i)):""):""},l.expandArc=function(e){var n,i=this;return i.transiting?void(n=t.setInterval(function(){i.transiting||(t.clearInterval(n),i.legend.selectAll(".c3-legend-item-focused").size()>0&&i.expandArc(e))},10)):(e=i.mapToTargetIds(e),void i.svg.selectAll(i.selectorTargets(e,"."+d.chartArc)).each(function(t){i.shouldExpand(t.data.id)&&i.d3.select(this).selectAll("path").transition().duration(i.expandDuration(t.data.id)).attr("d",i.svgArcExpanded).transition().duration(2*i.expandDuration(t.data.id)).attr("d",i.svgArcExpandedSub).each(function(t){i.isDonutType(t.data)})}))},l.unexpandArc=function(t){var e=this;e.transiting||(t=e.mapToTargetIds(t),e.svg.selectAll(e.selectorTargets(t,"."+d.chartArc)).selectAll("path").transition().duration(function(t){return e.expandDuration(t.data.id)}).attr("d",e.svgArc),e.svg.selectAll("."+d.arc).style("opacity",1))},l.expandDuration=function(t){var e=this,n=e.config;return e.isDonutType(t)?n.donut_expand_duration:e.isGaugeType(t)?n.gauge_expand_duration:e.isPieType(t)?n.pie_expand_duration:50},l.shouldExpand=function(t){var e=this,n=e.config;return e.isDonutType(t)&&n.donut_expand||e.isGaugeType(t)&&n.gauge_expand||e.isPieType(t)&&n.pie_expand},l.shouldShowArcLabel=function(){var t=this,e=t.config,n=!0;return t.hasType("donut")?n=e.donut_label_show:t.hasType("pie")&&(n=e.pie_label_show),n},l.meetsArcLabelThreshold=function(t){var e=this,n=e.config,i=e.hasType("donut")?n.donut_label_threshold:n.pie_label_threshold;return t>=i},l.getArcLabelFormat=function(){var t=this,e=t.config,n=e.pie_label_format;return t.hasType("gauge")?n=e.gauge_label_format:t.hasType("donut")&&(n=e.donut_label_format),n},l.getArcTitle=function(){var t=this;return t.hasType("donut")?t.config.donut_title:""},l.updateTargetsForArc=function(t){var e,n,i=this,r=i.main,a=i.classChartArc.bind(i),o=i.classArcs.bind(i),s=i.classFocus.bind(i);e=r.select("."+d.chartArcs).selectAll("."+d.chartArc).data(i.pie(t)).attr("class",function(t){return a(t)+s(t.data)}),n=e.enter().append("g").attr("class",a),n.append("g").attr("class",o),n.append("text").attr("dy",i.hasType("gauge")?"-.1em":".35em").style("opacity",0).style("text-anchor","middle").style("pointer-events","none")},l.initArc=function(){var t=this;t.arcs=t.main.select("."+d.chart).append("g").attr("class",d.chartArcs).attr("transform",t.getTranslate("arc")),t.arcs.append("text").attr("class",d.chartArcsTitle).style("text-anchor","middle").text(t.getArcTitle())},l.redrawArc=function(t,e,n){var i,r=this,a=r.d3,o=r.config,s=r.main;i=s.selectAll("."+d.arcs).selectAll("."+d.arc).data(r.arcData.bind(r)),i.enter().append("path").attr("class",r.classArc.bind(r)).style("fill",function(t){return r.color(t.data)}).style("cursor",function(t){return o.interaction_enabled&&o.data_selection_isselectable(t)?"pointer":null}).style("opacity",0).each(function(t){r.isGaugeType(t.data)&&(t.startAngle=t.endAngle=o.gauge_startingAngle),this._current=t}),i.attr("transform",function(t){return!r.isGaugeType(t.data)&&n?"scale(0)":""}).style("opacity",function(t){return t===this._current?0:1}).on("mouseover",o.interaction_enabled?function(t){var e,n;r.transiting||(e=r.updateAngle(t),e&&(n=r.convertToArcData(e),r.expandArc(e.data.id),r.api.focus(e.data.id),r.toggleFocusLegend(e.data.id,!0),r.config.data_onmouseover(n,this)))}:null).on("mousemove",o.interaction_enabled?function(t){var e,n,i=r.updateAngle(t);i&&(e=r.convertToArcData(i),n=[e],r.showTooltip(n,this))}:null).on("mouseout",o.interaction_enabled?function(t){var e,n;r.transiting||(e=r.updateAngle(t),e&&(n=r.convertToArcData(e),r.unexpandArc(e.data.id),r.api.revert(),r.revertLegend(),r.hideTooltip(),r.config.data_onmouseout(n,this)))}:null).on("click",o.interaction_enabled?function(t,e){var n,i=r.updateAngle(t);i&&(n=r.convertToArcData(i),r.toggleShape&&r.toggleShape(this,n,e),r.config.data_onclick.call(r.api,n,this))}:null).each(function(){r.transiting=!0}).transition().duration(t).attrTween("d",function(t){var e,n=r.updateAngle(t);return n?(isNaN(this._current.startAngle)&&(this._current.startAngle=0),isNaN(this._current.endAngle)&&(this._current.endAngle=this._current.startAngle),e=a.interpolate(this._current,n),this._current=e(0),function(n){var i=e(n);return i.data=t.data,r.getArc(i,!0)}):function(){return"M 0 0"}}).attr("transform",n?"scale(1)":"").style("fill",function(t){return r.levelColor?r.levelColor(t.data.values[0].value):r.color(t.data.id)}).style("opacity",1).call(r.endall,function(){r.transiting=!1}),i.exit().transition().duration(e).style("opacity",0).remove(),s.selectAll("."+d.chartArc).select("text").style("opacity",0).attr("class",function(t){return r.isGaugeType(t.data)?d.gaugeValue:""}).text(r.textForArcLabel.bind(r)).attr("transform",r.transformForArcLabel.bind(r)).style("font-size",function(t){return r.isGaugeType(t.data)?Math.round(r.radius/5)+"px":""}).transition().duration(t).style("opacity",function(t){return r.isTargetToShow(t.data.id)&&r.isArcType(t.data)?1:0}),s.select("."+d.chartArcsTitle).style("opacity",r.hasType("donut")||r.hasType("gauge")?1:0),r.hasType("gauge")&&(r.arcs.select("."+d.chartArcsBackground).attr("d",function(){var t={data:[{value:o.gauge_max}],startAngle:o.gauge_startingAngle,endAngle:-1*o.gauge_startingAngle};return r.getArc(t,!0,!0)}),r.arcs.select("."+d.chartArcsGaugeUnit).attr("dy",".75em").text(o.gauge_label_show?o.gauge_units:""),r.arcs.select("."+d.chartArcsGaugeMin).attr("dx",-1*(r.innerRadius+(r.radius-r.innerRadius)/(o.gauge_fullCircle?1:2))+"px").attr("dy","1.2em").text(o.gauge_label_show?o.gauge_min:""),r.arcs.select("."+d.chartArcsGaugeMax).attr("dx",r.innerRadius+(r.radius-r.innerRadius)/(o.gauge_fullCircle?1:2)+"px").attr("dy","1.2em").text(o.gauge_label_show?o.gauge_max:""))},l.initGauge=function(){var t=this.arcs;this.hasType("gauge")&&(t.append("path").attr("class",d.chartArcsBackground),t.append("text").attr("class",d.chartArcsGaugeUnit).style("text-anchor","middle").style("pointer-events","none"),t.append("text").attr("class",d.chartArcsGaugeMin).style("text-anchor","middle").style("pointer-events","none"),t.append("text").attr("class",d.chartArcsGaugeMax).style("text-anchor","middle").style("pointer-events","none"))},l.getGaugeLabelHeight=function(){return this.config.gauge_label_show?20:0},l.initRegion=function(){var t=this;t.region=t.main.append("g").attr("clip-path",t.clipPath).attr("class",d.regions)},l.updateRegion=function(t){var e=this,n=e.config;e.region.style("visibility",e.hasArcType()?"hidden":"visible"),e.mainRegion=e.main.select("."+d.regions).selectAll("."+d.region).data(n.regions),e.mainRegion.enter().append("g").append("rect").style("fill-opacity",0),e.mainRegion.attr("class",e.classRegion.bind(e)),e.mainRegion.exit().transition().duration(t).style("opacity",0).remove()},l.redrawRegion=function(t){var e=this,n=e.mainRegion.selectAll("rect").each(function(){var t=e.d3.select(this.parentNode).datum();e.d3.select(this).datum(t)}),i=e.regionX.bind(e),r=e.regionY.bind(e),a=e.regionWidth.bind(e),o=e.regionHeight.bind(e);return[(t?n.transition():n).attr("x",i).attr("y",r).attr("width",a).attr("height",o).style("fill-opacity",function(t){return h(t.opacity)?t.opacity:.1})]},l.regionX=function(t){var e,n=this,i=n.config,r="y"===t.axis?n.y:n.y2;return e="y"===t.axis||"y2"===t.axis?i.axis_rotated&&"start"in t?r(t.start):0:i.axis_rotated?0:"start"in t?n.x(n.isTimeSeries()?n.parseDate(t.start):t.start):0},l.regionY=function(t){var e,n=this,i=n.config,r="y"===t.axis?n.y:n.y2;return e="y"===t.axis||"y2"===t.axis?i.axis_rotated?0:"end"in t?r(t.end):0:i.axis_rotated&&"start"in t?n.x(n.isTimeSeries()?n.parseDate(t.start):t.start):0},l.regionWidth=function(t){var e,n=this,i=n.config,r=n.regionX(t),a="y"===t.axis?n.y:n.y2;return e="y"===t.axis||"y2"===t.axis?i.axis_rotated&&"end"in t?a(t.end):n.width:i.axis_rotated?n.width:"end"in t?n.x(n.isTimeSeries()?n.parseDate(t.end):t.end):n.width,e=0?d.focused:"")},l.classDefocused=function(t){return" "+(this.defocusedTargetIds.indexOf(t.id)>=0?d.defocused:"")},l.classChartText=function(t){return d.chartText+this.classTarget(t.id)},l.classChartLine=function(t){return d.chartLine+this.classTarget(t.id)},l.classChartBar=function(t){return d.chartBar+this.classTarget(t.id)},l.classChartArc=function(t){return d.chartArc+this.classTarget(t.data.id)},l.getTargetSelectorSuffix=function(t){return t||0===t?("-"+t).replace(/[\s?!@#$%^&*()_=+,.<>'":;\[\]\/|~`{}\\]/g,"-"):""},l.selectorTarget=function(t,e){return(e||"")+"."+d.target+this.getTargetSelectorSuffix(t)},l.selectorTargets=function(t,e){var n=this;return t=t||[],t.length?t.map(function(t){return n.selectorTarget(t,e)}):null},l.selectorLegend=function(t){return"."+d.legendItem+this.getTargetSelectorSuffix(t)},l.selectorLegends=function(t){var e=this;return t&&t.length?t.map(function(t){return e.selectorLegend(t)}):null};var h=l.isValue=function(t){return t||0===t},f=l.isFunction=function(t){return"function"==typeof t},p=l.isString=function(t){return"string"==typeof t},g=l.isUndefined=function(t){return"undefined"==typeof t},m=l.isDefined=function(t){return"undefined"!=typeof t},v=l.ceil10=function(t){return 10*Math.ceil(t/10)},y=l.asHalfPixel=function(t){return Math.ceil(t)+.5},x=l.diffDomain=function(t){return t[1]-t[0]},_=l.isEmpty=function(t){return"undefined"==typeof t||null===t||p(t)&&0===t.length||"object"==typeof t&&0===Object.keys(t).length},b=l.notEmpty=function(t){return!l.isEmpty(t)},w=l.getOption=function(t,e,n){return m(t[e])?t[e]:n},S=l.hasValue=function(t,e){var n=!1;return Object.keys(t).forEach(function(i){t[i]===e&&(n=!0)}),n},T=l.sanitise=function(t){return"string"==typeof t?t.replace(//g,">"):t},C=l.getPathBox=function(t){var e=t.getBoundingClientRect(),n=[t.pathSegList.getItem(0),t.pathSegList.getItem(1)],i=n[0].x,r=Math.min(n[0].y,n[1].y);return{x:i,y:r,width:e.width,height:e.height}};s.focus=function(t){var e,n=this.internal;t=n.mapToTargetIds(t),e=n.svg.selectAll(n.selectorTargets(t.filter(n.isTargetToShow,n))),this.revert(),this.defocus(),e.classed(d.focused,!0).classed(d.defocused,!1),n.hasArcType()&&n.expandArc(t),n.toggleFocusLegend(t,!0),n.focusedTargetIds=t,n.defocusedTargetIds=n.defocusedTargetIds.filter(function(e){return t.indexOf(e)<0})},s.defocus=function(t){var e,n=this.internal;t=n.mapToTargetIds(t),e=n.svg.selectAll(n.selectorTargets(t.filter(n.isTargetToShow,n))),e.classed(d.focused,!1).classed(d.defocused,!0),n.hasArcType()&&n.unexpandArc(t),n.toggleFocusLegend(t,!1),n.focusedTargetIds=n.focusedTargetIds.filter(function(e){return t.indexOf(e)<0}),n.defocusedTargetIds=t},s.revert=function(t){var e,n=this.internal;t=n.mapToTargetIds(t),e=n.svg.selectAll(n.selectorTargets(t)),e.classed(d.focused,!1).classed(d.defocused,!1),n.hasArcType()&&n.unexpandArc(t),n.config.legend_show&&(n.showLegend(t.filter(n.isLegendToShow.bind(n))),n.legend.selectAll(n.selectorLegends(t)).filter(function(){return n.d3.select(this).classed(d.legendItemFocused)}).classed(d.legendItemFocused,!1)),n.focusedTargetIds=[],n.defocusedTargetIds=[]},s.show=function(t,e){var n,i=this.internal;t=i.mapToTargetIds(t),e=e||{},i.removeHiddenTargetIds(t),n=i.svg.selectAll(i.selectorTargets(t)),n.transition().style("opacity",1,"important").call(i.endall,function(){n.style("opacity",null).style("opacity",1)}),e.withLegend&&i.showLegend(t),i.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0})},s.hide=function(t,e){var n,i=this.internal;t=i.mapToTargetIds(t),e=e||{},i.addHiddenTargetIds(t),n=i.svg.selectAll(i.selectorTargets(t)),n.transition().style("opacity",0,"important").call(i.endall,function(){n.style("opacity",null).style("opacity",0)}),e.withLegend&&i.hideLegend(t),i.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0})},s.toggle=function(t,e){var n=this,i=this.internal;i.mapToTargetIds(t).forEach(function(t){i.isTargetToShow(t)?n.hide(t,e):n.show(t,e)})},s.zoom=function(t){var e=this.internal;return t&&(e.isTimeSeries()&&(t=t.map(function(t){return e.parseDate(t)})),e.brush.extent(t),e.redraw({withUpdateXDomain:!0,withY:e.config.zoom_rescale}),e.config.zoom_onzoom.call(this,e.x.orgDomain())),e.brush.extent()},s.zoom.enable=function(t){var e=this.internal;e.config.zoom_enabled=t,e.updateAndRedraw()},s.unzoom=function(){var t=this.internal;t.brush.clear().update(),t.redraw({withUpdateXDomain:!0})},s.zoom.max=function(t){var e=this.internal,n=e.config,i=e.d3;return 0===t||t?void(n.zoom_x_max=i.max([e.orgXDomain[1],t])):n.zoom_x_max},s.zoom.min=function(t){var e=this.internal,n=e.config,i=e.d3;return 0===t||t?void(n.zoom_x_min=i.min([e.orgXDomain[0],t])):n.zoom_x_min},s.zoom.range=function(t){return arguments.length?(m(t.max)&&this.domain.max(t.max),void(m(t.min)&&this.domain.min(t.min))):{max:this.domain.max(),min:this.domain.min()}},s.load=function(t){var e=this.internal,n=e.config;return t.xs&&e.addXs(t.xs),"names"in t&&s.data.names.bind(this)(t.names),"classes"in t&&Object.keys(t.classes).forEach(function(e){n.data_classes[e]=t.classes[e]}),"categories"in t&&e.isCategorized()&&(n.axis_x_categories=t.categories),"axes"in t&&Object.keys(t.axes).forEach(function(e){n.data_axes[e]=t.axes[e]}),"colors"in t&&Object.keys(t.colors).forEach(function(e){n.data_colors[e]=t.colors[e]}),"cacheIds"in t&&e.hasCaches(t.cacheIds)?void e.load(e.getCaches(t.cacheIds),t.done):void("unload"in t?e.unload(e.mapToTargetIds("boolean"==typeof t.unload&&t.unload?null:t.unload),function(){e.loadFromArgs(t)}):e.loadFromArgs(t))},s.unload=function(t){var e=this.internal;t=t||{},t instanceof Array?t={ids:t}:"string"==typeof t&&(t={ids:[t]}),e.unload(e.mapToTargetIds(t.ids),function(){e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0}),t.done&&t.done()})},s.flow=function(t){var e,n,i,r,a,o,s,l,u=this.internal,c=[],d=u.getMaxDataCount(),f=0,p=0;if(t.json)n=u.convertJsonToData(t.json,t.keys);else if(t.rows)n=u.convertRowsToData(t.rows);else{if(!t.columns)return;n=u.convertColumnsToData(t.columns)}e=u.convertDataToTargets(n,!0),u.data.targets.forEach(function(t){var n,i,r=!1;for(n=0;n1?a.values[a.values.length-1].x-o.x:o.x-u.getXDomain(u.data.targets)[0]:1,r=[o.x-s,o.x],u.updateXDomain(null,!0,!0,!1,r)),u.updateTargets(u.data.targets),u.redraw({flow:{index:o.index,length:f,duration:h(t.duration)?t.duration:u.config.transition_duration,done:t.done,orgDataCount:d},withLegend:!0,withTransition:d>1,withTrimXDomain:!1,withUpdateXAxis:!0})},l.generateFlow=function(t){ -var e=this,n=e.config,i=e.d3;return function(){var r,a,o,s=t.targets,l=t.flow,u=t.drawBar,c=t.drawLine,h=t.drawArea,f=t.cx,p=t.cy,g=t.xv,m=t.xForText,v=t.yForText,y=t.duration,_=1,b=l.index,w=l.length,S=e.getValueOnIndex(e.data.targets[0].values,b),T=e.getValueOnIndex(e.data.targets[0].values,b+w),C=e.x.domain(),A=l.duration||y,k=l.done||function(){},P=e.generateWait(),M=e.xgrid||i.selectAll([]),E=e.xgridLines||i.selectAll([]),D=e.mainRegion||i.selectAll([]),O=e.mainText||i.selectAll([]),L=e.mainBar||i.selectAll([]),I=e.mainLine||i.selectAll([]),N=e.mainArea||i.selectAll([]),R=e.mainCircle||i.selectAll([]);e.flowing=!0,e.data.targets.forEach(function(t){t.values.splice(0,w)}),o=e.updateXDomain(s,!0,!0),e.updateXGrid&&e.updateXGrid(!0),l.orgDataCount?r=1===l.orgDataCount||(S&&S.x)===(T&&T.x)?e.x(C[0])-e.x(o[0]):e.isTimeSeries()?e.x(C[0])-e.x(o[0]):e.x(S.x)-e.x(T.x):1!==e.data.targets[0].values.length?r=e.x(C[0])-e.x(o[0]):e.isTimeSeries()?(S=e.getValueOnIndex(e.data.targets[0].values,0),T=e.getValueOnIndex(e.data.targets[0].values,e.data.targets[0].values.length-1),r=e.x(S.x)-e.x(T.x)):r=x(o)/2,_=x(C)/x(o),a="translate("+r+",0) scale("+_+",1)",e.hideXGridFocus(),i.transition().ease("linear").duration(A).each(function(){P.add(e.axes.x.transition().call(e.xAxis)),P.add(L.transition().attr("transform",a)),P.add(I.transition().attr("transform",a)),P.add(N.transition().attr("transform",a)),P.add(R.transition().attr("transform",a)),P.add(O.transition().attr("transform",a)),P.add(D.filter(e.isRegionOnX).transition().attr("transform",a)),P.add(M.transition().attr("transform",a)),P.add(E.transition().attr("transform",a))}).call(P,function(){var t,i=[],r=[],a=[];if(w){for(t=0;t=0,f=!e||e.indexOf(s)>=0,p=l.classed(d.SELECTED);l.classed(d.line)||l.classed(d.area)||(h&&f?a.data_selection_isselectable(o)&&!p&&c(!0,l.classed(d.SELECTED,!0),o,s):m(n)&&n&&p&&c(!1,l.classed(d.SELECTED,!1),o,s))})},s.unselect=function(t,e){var n=this.internal,i=n.d3,r=n.config;r.data_selection_enabled&&n.main.selectAll("."+d.shapes).selectAll("."+d.shape).each(function(a,o){var s=i.select(this),l=a.data?a.data.id:a.id,u=n.getToggle(this,a).bind(n),c=r.data_selection_grouped||!t||t.indexOf(l)>=0,h=!e||e.indexOf(o)>=0,f=s.classed(d.SELECTED);s.classed(d.line)||s.classed(d.area)||c&&h&&r.data_selection_isselectable(a)&&f&&u(!1,s.classed(d.SELECTED,!1),a,o)})},s.transform=function(t,e){var n=this.internal,i=["pie","donut"].indexOf(t)>=0?{withTransform:!0}:null;n.transformTo(e,t,i)},l.transformTo=function(t,e,n){var i=this,r=!i.hasArcType(),a=n||{withTransitionForAxis:r};a.withTransitionForTransform=!1,i.transiting=!1,i.setTargetType(t,e),i.updateTargets(i.data.targets),i.updateAndRedraw(a)},s.groups=function(t){var e=this.internal,n=e.config;return g(t)?n.data_groups:(n.data_groups=t,e.redraw(),n.data_groups)},s.xgrids=function(t){var e=this.internal,n=e.config;return t?(n.grid_x_lines=t,e.redrawWithoutRescale(),n.grid_x_lines):n.grid_x_lines},s.xgrids.add=function(t){var e=this.internal;return this.xgrids(e.config.grid_x_lines.concat(t?t:[]))},s.xgrids.remove=function(t){var e=this.internal;e.removeGridLines(t,!0)},s.ygrids=function(t){var e=this.internal,n=e.config;return t?(n.grid_y_lines=t,e.redrawWithoutRescale(),n.grid_y_lines):n.grid_y_lines},s.ygrids.add=function(t){var e=this.internal;return this.ygrids(e.config.grid_y_lines.concat(t?t:[]))},s.ygrids.remove=function(t){var e=this.internal;e.removeGridLines(t,!1)},s.regions=function(t){var e=this.internal,n=e.config;return t?(n.regions=t,e.redrawWithoutRescale(),n.regions):n.regions},s.regions.add=function(t){var e=this.internal,n=e.config;return t?(n.regions=n.regions.concat(t),e.redrawWithoutRescale(),n.regions):n.regions},s.regions.remove=function(t){var e,n,i,r=this.internal,a=r.config;return t=t||{},e=r.getOption(t,"duration",a.transition_duration),n=r.getOption(t,"classes",[d.region]),i=r.main.select("."+d.regions).selectAll(n.map(function(t){return"."+t})),(e?i.transition().duration(e):i).style("opacity",0).remove(),a.regions=a.regions.filter(function(t){var e=!1;return!t["class"]||(t["class"].split(" ").forEach(function(t){n.indexOf(t)>=0&&(e=!0)}),!e)}),a.regions},s.data=function(t){var e=this.internal.data.targets;return"undefined"==typeof t?e:e.filter(function(e){return[].concat(t).indexOf(e.id)>=0})},s.data.shown=function(t){return this.internal.filterTargetsToShow(this.data(t))},s.data.values=function(t){var e,n=null;return t&&(e=this.data(t),n=e[0]?e[0].values.map(function(t){return t.value}):null),n},s.data.names=function(t){return this.internal.clearLegendItemTextBoxCache(),this.internal.updateDataAttributes("names",t)},s.data.colors=function(t){return this.internal.updateDataAttributes("colors",t)},s.data.axes=function(t){return this.internal.updateDataAttributes("axes",t)},s.category=function(t,e){var n=this.internal,i=n.config;return arguments.length>1&&(i.axis_x_categories[t]=e,n.redraw()),i.axis_x_categories[t]},s.categories=function(t){var e=this.internal,n=e.config;return arguments.length?(n.axis_x_categories=t,e.redraw(),n.axis_x_categories):n.axis_x_categories},s.color=function(t){var e=this.internal;return e.color(t)},s.x=function(t){var e=this.internal;return arguments.length&&(e.updateTargetX(e.data.targets,t),e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})),e.data.xs},s.xs=function(t){var e=this.internal;return arguments.length&&(e.updateTargetXs(e.data.targets,t),e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})),e.data.xs},s.axis=function(){},s.axis.labels=function(t){var e=this.internal;arguments.length&&(Object.keys(t).forEach(function(n){e.axis.setLabelText(n,t[n])}),e.axis.updateLabels())},s.axis.max=function(t){var e=this.internal,n=e.config;return arguments.length?("object"==typeof t?(h(t.x)&&(n.axis_x_max=t.x),h(t.y)&&(n.axis_y_max=t.y),h(t.y2)&&(n.axis_y2_max=t.y2)):n.axis_y_max=n.axis_y2_max=t,void e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})):{x:n.axis_x_max,y:n.axis_y_max,y2:n.axis_y2_max}},s.axis.min=function(t){var e=this.internal,n=e.config;return arguments.length?("object"==typeof t?(h(t.x)&&(n.axis_x_min=t.x),h(t.y)&&(n.axis_y_min=t.y),h(t.y2)&&(n.axis_y2_min=t.y2)):n.axis_y_min=n.axis_y2_min=t,void e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})):{x:n.axis_x_min,y:n.axis_y_min,y2:n.axis_y2_min}},s.axis.range=function(t){return arguments.length?(m(t.max)&&this.axis.max(t.max),void(m(t.min)&&this.axis.min(t.min))):{max:this.axis.max(),min:this.axis.min()}},s.legend=function(){},s.legend.show=function(t){var e=this.internal;e.showLegend(e.mapToTargetIds(t)),e.updateAndRedraw({withLegend:!0})},s.legend.hide=function(t){var e=this.internal;e.hideLegend(e.mapToTargetIds(t)),e.updateAndRedraw({withLegend:!0})},s.resize=function(t){var e=this.internal,n=e.config;n.size_width=t?t.width:null,n.size_height=t?t.height:null,this.flush()},s.flush=function(){var t=this.internal;t.updateAndRedraw({withLegend:!0,withTransition:!1,withTransitionForTransform:!1})},s.destroy=function(){var e=this.internal;if(t.clearInterval(e.intervalForObserveInserted),void 0!==e.resizeTimeout&&t.clearTimeout(e.resizeTimeout),t.detachEvent)t.detachEvent("onresize",e.resizeFunction);else if(t.removeEventListener)t.removeEventListener("resize",e.resizeFunction);else{var n=t.onresize;n&&n.add&&n.remove&&n.remove(e.resizeFunction)}return e.selectChart.classed("c3",!1).html(""),Object.keys(e).forEach(function(t){e[t]=null}),null},s.tooltip=function(){},s.tooltip.show=function(t){var e,n,i=this.internal;t.mouse&&(n=t.mouse),t.data?i.isMultipleX()?(n=[i.x(t.data.x),i.getYScale(t.data.id)(t.data.value)],e=null):e=h(t.data.index)?t.data.index:i.getIndexByX(t.data.x):"undefined"!=typeof t.x?e=i.getIndexByX(t.x):"undefined"!=typeof t.index&&(e=t.index),i.dispatchEvent("mouseover",e,n),i.dispatchEvent("mousemove",e,n),i.config.tooltip_onshow.call(i,t.data)},s.tooltip.hide=function(){this.internal.dispatchEvent("mouseout",0),this.internal.config.tooltip_onhide.call(this)};var A;l.isSafari=function(){var e=t.navigator.userAgent;return e.indexOf("Safari")>=0&&e.indexOf("Chrome")<0},l.isChrome=function(){var e=t.navigator.userAgent;return e.indexOf("Chrome")>=0},Function.prototype.bind||(Function.prototype.bind=function(t){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var e=Array.prototype.slice.call(arguments,1),n=this,i=function(){},r=function(){return n.apply(this instanceof i?this:t,e.concat(Array.prototype.slice.call(arguments)))};return i.prototype=this.prototype,r.prototype=new i,r}),function(){"SVGPathSeg"in t||(t.SVGPathSeg=function(t,e,n){this.pathSegType=t,this.pathSegTypeAsLetter=e,this._owningPathSegList=n},SVGPathSeg.PATHSEG_UNKNOWN=0,SVGPathSeg.PATHSEG_CLOSEPATH=1,SVGPathSeg.PATHSEG_MOVETO_ABS=2,SVGPathSeg.PATHSEG_MOVETO_REL=3,SVGPathSeg.PATHSEG_LINETO_ABS=4,SVGPathSeg.PATHSEG_LINETO_REL=5,SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS=6,SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL=7,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS=8,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL=9,SVGPathSeg.PATHSEG_ARC_ABS=10,SVGPathSeg.PATHSEG_ARC_REL=11,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS=12,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL=13,SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS=14,SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL=15,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS=16,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL=17,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS=18,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL=19,SVGPathSeg.prototype._segmentChanged=function(){this._owningPathSegList&&this._owningPathSegList.segmentChanged(this)},t.SVGPathSegClosePath=function(t){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CLOSEPATH,"z",t)},SVGPathSegClosePath.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegClosePath.prototype.toString=function(){return"[object SVGPathSegClosePath]"},SVGPathSegClosePath.prototype._asPathString=function(){return this.pathSegTypeAsLetter},SVGPathSegClosePath.prototype.clone=function(){return new SVGPathSegClosePath((void 0))},t.SVGPathSegMovetoAbs=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_MOVETO_ABS,"M",t),this._x=e,this._y=n},SVGPathSegMovetoAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegMovetoAbs.prototype.toString=function(){return"[object SVGPathSegMovetoAbs]"},SVGPathSegMovetoAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegMovetoAbs.prototype.clone=function(){return new SVGPathSegMovetoAbs((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegMovetoAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegMovetoAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegMovetoRel=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_MOVETO_REL,"m",t),this._x=e,this._y=n},SVGPathSegMovetoRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegMovetoRel.prototype.toString=function(){return"[object SVGPathSegMovetoRel]"},SVGPathSegMovetoRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegMovetoRel.prototype.clone=function(){return new SVGPathSegMovetoRel((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegMovetoRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegMovetoRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoAbs=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_ABS,"L",t),this._x=e,this._y=n},SVGPathSegLinetoAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoAbs.prototype.toString=function(){return"[object SVGPathSegLinetoAbs]"},SVGPathSegLinetoAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegLinetoAbs.prototype.clone=function(){return new SVGPathSegLinetoAbs((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegLinetoAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegLinetoAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoRel=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_REL,"l",t),this._x=e,this._y=n},SVGPathSegLinetoRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoRel.prototype.toString=function(){return"[object SVGPathSegLinetoRel]"},SVGPathSegLinetoRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegLinetoRel.prototype.clone=function(){return new SVGPathSegLinetoRel((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegLinetoRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegLinetoRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoCubicAbs=function(t,e,n,i,r,a,o){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS,"C",t),this._x=e,this._y=n,this._x1=i,this._y1=r,this._x2=a,this._y2=o},SVGPathSegCurvetoCubicAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicAbs]"},SVGPathSegCurvetoCubicAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicAbs.prototype.clone=function(){return new SVGPathSegCurvetoCubicAbs((void 0),this._x,this._y,this._x1,this._y1,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"x1",{get:function(){return this._x1},set:function(t){this._x1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"y1",{get:function(){return this._y1},set:function(t){this._y1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"x2",{get:function(){return this._x2},set:function(t){this._x2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"y2",{get:function(){return this._y2},set:function(t){this._y2=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoCubicRel=function(t,e,n,i,r,a,o){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL,"c",t),this._x=e,this._y=n,this._x1=i,this._y1=r,this._x2=a,this._y2=o},SVGPathSegCurvetoCubicRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicRel.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicRel]"},SVGPathSegCurvetoCubicRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicRel.prototype.clone=function(){return new SVGPathSegCurvetoCubicRel((void 0),this._x,this._y,this._x1,this._y1,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"x1",{get:function(){return this._x1},set:function(t){this._x1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"y1",{get:function(){return this._y1},set:function(t){this._y1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"x2",{get:function(){return this._x2},set:function(t){this._x2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"y2",{get:function(){return this._y2},set:function(t){this._y2=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoQuadraticAbs=function(t,e,n,i,r){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS,"Q",t),this._x=e,this._y=n,this._x1=i,this._y1=r},SVGPathSegCurvetoQuadraticAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticAbs]"},SVGPathSegCurvetoQuadraticAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticAbs.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticAbs((void 0),this._x,this._y,this._x1,this._y1)},Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"x1",{get:function(){return this._x1},set:function(t){this._x1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"y1",{get:function(){return this._y1},set:function(t){this._y1=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoQuadraticRel=function(t,e,n,i,r){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL,"q",t),this._x=e,this._y=n,this._x1=i,this._y1=r},SVGPathSegCurvetoQuadraticRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticRel.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticRel]"},SVGPathSegCurvetoQuadraticRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticRel.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticRel((void 0),this._x,this._y,this._x1,this._y1)},Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"x1",{get:function(){return this._x1},set:function(t){this._x1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"y1",{get:function(){return this._y1},set:function(t){this._y1=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegArcAbs=function(t,e,n,i,r,a,o,s){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_ARC_ABS,"A",t),this._x=e,this._y=n,this._r1=i,this._r2=r,this._angle=a,this._largeArcFlag=o,this._sweepFlag=s},SVGPathSegArcAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegArcAbs.prototype.toString=function(){return"[object SVGPathSegArcAbs]"},SVGPathSegArcAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._r1+" "+this._r2+" "+this._angle+" "+(this._largeArcFlag?"1":"0")+" "+(this._sweepFlag?"1":"0")+" "+this._x+" "+this._y},SVGPathSegArcAbs.prototype.clone=function(){return new SVGPathSegArcAbs((void 0),this._x,this._y,this._r1,this._r2,this._angle,this._largeArcFlag,this._sweepFlag)},Object.defineProperty(SVGPathSegArcAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"r1",{get:function(){return this._r1},set:function(t){this._r1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"r2",{get:function(){return this._r2},set:function(t){this._r2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"angle",{get:function(){return this._angle},set:function(t){this._angle=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"largeArcFlag",{get:function(){return this._largeArcFlag},set:function(t){this._largeArcFlag=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"sweepFlag",{get:function(){return this._sweepFlag},set:function(t){this._sweepFlag=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegArcRel=function(t,e,n,i,r,a,o,s){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_ARC_REL,"a",t),this._x=e,this._y=n,this._r1=i,this._r2=r,this._angle=a,this._largeArcFlag=o,this._sweepFlag=s},SVGPathSegArcRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegArcRel.prototype.toString=function(){return"[object SVGPathSegArcRel]"},SVGPathSegArcRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._r1+" "+this._r2+" "+this._angle+" "+(this._largeArcFlag?"1":"0")+" "+(this._sweepFlag?"1":"0")+" "+this._x+" "+this._y},SVGPathSegArcRel.prototype.clone=function(){return new SVGPathSegArcRel((void 0),this._x,this._y,this._r1,this._r2,this._angle,this._largeArcFlag,this._sweepFlag)},Object.defineProperty(SVGPathSegArcRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"r1",{get:function(){return this._r1},set:function(t){this._r1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"r2",{get:function(){return this._r2},set:function(t){this._r2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"angle",{get:function(){return this._angle},set:function(t){this._angle=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"largeArcFlag",{get:function(){return this._largeArcFlag},set:function(t){this._largeArcFlag=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"sweepFlag",{get:function(){return this._sweepFlag},set:function(t){this._sweepFlag=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoHorizontalAbs=function(t,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS,"H",t),this._x=e},SVGPathSegLinetoHorizontalAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoHorizontalAbs.prototype.toString=function(){return"[object SVGPathSegLinetoHorizontalAbs]"},SVGPathSegLinetoHorizontalAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x},SVGPathSegLinetoHorizontalAbs.prototype.clone=function(){return new SVGPathSegLinetoHorizontalAbs((void 0),this._x)},Object.defineProperty(SVGPathSegLinetoHorizontalAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoHorizontalRel=function(t,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL,"h",t),this._x=e},SVGPathSegLinetoHorizontalRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoHorizontalRel.prototype.toString=function(){return"[object SVGPathSegLinetoHorizontalRel]"},SVGPathSegLinetoHorizontalRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x},SVGPathSegLinetoHorizontalRel.prototype.clone=function(){return new SVGPathSegLinetoHorizontalRel((void 0),this._x)},Object.defineProperty(SVGPathSegLinetoHorizontalRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoVerticalAbs=function(t,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS,"V",t),this._y=e},SVGPathSegLinetoVerticalAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoVerticalAbs.prototype.toString=function(){return"[object SVGPathSegLinetoVerticalAbs]"},SVGPathSegLinetoVerticalAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._y},SVGPathSegLinetoVerticalAbs.prototype.clone=function(){return new SVGPathSegLinetoVerticalAbs((void 0),this._y)},Object.defineProperty(SVGPathSegLinetoVerticalAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoVerticalRel=function(t,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL,"v",t),this._y=e},SVGPathSegLinetoVerticalRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoVerticalRel.prototype.toString=function(){return"[object SVGPathSegLinetoVerticalRel]"},SVGPathSegLinetoVerticalRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._y},SVGPathSegLinetoVerticalRel.prototype.clone=function(){return new SVGPathSegLinetoVerticalRel((void 0),this._y)},Object.defineProperty(SVGPathSegLinetoVerticalRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoCubicSmoothAbs=function(t,e,n,i,r){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS,"S",t),this._x=e,this._y=n,this._x2=i,this._y2=r},SVGPathSegCurvetoCubicSmoothAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicSmoothAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicSmoothAbs]"},SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicSmoothAbs.prototype.clone=function(){return new SVGPathSegCurvetoCubicSmoothAbs((void 0),this._x,this._y,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"x2",{get:function(){return this._x2},set:function(t){this._x2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"y2",{get:function(){return this._y2},set:function(t){this._y2=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoCubicSmoothRel=function(t,e,n,i,r){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL,"s",t),this._x=e,this._y=n,this._x2=i,this._y2=r},SVGPathSegCurvetoCubicSmoothRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicSmoothRel.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicSmoothRel]"},SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicSmoothRel.prototype.clone=function(){return new SVGPathSegCurvetoCubicSmoothRel((void 0),this._x,this._y,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"x2",{get:function(){return this._x2},set:function(t){this._x2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"y2",{get:function(){return this._y2},set:function(t){this._y2=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoQuadraticSmoothAbs=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS,"T",t),this._x=e,this._y=n},SVGPathSegCurvetoQuadraticSmoothAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticSmoothAbs]"},SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticSmoothAbs((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoQuadraticSmoothRel=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL,"t",t),this._x=e,this._y=n},SVGPathSegCurvetoQuadraticSmoothRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticSmoothRel]"},SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticSmoothRel((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),SVGPathElement.prototype.createSVGPathSegClosePath=function(){return new SVGPathSegClosePath((void 0))},SVGPathElement.prototype.createSVGPathSegMovetoAbs=function(t,e){return new SVGPathSegMovetoAbs((void 0),t,e)},SVGPathElement.prototype.createSVGPathSegMovetoRel=function(t,e){return new SVGPathSegMovetoRel((void 0),t,e); -},SVGPathElement.prototype.createSVGPathSegLinetoAbs=function(t,e){return new SVGPathSegLinetoAbs((void 0),t,e)},SVGPathElement.prototype.createSVGPathSegLinetoRel=function(t,e){return new SVGPathSegLinetoRel((void 0),t,e)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs=function(t,e,n,i,r,a){return new SVGPathSegCurvetoCubicAbs((void 0),t,e,n,i,r,a)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel=function(t,e,n,i,r,a){return new SVGPathSegCurvetoCubicRel((void 0),t,e,n,i,r,a)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs=function(t,e,n,i){return new SVGPathSegCurvetoQuadraticAbs((void 0),t,e,n,i)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel=function(t,e,n,i){return new SVGPathSegCurvetoQuadraticRel((void 0),t,e,n,i)},SVGPathElement.prototype.createSVGPathSegArcAbs=function(t,e,n,i,r,a,o){return new SVGPathSegArcAbs((void 0),t,e,n,i,r,a,o)},SVGPathElement.prototype.createSVGPathSegArcRel=function(t,e,n,i,r,a,o){return new SVGPathSegArcRel((void 0),t,e,n,i,r,a,o)},SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs=function(t){return new SVGPathSegLinetoHorizontalAbs((void 0),t)},SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel=function(t){return new SVGPathSegLinetoHorizontalRel((void 0),t)},SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs=function(t){return new SVGPathSegLinetoVerticalAbs((void 0),t)},SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel=function(t){return new SVGPathSegLinetoVerticalRel((void 0),t)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs=function(t,e,n,i){return new SVGPathSegCurvetoCubicSmoothAbs((void 0),t,e,n,i)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel=function(t,e,n,i){return new SVGPathSegCurvetoCubicSmoothRel((void 0),t,e,n,i)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs=function(t,e){return new SVGPathSegCurvetoQuadraticSmoothAbs((void 0),t,e)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel=function(t,e){return new SVGPathSegCurvetoQuadraticSmoothRel((void 0),t,e)}),"SVGPathSegList"in t||(t.SVGPathSegList=function(t){this._pathElement=t,this._list=this._parsePath(this._pathElement.getAttribute("d")),this._mutationObserverConfig={attributes:!0,attributeFilter:["d"]},this._pathElementMutationObserver=new MutationObserver(this._updateListFromPathMutations.bind(this)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)},Object.defineProperty(SVGPathSegList.prototype,"numberOfItems",{get:function(){return this._checkPathSynchronizedToList(),this._list.length},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"pathSegList",{get:function(){return this._pathSegList||(this._pathSegList=new SVGPathSegList(this)),this._pathSegList},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"normalizedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"animatedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"animatedNormalizedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),SVGPathSegList.prototype._checkPathSynchronizedToList=function(){this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords())},SVGPathSegList.prototype._updateListFromPathMutations=function(t){if(this._pathElement){var e=!1;t.forEach(function(t){"d"==t.attributeName&&(e=!0)}),e&&(this._list=this._parsePath(this._pathElement.getAttribute("d")))}},SVGPathSegList.prototype._writeListToPath=function(){this._pathElementMutationObserver.disconnect(),this._pathElement.setAttribute("d",SVGPathSegList._pathSegArrayAsString(this._list)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)},SVGPathSegList.prototype.segmentChanged=function(t){this._writeListToPath()},SVGPathSegList.prototype.clear=function(){this._checkPathSynchronizedToList(),this._list.forEach(function(t){t._owningPathSegList=null}),this._list=[],this._writeListToPath()},SVGPathSegList.prototype.initialize=function(t){return this._checkPathSynchronizedToList(),this._list=[t],t._owningPathSegList=this,this._writeListToPath(),t},SVGPathSegList.prototype._checkValidIndex=function(t){if(isNaN(t)||t<0||t>=this.numberOfItems)throw"INDEX_SIZE_ERR"},SVGPathSegList.prototype.getItem=function(t){return this._checkPathSynchronizedToList(),this._checkValidIndex(t),this._list[t]},SVGPathSegList.prototype.insertItemBefore=function(t,e){return this._checkPathSynchronizedToList(),e>this.numberOfItems&&(e=this.numberOfItems),t._owningPathSegList&&(t=t.clone()),this._list.splice(e,0,t),t._owningPathSegList=this,this._writeListToPath(),t},SVGPathSegList.prototype.replaceItem=function(t,e){return this._checkPathSynchronizedToList(),t._owningPathSegList&&(t=t.clone()),this._checkValidIndex(e),this._list[e]=t,t._owningPathSegList=this,this._writeListToPath(),t},SVGPathSegList.prototype.removeItem=function(t){this._checkPathSynchronizedToList(),this._checkValidIndex(t);var e=this._list[t];return this._list.splice(t,1),this._writeListToPath(),e},SVGPathSegList.prototype.appendItem=function(t){return this._checkPathSynchronizedToList(),t._owningPathSegList&&(t=t.clone()),this._list.push(t),t._owningPathSegList=this,this._writeListToPath(),t},SVGPathSegList._pathSegArrayAsString=function(t){var e="",n=!0;return t.forEach(function(t){n?(n=!1,e+=t._asPathString()):e+=" "+t._asPathString()}),e},SVGPathSegList.prototype._parsePath=function(t){if(!t||0==t.length)return[];var e=this,n=function(){this.pathSegList=[]};n.prototype.appendSegment=function(t){this.pathSegList.push(t)};var i=function(t){this._string=t,this._currentIndex=0,this._endIndex=this._string.length,this._previousCommand=SVGPathSeg.PATHSEG_UNKNOWN,this._skipOptionalSpaces()};i.prototype._isCurrentSpace=function(){var t=this._string[this._currentIndex];return t<=" "&&(" "==t||"\n"==t||"\t"==t||"\r"==t||"\f"==t)},i.prototype._skipOptionalSpaces=function(){for(;this._currentIndex="0"&&t<="9")&&e!=SVGPathSeg.PATHSEG_CLOSEPATH?e==SVGPathSeg.PATHSEG_MOVETO_ABS?SVGPathSeg.PATHSEG_LINETO_ABS:e==SVGPathSeg.PATHSEG_MOVETO_REL?SVGPathSeg.PATHSEG_LINETO_REL:e:SVGPathSeg.PATHSEG_UNKNOWN},i.prototype.initialCommandIsMoveTo=function(){if(!this.hasMoreData())return!0;var t=this.peekSegmentType();return t==SVGPathSeg.PATHSEG_MOVETO_ABS||t==SVGPathSeg.PATHSEG_MOVETO_REL},i.prototype._parseNumber=function(){var t=0,e=0,n=1,i=0,r=1,a=1,o=this._currentIndex;if(this._skipOptionalSpaces(),this._currentIndex"9")&&"."!=this._string.charAt(this._currentIndex))){for(var s=this._currentIndex;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)this._currentIndex++;if(this._currentIndex!=s)for(var l=this._currentIndex-1,u=1;l>=s;)e+=u*(this._string.charAt(l--)-"0"),u*=10;if(this._currentIndex=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)i+=(this._string.charAt(this._currentIndex++)-"0")*(n*=.1)}if(this._currentIndex!=o&&this._currentIndex+1=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)t*=10,t+=this._string.charAt(this._currentIndex)-"0",this._currentIndex++}var c=e+i;if(c*=r,t&&(c*=Math.pow(10,a*t)),o!=this._currentIndex)return this._skipOptionalSpacesOrDelimiter(),c}},i.prototype._parseArcFlag=function(){if(!(this._currentIndex>=this._endIndex)){var t=!1,e=this._string.charAt(this._currentIndex++);if("0"==e)t=!1;else{if("1"!=e)return;t=!0}return this._skipOptionalSpacesOrDelimiter(),t}},i.prototype.parseSegment=function(){var t=this._string[this._currentIndex],n=this._pathSegTypeFromChar(t);if(n==SVGPathSeg.PATHSEG_UNKNOWN){if(this._previousCommand==SVGPathSeg.PATHSEG_UNKNOWN)return null;if(n=this._nextCommandHelper(t,this._previousCommand),n==SVGPathSeg.PATHSEG_UNKNOWN)return null}else this._currentIndex++;switch(this._previousCommand=n,n){case SVGPathSeg.PATHSEG_MOVETO_REL:return new SVGPathSegMovetoRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_MOVETO_ABS:return new SVGPathSegMovetoAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_REL:return new SVGPathSegLinetoRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_ABS:return new SVGPathSegLinetoAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:return new SVGPathSegLinetoHorizontalRel(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:return new SVGPathSegLinetoHorizontalAbs(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:return new SVGPathSegLinetoVerticalRel(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:return new SVGPathSegLinetoVerticalAbs(e,this._parseNumber());case SVGPathSeg.PATHSEG_CLOSEPATH:return this._skipOptionalSpaces(),new SVGPathSegClosePath(e);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:var i={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicRel(e,i.x,i.y,i.x1,i.y1,i.x2,i.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:var i={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicAbs(e,i.x,i.y,i.x1,i.y1,i.x2,i.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:var i={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicSmoothRel(e,i.x,i.y,i.x2,i.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:var i={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicSmoothAbs(e,i.x,i.y,i.x2,i.y2);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:var i={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoQuadraticRel(e,i.x,i.y,i.x1,i.y1);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:var i={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoQuadraticAbs(e,i.x,i.y,i.x1,i.y1);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:return new SVGPathSegCurvetoQuadraticSmoothRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:return new SVGPathSegCurvetoQuadraticSmoothAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_ARC_REL:var i={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegArcRel(e,i.x,i.y,i.x1,i.y1,i.arcAngle,i.arcLarge,i.arcSweep);case SVGPathSeg.PATHSEG_ARC_ABS:var i={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegArcAbs(e,i.x,i.y,i.x1,i.y1,i.arcAngle,i.arcLarge,i.arcSweep);default:throw"Unknown path seg type."}};var r=new n,a=new i(t);if(!a.initialCommandIsMoveTo())return[];for(;a.hasMoreData();){var o=a.parseSegment();if(!o)return[];r.appendSegment(o)}return r.pathSegList})}(),"function"==typeof define&&define.amd?define("c3",["d3"],function(){return c}):"undefined"!=typeof exports&&"undefined"!=typeof module?module.exports=c:t.c3=c}(window),function(t,e){"function"==typeof define&&define.amd?define("sifter",e):"object"==typeof exports?module.exports=e():t.Sifter=e()}(this,function(){var t=function(t,e){this.items=t,this.settings=e||{diacritics:!0}};t.prototype.tokenize=function(t){if(t=i(String(t||"").toLowerCase()),!t||!t.length)return[];var e,n,a,s,l=[],u=t.split(/ +/);for(e=0,n=u.length;e0)&&i.items.push({score:n,id:r})}):o.iterator(o.items,function(t,e){i.items.push({score:1,id:e})}),r=o.getSortFunction(i,e),r&&i.items.sort(r),i.total=i.items.length,"number"==typeof e.limit&&(i.items=i.items.slice(0,e.limit)),i};var e=function(t,e){return"number"==typeof t&&"number"==typeof e?t>e?1:te?1:e>t?-1:0)},n=function(t,e){var n,i,r,a;for(n=1,i=arguments.length;n=0&&t.data.length>0){var a=t.data.match(n),o=document.createElement("span");o.className="highlight";var s=t.splitText(r),l=(s.splitText(a[0].length),s.cloneNode(!0));o.appendChild(l),s.parentNode.replaceChild(o,s),e=1}}else if(1===t.nodeType&&t.childNodes&&!/(script|style)/i.test(t.tagName))for(var u=0;u/g,">").replace(/"/g,""")},k=function(t){return(t+"").replace(/\$/g,"$$$$")},P={};P.before=function(t,e,n){var i=t[e];t[e]=function(){return n.apply(t,arguments),i.apply(t,arguments)}},P.after=function(t,e,n){var i=t[e];t[e]=function(){var e=i.apply(t,arguments);return n.apply(t,arguments),e}};var M=function(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}},E=function(t,e){var n;return function(){var i=this,r=arguments;window.clearTimeout(n),n=window.setTimeout(function(){t.apply(i,r)},e)}},D=function(t,e,n){var i,r=t.trigger,a={};t.trigger=function(){var n=arguments[0];return e.indexOf(n)===-1?r.apply(t,arguments):void(a[n]=arguments)},n.apply(t,[]),t.trigger=r;for(i in a)a.hasOwnProperty(i)&&r.apply(t,a[i])},O=function(t,e,n,i){t.on(e,n,function(e){for(var n=e.target;n&&n.parentNode!==t[0];)n=n.parentNode;return e.currentTarget=n,i.apply(this,[e])})},L=function(t){var e={};if("selectionStart"in t)e.start=t.selectionStart,e.length=t.selectionEnd-e.start;else if(document.selection){t.focus();var n=document.selection.createRange(),i=document.selection.createRange().text.length;n.moveStart("character",-t.value.length),e.start=n.text.length-i,e.length=i}return e},I=function(t,e,n){var i,r,a={};if(n)for(i=0,r=n.length;i").css({position:"absolute",top:-99999,left:-99999,width:"auto",padding:0,whiteSpace:"pre"}).text(e).appendTo("body");I(n,i,["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"]);var r=i.width();return i.remove(),r},R=function(t){var e=null,n=function(n,i){var r,a,o,s,l,u,c,d;n=n||window.event||{},i=i||{},n.metaKey||n.altKey||(i.force||t.data("grow")!==!1)&&(r=t.val(),n.type&&"keydown"===n.type.toLowerCase()&&(a=n.keyCode,o=a>=97&&a<=122||a>=65&&a<=90||a>=48&&a<=57||32===a,a===m||a===g?(d=L(t[0]),d.length?r=r.substring(0,d.start)+r.substring(d.start+d.length):a===g&&d.start?r=r.substring(0,d.start-1)+r.substring(d.start+1):a===m&&"undefined"!=typeof d.start&&(r=r.substring(0,d.start)+r.substring(d.start+1))):o&&(u=n.shiftKey,c=String.fromCharCode(n.keyCode),c=u?c.toUpperCase():c.toLowerCase(),r+=c)),s=t.attr("placeholder"),!r&&s&&(r=s),l=N(r,t)+4,l!==e&&(e=l,t.width(l),t.triggerHandler("resize")))};t.on("keydown keyup update blur",n),n()},F=function(n,i){var r,a,o,s,l=this;s=n[0],s.selectize=l;var u=window.getComputedStyle&&window.getComputedStyle(s,null);if(o=u?u.getPropertyValue("direction"):s.currentStyle&&s.currentStyle.direction,o=o||n.parents("[dir]:first").attr("dir")||"",t.extend(l,{order:0,settings:i,$input:n,tabIndex:n.attr("tabindex")||"",tagType:"select"===s.tagName.toLowerCase()?b:w,rtl:/rtl/i.test(o),eventNS:".selectize"+ ++F.count,highlightedValue:null,isOpen:!1,isDisabled:!1,isRequired:n.is("[required]"),isInvalid:!1,isLocked:!1,isFocused:!1,isInputHidden:!1,isSetup:!1,isShiftDown:!1,isCmdDown:!1,isCtrlDown:!1,ignoreFocus:!1,ignoreBlur:!1,ignoreHover:!1,hasOptions:!1,currentResults:null,lastValue:"",caretPos:0,loading:0,loadedSearches:{},$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:null===i.loadThrottle?l.onSearchChange:E(l.onSearchChange,i.loadThrottle)}),l.sifter=new e(this.options,{diacritics:i.diacritics}),l.settings.options){for(r=0,a=l.settings.options.length;r").addClass(h.wrapperClass).addClass(u).addClass(l),n=t("
    ").addClass(h.inputClass).addClass("items").appendTo(e),i=t('').appendTo(n).attr("tabindex",m.is(":disabled")?"-1":d.tabIndex),s=t(h.dropdownParent||e),r=t("
    ").addClass(h.dropdownClass).addClass(l).hide().appendTo(s),o=t("
    ").addClass(h.dropdownContentClass).appendTo(r),d.settings.copyClassesToDropdown&&r.addClass(u),e.css({width:m[0].style.width}),d.plugins.names.length&&(c="plugin-"+d.plugins.names.join(" plugin-"),e.addClass(c),r.addClass(c)),(null===h.maxItems||h.maxItems>1)&&d.tagType===b&&m.attr("multiple","multiple"),d.settings.placeholder&&i.attr("placeholder",h.placeholder),!d.settings.splitOn&&d.settings.delimiter){var _=d.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");d.settings.splitOn=new RegExp("\\s*"+_+"+\\s*")}m.attr("autocorrect")&&i.attr("autocorrect",m.attr("autocorrect")),m.attr("autocapitalize")&&i.attr("autocapitalize",m.attr("autocapitalize")),d.$wrapper=e,d.$control=n,d.$control_input=i,d.$dropdown=r,d.$dropdown_content=o,r.on("mouseenter","[data-selectable]",function(){return d.onOptionHover.apply(d,arguments)}),r.on("mousedown click","[data-selectable]",function(){return d.onOptionSelect.apply(d,arguments)}),O(n,"mousedown","*:not(input)",function(){return d.onItemSelect.apply(d,arguments)}),R(i),n.on({mousedown:function(){return d.onMouseDown.apply(d,arguments)},click:function(){return d.onClick.apply(d,arguments)}}),i.on({mousedown:function(t){t.stopPropagation()},keydown:function(){return d.onKeyDown.apply(d,arguments)},keyup:function(){return d.onKeyUp.apply(d,arguments)},keypress:function(){return d.onKeyPress.apply(d,arguments)},resize:function(){d.positionDropdown.apply(d,[])},blur:function(){return d.onBlur.apply(d,arguments)},focus:function(){return d.ignoreBlur=!1,d.onFocus.apply(d,arguments)},paste:function(){return d.onPaste.apply(d,arguments)}}),g.on("keydown"+f,function(t){d.isCmdDown=t[a?"metaKey":"ctrlKey"],d.isCtrlDown=t[a?"altKey":"ctrlKey"],d.isShiftDown=t.shiftKey}),g.on("keyup"+f,function(t){t.keyCode===x&&(d.isCtrlDown=!1),t.keyCode===v&&(d.isShiftDown=!1),t.keyCode===y&&(d.isCmdDown=!1)}),g.on("mousedown"+f,function(t){if(d.isFocused){if(t.target===d.$dropdown[0]||t.target.parentNode===d.$dropdown[0])return!1;d.$control.has(t.target).length||t.target===d.$control[0]||d.blur(t.target)}}),p.on(["scroll"+f,"resize"+f].join(" "),function(){d.isOpen&&d.positionDropdown.apply(d,arguments)}),p.on("mousemove"+f,function(){d.ignoreHover=!1}),this.revertSettings={$children:m.children().detach(),tabindex:m.attr("tabindex")},m.attr("tabindex",-1).hide().after(d.$wrapper),t.isArray(h.items)&&(d.setValue(h.items),delete h.items),S&&m.on("invalid"+f,function(t){t.preventDefault(),d.isInvalid=!0,d.refreshState()}),d.updateOriginalInput(),d.refreshItems(),d.refreshState(),d.updatePlaceholder(),d.isSetup=!0,m.is(":disabled")&&d.disable(),d.on("change",this.onChange),m.data("selectize",d),m.addClass("selectized"),d.trigger("initialize"),h.preload===!0&&d.onSearchChange("")},setupTemplates:function(){var e=this,n=e.settings.labelField,i=e.settings.optgroupLabelField,r={optgroup:function(t){return'
    '+t.html+"
    "},optgroup_header:function(t,e){return'
    '+e(t[i])+"
    "},option:function(t,e){return'
    '+e(t[n])+"
    "},item:function(t,e){return'
    '+e(t[n])+"
    "},option_create:function(t,e){return'
    Add '+e(t.input)+"
    "}};e.settings.render=t.extend({},r,e.settings.render)},setupCallbacks:function(){var t,e,n={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(t in n)n.hasOwnProperty(t)&&(e=this.settings[n[t]],e&&this.on(t,e))},onClick:function(t){var e=this;e.isFocused||(e.focus(),t.preventDefault())},onMouseDown:function(e){var n=this,i=e.isDefaultPrevented();t(e.target);if(n.isFocused){if(e.target!==n.$control_input[0])return"single"===n.settings.mode?n.isOpen?n.close():n.open():i||n.setActiveItem(null),!1}else i||window.setTimeout(function(){n.focus()},0)},onChange:function(){this.$input.trigger("change")},onPaste:function(e){var n=this;n.isFull()||n.isInputHidden||n.isLocked?e.preventDefault():n.settings.splitOn&&setTimeout(function(){for(var e=t.trim(n.$control_input.val()||"").split(n.settings.splitOn),i=0,r=e.length;is&&(u=o,o=s,s=u),r=o;r<=s;r++)l=d.$control[0].childNodes[r],d.$activeItems.indexOf(l)===-1&&(t(l).addClass("active"),d.$activeItems.push(l));n.preventDefault()}else"mousedown"===i&&d.isCtrlDown||"keydown"===i&&this.isShiftDown?e.hasClass("active")?(a=d.$activeItems.indexOf(e[0]),d.$activeItems.splice(a,1),e.removeClass("active")):d.$activeItems.push(e.addClass("active")[0]):(t(d.$activeItems).removeClass("active"),d.$activeItems=[e.addClass("active")[0]]);d.hideInput(),this.isFocused||d.focus()}},setActiveOption:function(e,n,i){var r,a,o,s,l,u=this;u.$activeOption&&u.$activeOption.removeClass("active"),u.$activeOption=null,e=t(e),e.length&&(u.$activeOption=e.addClass("active"),!n&&T(n)||(r=u.$dropdown_content.height(),a=u.$activeOption.outerHeight(!0),n=u.$dropdown_content.scrollTop()||0,o=u.$activeOption.offset().top-u.$dropdown_content.offset().top+n,s=o,l=o-r+a,o+a>r+n?u.$dropdown_content.stop().animate({scrollTop:l},i?u.settings.scrollDuration:0):o=0;n--)a.items.indexOf(C(i.items[n].id))!==-1&&i.items.splice(n,1);return i},refreshOptions:function(e){var n,r,a,o,s,l,u,c,d,h,f,p,g,m,v,y;"undefined"==typeof e&&(e=!0);var x=this,_=t.trim(x.$control_input.val()),b=x.search(_),w=x.$dropdown_content,S=x.$activeOption&&C(x.$activeOption.attr("data-value"));for(o=b.items.length,"number"==typeof x.settings.maxOptions&&(o=Math.min(o,x.settings.maxOptions)),s={},l=[],n=0;n0||g,x.hasOptions?(b.items.length>0?(v=S&&x.getOption(S),v&&v.length?m=v:"single"===x.settings.mode&&x.items.length&&(m=x.getOption(x.items[0])),m&&m.length||(m=y&&!x.settings.addPrecedence?x.getAdjacentOption(y,1):w.find("[data-selectable]:first"))):m=y,x.setActiveOption(m),e&&!x.isOpen&&x.open()):(x.setActiveOption(null),e&&x.isOpen&&x.close())},addOption:function(e){var n,i,r,a=this;if(t.isArray(e))for(n=0,i=e.length;n=0&&r0),e.$control_input.data("grow",!n&&!i)},isFull:function(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(t){var e,n,i,r,a=this;if(t=t||{},a.tagType===b){for(i=[],e=0,n=a.items.length;e'+A(r)+"");i.length||this.$input.attr("multiple")||i.push(''),a.$input.html(i.join(""))}else a.$input.val(a.getValue()),a.$input.attr("value",a.$input.val());a.isSetup&&(t.silent||a.trigger("change",a.$input.val()))},updatePlaceholder:function(){if(this.settings.placeholder){var t=this.$control_input;this.items.length?t.removeAttr("placeholder"):t.attr("placeholder",this.settings.placeholder),t.triggerHandler("update",{force:!0})}},open:function(){var t=this;t.isLocked||t.isOpen||"multi"===t.settings.mode&&t.isFull()||(t.focus(),t.isOpen=!0,t.refreshState(),t.$dropdown.css({visibility:"hidden",display:"block"}),t.positionDropdown(),t.$dropdown.css({visibility:"visible"}),t.trigger("dropdown_open",t.$dropdown))},close:function(){var t=this,e=t.isOpen;"single"===t.settings.mode&&t.items.length&&t.hideInput(),t.isOpen=!1,t.$dropdown.hide(),t.setActiveOption(null),t.refreshState(),e&&t.trigger("dropdown_close",t.$dropdown)},positionDropdown:function(){var t=this.$control,e="body"===this.settings.dropdownParent?t.offset():t.position();e.top+=t.outerHeight(!0),this.$dropdown.css({width:t.outerWidth(),top:e.top,left:e.left})},clear:function(t){var e=this;e.items.length&&(e.$control.children(":not(input)").remove(),e.items=[],e.lastQuery=null,e.setCaret(0),e.setActiveItem(null),e.updatePlaceholder(),e.updateOriginalInput({silent:t}),e.refreshState(),e.showInput(),e.trigger("clear"))},insertAtCaret:function(e){var n=Math.min(this.caretPos,this.items.length);0===n?this.$control.prepend(e):t(this.$control[0].childNodes[n]).before(e),this.setCaret(n+1)},deleteSelection:function(e){var n,i,r,a,o,s,l,u,c,d=this;if(r=e&&e.keyCode===g?-1:1,a=L(d.$control_input[0]),d.$activeOption&&!d.settings.hideSelected&&(l=d.getAdjacentOption(d.$activeOption,-1).attr("data-value")),o=[],d.$activeItems.length){for(c=d.$control.children(".active:"+(r>0?"last":"first")),s=d.$control.children(":not(input)").index(c),r>0&&s++,n=0,i=d.$activeItems.length;n0&&a.start===d.$control_input.val().length&&o.push(d.items[d.caretPos]));if(!o.length||"function"==typeof d.settings.onDelete&&d.settings.onDelete.apply(d,[o])===!1)return!1;for("undefined"!=typeof s&&d.setCaret(s);o.length;)d.removeItem(o.pop());return d.showInput(),d.positionDropdown(),d.refreshOptions(!0),l&&(u=d.getOption(l),u.length&&d.setActiveOption(u)),!0},advanceSelection:function(t,e){var n,i,r,a,o,s,l=this;0!==t&&(l.rtl&&(t*=-1),n=t>0?"last":"first",i=L(l.$control_input[0]),l.isFocused&&!l.isInputHidden?(a=l.$control_input.val().length,o=t<0?0===i.start&&0===i.length:i.start===a,o&&!a&&l.advanceCaret(t,e)):(s=l.$control.children(".active:"+n),s.length&&(r=l.$control.children(":not(input)").index(s),l.setActiveItem(null),l.setCaret(t>0?r+1:r))))},advanceCaret:function(t,e){var n,i,r=this;0!==t&&(n=t>0?"next":"prev",r.isShiftDown?(i=r.$control_input[n](),i.length&&(r.hideInput(),r.setActiveItem(i),e&&e.preventDefault())):r.setCaret(r.caretPos+t))},setCaret:function(e){var n=this;if(e="single"===n.settings.mode?n.items.length:Math.max(0,Math.min(n.items.length,e)),!n.isPending){var i,r,a,o;for(a=n.$control.children(":not(input)"),i=0,r=a.length;i
    '}},e),n.setup=function(){var i=n.setup;return function(){i.apply(n,arguments),n.$dropdown_header=t(e.html(e)),n.$dropdown.prepend(n.$dropdown_header)}}()}),F.define("optgroup_columns",function(e){var n=this;e=t.extend({equalizeWidth:!0,equalizeHeight:!0},e),this.getAdjacentOption=function(e,n){var i=e.closest("[data-group]").find("[data-selectable]"),r=i.index(e)+n;return r>=0&&r
    ',t=t.firstChild,n.body.appendChild(t),e=i.width=t.offsetWidth-t.clientWidth,n.body.removeChild(t)),e},r=function(){var r,a,o,s,l,u,c;if(c=t("[data-group]",n.$dropdown_content),a=c.length,a&&n.$dropdown_content.width()){if(e.equalizeHeight){for(o=0,r=0;r1&&(l=u-s*(a-1),c.eq(a-1).css({width:l})))}};(e.equalizeHeight||e.equalizeWidth)&&(P.after(this,"positionDropdown",r),P.after(this,"refreshOptions",r))}),F.define("remove_button",function(e){if("single"!==this.settings.mode){e=t.extend({label:"×",title:"Remove",className:"remove",append:!0},e);var n=this,i=''+e.label+"",r=function(t,e){var n=t.search(/(<\/[^>]+>\s*)$/);return t.substring(0,n)+e+t.substring(n)};this.setup=function(){var a=n.setup;return function(){if(e.append){var o=n.settings.render.item;n.settings.render.item=function(t){return r(o.apply(this,arguments),i)}}a.apply(this,arguments),this.$control.on("click","."+e.className,function(e){if(e.preventDefault(),!n.isLocked){var i=t(e.currentTarget).parent();n.setActiveItem(i),n.deleteSelection()&&n.setCaret(n.items.length)}})}}()}}),F.define("restore_on_backspace",function(t){var e=this;t.text=t.text||function(t){return t[this.settings.labelField]},this.onKeyDown=function(){var n=e.onKeyDown;return function(e){var i,r;return e.keyCode===g&&""===this.$control_input.val()&&!this.$activeItems.length&&(i=this.caretPos-1,i>=0&&i",options:{disabled:!1,create:null},_createWidget:function(n,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=e++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),n),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(e,n){var i,r,a,o=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(o={},i=e.split("."),e=i.shift(),i.length){for(r=o[e]=t.widget.extend({},this.options[e]),a=0;a'),i.attr("accept-charset",n.formAcceptCharset),a=/\?/.test(n.url)?"&":"?","DELETE"===n.type?(n.url=n.url+a+"_method=DELETE",n.type="POST"):"PUT"===n.type?(n.url=n.url+a+"_method=PUT",n.type="POST"):"PATCH"===n.type&&(n.url=n.url+a+"_method=PATCH",n.type="POST"),e+=1,r=t('').bind("load",function(){ -var e,a=t.isArray(n.paramName)?n.paramName:[n.paramName];r.unbind("load").bind("load",function(){var e;try{if(e=r.contents(),!e.length||!e[0].firstChild)throw new Error}catch(n){e=void 0}l(200,"success",{iframe:e}),t('').appendTo(i),window.setTimeout(function(){i.remove()},0)}),i.prop("target",r.prop("name")).prop("action",n.url).prop("method",n.type),n.formData&&t.each(n.formData,function(e,n){t('').prop("name",n.name).val(n.value).appendTo(i)}),n.fileInput&&n.fileInput.length&&"POST"===n.type&&(e=n.fileInput.clone(),n.fileInput.after(function(t){return e[t]}),n.paramName&&n.fileInput.each(function(e){t(this).prop("name",a[e]||n.paramName)}),i.append(n.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),n.fileInput.removeAttr("form")),i.submit(),e&&e.length&&n.fileInput.each(function(n,i){var r=t(e[n]);t(i).prop("name",r.prop("name")).attr("form",r.attr("form")),r.replaceWith(i)})}),i.append(r).appendTo(document.body)},abort:function(){r&&r.unbind("load").prop("src",o),i&&i.remove()}}}}),t.ajaxSetup({converters:{"iframe text":function(e){return e&&t(e[0].body).text()},"iframe json":function(e){return e&&t.parseJSON(t(e[0].body).text())},"iframe html":function(e){return e&&t(e[0].body).html()},"iframe xml":function(e){var n=e&&e[0];return n&&t.isXMLDoc(n)?n:t.parseXML(n.XMLDocument&&n.XMLDocument.xml||t(n.body).html())},"iframe script":function(e){return e&&t.globalEval(t(e[0].body).text())}}})}),function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery","jquery.ui.widget"],t):"object"==typeof exports?t(require("jquery"),require("./vendor/jquery.ui.widget")):t(window.jQuery)}(function(t){"use strict";function e(e){var n="dragover"===e;return function(i){i.dataTransfer=i.originalEvent&&i.originalEvent.dataTransfer;var r=i.dataTransfer;r&&t.inArray("Files",r.types)!==-1&&this._trigger(e,t.Event(e,{delegatedEvent:i}))!==!1&&(i.preventDefault(),n&&(r.dropEffect="copy"))}}t.support.fileInput=!(new RegExp("(Android (1\\.[0156]|2\\.[01]))|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)|(w(eb)?OSBrowser)|(webOS)|(Kindle/(1\\.0|2\\.[05]|3\\.0))").test(window.navigator.userAgent)||t('').prop("disabled")),t.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),t.support.xhrFormDataFileUpload=!!window.FormData,t.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),t.widget("blueimp.fileupload",{options:{dropZone:t(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(e,n){return e=this.messages[e]||e.toString(),n&&t.each(n,function(t,n){e=e.replace("{"+t+"}",n)}),e},formData:function(t){return t.serializeArray()},add:function(e,n){return!e.isDefaultPrevented()&&void((n.autoUpload||n.autoUpload!==!1&&t(this).fileupload("option","autoUpload"))&&n.process().done(function(){n.submit()}))},processData:!1,contentType:!1,cache:!1,timeout:0},_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:t.support.blobSlice&&function(){var t=this.slice||this.webkitSlice||this.mozSlice;return t.apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(t,e,n){var i=t-this.timestamp;return(!this.bitrate||!n||i>n)&&(this.bitrate=(e-this.loaded)*(1e3/i)*8,this.loaded=e,this.timestamp=t),this.bitrate}},_isXHRUpload:function(e){return!e.forceIframeTransport&&(!e.multipart&&t.support.xhrFileUpload||t.support.xhrFormDataFileUpload)},_getFormData:function(e){var n;return"function"===t.type(e.formData)?e.formData(e.form):t.isArray(e.formData)?e.formData:"object"===t.type(e.formData)?(n=[],t.each(e.formData,function(t,e){n.push({name:t,value:e})}),n):[]},_getTotal:function(e){var n=0;return t.each(e,function(t,e){n+=e.size||1}),n},_initProgressObject:function(e){var n={loaded:0,total:0,bitrate:0};e._progress?t.extend(e._progress,n):e._progress=n},_initResponseObject:function(t){var e;if(t._response)for(e in t._response)t._response.hasOwnProperty(e)&&delete t._response[e];else t._response={}},_onProgress:function(e,n){if(e.lengthComputable){var i,r=Date.now?Date.now():(new Date).getTime();if(n._time&&n.progressInterval&&r-n._time").prop("href",e.url).prop("host");e.dataType="iframe "+(e.dataType||""),e.formData=this._getFormData(e),e.redirect&&n&&n!==location.host&&e.formData.push({name:e.redirectParamName||"redirect",value:e.redirect})},_initDataSettings:function(t){this._isXHRUpload(t)?(this._chunkedUpload(t,!0)||(t.data||this._initXHRData(t),this._initProgressListener(t)),t.postMessage&&(t.dataType="postmessage "+(t.dataType||""))):this._initIframeSettings(t)},_getParamName:function(e){var n=t(e.fileInput),i=e.paramName;return i?t.isArray(i)||(i=[i]):(i=[],n.each(function(){for(var e=t(this),n=e.prop("name")||"files[]",r=(e.prop("files")||[1]).length;r;)i.push(n),r-=1}),i.length||(i=[n.prop("name")||"files[]"])),i},_initFormSettings:function(e){e.form&&e.form.length||(e.form=t(e.fileInput.prop("form")),e.form.length||(e.form=t(this.options.fileInput.prop("form")))),e.paramName=this._getParamName(e),e.url||(e.url=e.form.prop("action")||location.href),e.type=(e.type||"string"===t.type(e.form.prop("method"))&&e.form.prop("method")||"").toUpperCase(),"POST"!==e.type&&"PUT"!==e.type&&"PATCH"!==e.type&&(e.type="POST"),e.formAcceptCharset||(e.formAcceptCharset=e.form.attr("accept-charset"))},_getAJAXSettings:function(e){var n=t.extend({},this.options,e);return this._initFormSettings(n),this._initDataSettings(n),n},_getDeferredState:function(t){return t.state?t.state():t.isResolved()?"resolved":t.isRejected()?"rejected":"pending"},_enhancePromise:function(t){return t.success=t.done,t.error=t.fail,t.complete=t.always,t},_getXHRPromise:function(e,n,i){var r=t.Deferred(),a=r.promise();return n=n||this.options.context||a,e===!0?r.resolveWith(n,i):e===!1&&r.rejectWith(n,i),a.abort=r.promise,this._enhancePromise(a)},_addConvenienceMethods:function(e,n){var i=this,r=function(e){return t.Deferred().resolveWith(i,e).promise()};n.process=function(e,a){return(e||a)&&(n._processQueue=this._processQueue=(this._processQueue||r([this])).then(function(){return n.errorThrown?t.Deferred().rejectWith(i,[n]).promise():r(arguments)}).then(e,a)),this._processQueue||r([this])},n.submit=function(){return"pending"!==this.state()&&(n.jqXHR=this.jqXHR=i._trigger("submit",t.Event("submit",{delegatedEvent:e}),this)!==!1&&i._onSend(e,this)),this.jqXHR||i._getXHRPromise()},n.abort=function(){return this.jqXHR?this.jqXHR.abort():(this.errorThrown="abort",i._trigger("fail",null,this),i._getXHRPromise(!1))},n.state=function(){return this.jqXHR?i._getDeferredState(this.jqXHR):this._processQueue?i._getDeferredState(this._processQueue):void 0},n.processing=function(){return!this.jqXHR&&this._processQueue&&"pending"===i._getDeferredState(this._processQueue)},n.progress=function(){return this._progress},n.response=function(){return this._response}},_getUploadedBytes:function(t){var e=t.getResponseHeader("Range"),n=e&&e.split("-"),i=n&&n.length>1&&parseInt(n[1],10);return i&&i+1},_chunkedUpload:function(e,n){e.uploadedBytes=e.uploadedBytes||0;var i,r,a=this,o=e.files[0],s=o.size,l=e.uploadedBytes,u=e.maxChunkSize||s,c=this._blobSlice,d=t.Deferred(),h=d.promise();return!(!(this._isXHRUpload(e)&&c&&(l||u=s?(o.error=e.i18n("uploadedBytes"),this._getXHRPromise(!1,e.context,[null,"error",o.error])):(r=function(){var n=t.extend({},e),h=n._progress.loaded;n.blob=c.call(o,l,l+u,o.type),n.chunkSize=n.blob.size,n.contentRange="bytes "+l+"-"+(l+n.chunkSize-1)+"/"+s,a._initXHRData(n),a._initProgressListener(n),i=(a._trigger("chunksend",null,n)!==!1&&t.ajax(n)||a._getXHRPromise(!1,n.context)).done(function(i,o,u){l=a._getUploadedBytes(u)||l+n.chunkSize,h+n.chunkSize-n._progress.loaded&&a._onProgress(t.Event("progress",{lengthComputable:!0,loaded:l-n.uploadedBytes,total:l-n.uploadedBytes}),n),e.uploadedBytes=n.uploadedBytes=l,n.result=i,n.textStatus=o,n.jqXHR=u,a._trigger("chunkdone",null,n),a._trigger("chunkalways",null,n),ls._sending)for(var i=s._slots.shift();i;){if("pending"===s._getDeferredState(i)){i.resolve();break}i=s._slots.shift()}0===s._active&&s._trigger("stop")})};return this._beforeSend(e,l),this.options.sequentialUploads||this.options.limitConcurrentUploads&&this.options.limitConcurrentUploads<=this._sending?(this.options.limitConcurrentUploads>1?(a=t.Deferred(),this._slots.push(a),o=a.then(u)):(this._sequence=this._sequence.then(u,u),o=this._sequence),o.abort=function(){return r=[void 0,"abort","abort"],i?i.abort():(a&&a.rejectWith(l.context,r),u())},this._enhancePromise(o)):u()},_onAdd:function(e,n){var i,r,a,o,s=this,l=!0,u=t.extend({},this.options,n),c=n.files,d=c.length,h=u.limitMultiFileUploads,f=u.limitMultiFileUploadSize,p=u.limitMultiFileUploadSizeOverhead,g=0,m=this._getParamName(u),v=0;if(!d)return!1;if(f&&void 0===c[0].size&&(f=void 0),(u.singleFileUploads||h||f)&&this._isXHRUpload(u))if(u.singleFileUploads||f||!h)if(!u.singleFileUploads&&f)for(a=[],i=[],o=0;of||h&&o+1-v>=h)&&(a.push(c.slice(v,o+1)),r=m.slice(v,o+1),r.length||(r=m),i.push(r),v=o+1,g=0);else i=m;else for(a=[],i=[],o=0;o").append(i)[0].reset(),n.after(i).detach(),r&&i.focus(),t.cleanData(n.unbind("remove")),this.options.fileInput=this.options.fileInput.map(function(t,e){return e===n[0]?i[0]:e}),n[0]===this.element[0]&&(this.element=i)},_handleFileTreeEntry:function(e,n){var i,r=this,a=t.Deferred(),o=function(t){t&&!t.entry&&(t.entry=e),a.resolve([t])},s=function(t){r._handleFileTreeEntries(t,n+e.name+"/").done(function(t){a.resolve(t)}).fail(o)},l=function(){i.readEntries(function(t){t.length?(u=u.concat(t),l()):s(u)},o)},u=[];return n=n||"",e.isFile?e._file?(e._file.relativePath=n,a.resolve(e._file)):e.file(function(t){t.relativePath=n,a.resolve(t)},o):e.isDirectory?(i=e.createReader(),l()):a.resolve([]),a.promise()},_handleFileTreeEntries:function(e,n){var i=this;return t.when.apply(t,t.map(e,function(t){return i._handleFileTreeEntry(t,n)})).then(function(){return Array.prototype.concat.apply([],arguments)})},_getDroppedFiles:function(e){e=e||{};var n=e.items;return n&&n.length&&(n[0].webkitGetAsEntry||n[0].getAsEntry)?this._handleFileTreeEntries(t.map(n,function(t){var e;return t.webkitGetAsEntry?(e=t.webkitGetAsEntry(),e&&(e._file=t.getAsFile()),e):t.getAsEntry()})):t.Deferred().resolve(t.makeArray(e.files)).promise()},_getSingleFileInputFiles:function(e){e=t(e);var n,i,r=e.prop("webkitEntries")||e.prop("entries");if(r&&r.length)return this._handleFileTreeEntries(r);if(n=t.makeArray(e.prop("files")),n.length)void 0===n[0].name&&n[0].fileName&&t.each(n,function(t,e){e.name=e.fileName,e.size=e.fileSize});else{if(i=e.prop("value"),!i)return t.Deferred().resolve([]).promise();n=[{name:i.replace(/^.*\\/,"")}]}return t.Deferred().resolve(n).promise()},_getFileInputFiles:function(e){return e instanceof t&&1!==e.length?t.when.apply(t,t.map(e,this._getSingleFileInputFiles)).then(function(){return Array.prototype.concat.apply([],arguments)}):this._getSingleFileInputFiles(e)},_onChange:function(e){var n=this,i={fileInput:t(e.target),form:t(e.target.form)};this._getFileInputFiles(i.fileInput).always(function(r){i.files=r,n.options.replaceFileInput&&n._replaceFileInput(i),n._trigger("change",t.Event("change",{delegatedEvent:e}),i)!==!1&&n._onAdd(e,i)})},_onPaste:function(e){var n=e.originalEvent&&e.originalEvent.clipboardData&&e.originalEvent.clipboardData.items,i={files:[]};n&&n.length&&(t.each(n,function(t,e){var n=e.getAsFile&&e.getAsFile();n&&i.files.push(n)}),this._trigger("paste",t.Event("paste",{delegatedEvent:e}),i)!==!1&&this._onAdd(e,i))},_onDrop:function(e){e.dataTransfer=e.originalEvent&&e.originalEvent.dataTransfer;var n=this,i=e.dataTransfer,r={};i&&i.files&&i.files.length&&(e.preventDefault(),this._getDroppedFiles(i).always(function(i){r.files=i,n._trigger("drop",t.Event("drop",{delegatedEvent:e}),r)!==!1&&n._onAdd(e,r)}))},_onDragOver:e("dragover"),_onDragEnter:e("dragenter"),_onDragLeave:e("dragleave"),_initEventHandlers:function(){this._isXHRUpload(this.options)&&(this._on(this.options.dropZone,{dragover:this._onDragOver,drop:this._onDrop,dragenter:this._onDragEnter,dragleave:this._onDragLeave}),this._on(this.options.pasteZone,{paste:this._onPaste})),t.support.fileInput&&this._on(this.options.fileInput,{change:this._onChange})},_destroyEventHandlers:function(){this._off(this.options.dropZone,"dragenter dragleave dragover drop"),this._off(this.options.pasteZone,"paste"),this._off(this.options.fileInput,"change")},_setOption:function(e,n){var i=t.inArray(e,this._specialOptions)!==-1;i&&this._destroyEventHandlers(),this._super(e,n),i&&(this._initSpecialOptions(),this._initEventHandlers())},_initSpecialOptions:function(){var e=this.options;void 0===e.fileInput?e.fileInput=this.element.is('input[type="file"]')?this.element:this.element.find('input[type="file"]'):e.fileInput instanceof t||(e.fileInput=t(e.fileInput)),e.dropZone instanceof t||(e.dropZone=t(e.dropZone)),e.pasteZone instanceof t||(e.pasteZone=t(e.pasteZone))},_getRegExp:function(t){var e=t.split("/"),n=e.pop();return e.shift(),new RegExp(e.join("/"),n)},_isRegExpOption:function(e,n){return"url"!==e&&"string"===t.type(n)&&/^\/.*\/[igm]{0,3}$/.test(n)},_initDataAttributes:function(){var e=this,n=this.options,i=this.element.data();t.each(this.element[0].attributes,function(t,r){var a,o=r.name.toLowerCase();/^data-/.test(o)&&(o=o.slice(5).replace(/-[a-z]/g,function(t){return t.charAt(1).toUpperCase()}),a=i[o],e._isRegExpOption(o,a)&&(a=e._getRegExp(a)),n[o]=a)})},_create:function(){this._initDataAttributes(),this._initSpecialOptions(),this._slots=[],this._sequence=this._getXHRPromise(!0),this._sending=this._active=0,this._initProgressObject(this),this._initEventHandlers()},active:function(){return this._active},progress:function(){return this._progress},add:function(e){var n=this;e&&!this.options.disabled&&(e.fileInput&&!e.files?this._getFileInputFiles(e.fileInput).always(function(t){e.files=t,n._onAdd(null,e)}):(e.files=t.makeArray(e.files),this._onAdd(null,e)))},send:function(e){if(e&&!this.options.disabled){if(e.fileInput&&!e.files){var n,i,r=this,a=t.Deferred(),o=a.promise();return o.abort=function(){return i=!0,n?n.abort():(a.reject(null,"abort","abort"),o)},this._getFileInputFiles(e.fileInput).always(function(t){if(!i){if(!t.length)return void a.reject();e.files=t,n=r._onSend(null,e),n.then(function(t,e,n){a.resolve(t,e,n)},function(t,e,n){a.reject(t,e,n)})}}),this._enhancePromise(o)}if(e.files=t.makeArray(e.files),e.files.length)return this._onSend(null,e)}return this._getXHRPromise(!1,e&&e.context)}})});var Collejo=Collejo||{settings:{alertInClass:"bounceInDown",alertOutClass:"fadeOutUp"},lang:{},templates:{},form:{},link:{},modal:{},dynamics:{},browser:{},components:{},image:{},ready:{push:function(t,e){C.f.push({callback:t,recall:e===!0})},call:function(t){$.each(C.f,function(e,n){n.callback(t)})},recall:function(t){$.each(C.f,function(e,n){n.recall&&n.callback(t)})}}};jQuery.events=function(t){var e,n=[];return jQuery(t).each(function(){(e=jQuery._data(this,"events"))&&n.push({element:this,events:e})}),n.length>0?n:null},$(function(){Collejo.ready.call($(document))}),Collejo.browser.isOpera=!!window.opr&&!!opr.addons||!!window.opera||navigator.userAgent.indexOf(" OPR/")>=0,Collejo.browser.isFirefox="undefined"!=typeof InstallTrigger,Collejo.browser.isSafari=Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0,Collejo.browser.isIE=!!document.documentMode,Collejo.browser.isEdge=!Collejo.browser.isIE&&!!window.StyleMedia,Collejo.browser.isChrome=!!window.chrome&&!!window.chrome.webstore,Collejo.browser.isBlink=(Collejo.browser.isChrome||Collejo.browser.isOpera)&&!!window.CSS,Collejo.templates.spinnerTemplate=function(){return $('')},Collejo.templates.alertTemplate=function(t,e,n){return $('")},Collejo.templates.alertWrap=function(){return $('
    ')},Collejo.templates.alertContainer=function(){return $('
    ')},Collejo.templates.ajaxLoader=function(){return $('
    ')},Collejo.templates.dateTimePickerIcons=function(){return{time:"fa fa-clock-o",date:"fa fa-calendar",up:"fa fa-chevron-up",down:"fa fa-chevron-down",previous:"fa fa-chevron-left",next:"fa fa-chevron-right",today:"fa fa-calendar-check-o",clear:"fa fa-trash-o",close:"fa fa-close"}},$.ajaxSetup({headers:{"X-CSRF-Token":$('meta[name="token"]').attr("content"),"X-User-Time":new Date}}),Collejo.ajaxComplete=function(t,e,n){var i,r,a,o=0;try{o=$.parseJSON(e.responseText)}catch(s){console.log(s)}if(r=0==o?e.status:o,403!=r&&401!=r||(Collejo.alert("danger",Collejo.lang.ajax_unauthorize,3e3),$(".modal,.modal-backdrop").remove(),window.location=n.url),400==r&&(Collejo.alert("warning",o.message,!1),$(".modal,.modal-backdrop").remove()),0!=r&&null!=r){var i=void 0!=r.code?r.code:0;if(0==i){if(void 0!=o.data&&void 0!=o.data.partial){var l=o.data.target?o.data.target:"ajax-target",l=$("#"+l),u=$(o.data.partial);Collejo.dynamics.prependRow(u,l),Collejo.ready.recall(u)}if(void 0!=o.data&&void 0!=o.data.redir&&(null!=o.message&&(Collejo.alert(o.success?"success":"warning",o.message+". redirecting…",1e3),a=0),setTimeout(function(){window.location=o.data.redir},a)),void 0!=o.message&&null!=o.message&&o.message.length>0&&void 0==o.data.redir&&Collejo.alert(o.success?"success":"warning",o.message,3e3),void 0!=o.data&&void 0!=o.data.errors){var c=""+Collejo.lang.validation_failed+" "+Collejo.lang.validation_correct+"
    ";$.each(o.data.errors,function(t,e){$.each(e,function(t,e){c=c+e+"
    "})}),Collejo.alert("warning",c,5e3)}}}$(window).resize()},$(document).ajaxComplete(Collejo.ajaxComplete),Collejo.image.lazyLoad=function(t){t.hide(),t.each(function(t){this.complete?$(this).fadeIn():$(this).load(function(){$(this).fadeIn(500)})})},Collejo.ready.push(function(t){Collejo.image.lazyLoad($(t).find("img.img-lazy"))}),$.fn.datetimepicker.defaults.icons=Collejo.templates.dateTimePickerIcons(),Collejo.ready.push(function(t){$(t).find('[data-toggle="date-input"]').datetimepicker({format:"YYYY-MM-DD"})},!0),Collejo.ready.push(function(t){$(t).find('[data-toggle="time-input"]').datetimepicker({format:"HH:i:s"})},!0),Collejo.ready.push(function(t){$(t).find('[data-toggle="date-time-input"]').datetimepicker({format:"YYYY-MM-DD HH:i:s"})},!0),Selectize.define("allow-clear",function(t){var e=this,n=$('');this.setup=function(){var t=e.setup;return function(){t.apply(this,arguments),""==this.getValue()&&n.addClass("disabled"),this.$wrapper.append(n),this.$wrapper.on("click",".clear-selection",function(t){t.preventDefault(),e.isLocked||(e.clear(),e.$control_input.focus())}),this.on("change",function(t){""==t?this.$wrapper.find(".clear-selection").addClass("disabled"):this.$wrapper.find(".clear-selection").removeClass("disabled")})}}()}),Collejo.ready.push(function(t){Collejo.components.dropDown($(t).find('[data-toggle="select-dropdown"]')),Collejo.components.searchDropDown($(t).find('[data-toggle="search-dropdown"]'))},!0),Collejo.components.dropDown=function(t){if(t.each(function(){var t=$(this);null==t.data("toggle")&&t.data("toggle","select-dropdown");var e=[];1==t.data("allow-clear")&&e.push("allow-clear"),t.selectize({placeholder:Collejo.lang.select,plugins:e});var n=t[0].selectize;n.on("change",function(){t.valid()})}),1==t.length){var e=t[0].selectize;return e}},Collejo.components.searchDropDown=function(t){if(t.each(function(){var t=$(this);null==t.data("toggle")&&t.data("toggle","search-dropdown");var e=[];1==t.data("allow-clear")&&e.push("allow-clear"),t.selectize({placeholder:Collejo.lang.search,valueField:"id",labelField:"name",searchField:"name",options:[],create:!1,plugins:e,render:{option:function(t,e){return"
    "+t.name+"
    "},item:function(t,e){return"
    "+t.name+"
    "}},load:function(e,n){return e.length?(Collejo.templates.spinnerTemplate().addClass("inline").insertAfter(t),void $.ajax({url:t.data("url"),type:"GET",dataType:"json",data:{q:e},error:function(){n(),t.siblings(".spinner-wrap").remove()},success:function(e){n(e.data),t.siblings(".spinner-wrap").remove()}})):n()}});var n=t[0].selectize;n.on("change",function(){t.valid()})}),1==t.length){var e=t[0].selectize;return e}},Collejo.ready.push(function(t){$(t).on("click",'[data-toggle="ajax-link"]',function(t){t.preventDefault(),Collejo.link.ajax($(this))})}),Collejo.link.ajax=function(t,e){function n(t){$.getJSON(t.attr("href"),function(n){if(null==t.data("success-callback"))"function"==typeof e&&e(t,n);else{var i=window[t.data("success-callback")];"function"==typeof i&&i(t,n)}})}null==t.data("confirm")?n(t):bootbox.confirm({message:t.data("confirm"),buttons:{cancel:{label:Collejo.lang.no,className:"btn-default"},confirm:{label:Collejo.lang.yes,className:"btn-danger"}},callback:function(e){e&&n(t)}})},Collejo.alert=function(t,e,n){var i=Collejo.templates.alertWrap(),r=Collejo.templates.alertContainer();i.css({position:"fixed",top:"60px",width:"100%",height:0,"z-index":99999}),r.css({width:"400px",margin:"0 auto"}),i.append(r);var a=Collejo.templates.alertTemplate(t,e,n);0==$("#alert-wrap").length&&$("body").append(i);var r=$("#alert-wrap").find(".alert-container");n===!1&&r.empty(),a.appendTo(r).addClass("animated "+Collejo.settings.alertInClass),n!==!1&&window.setTimeout(function(){Collejo.browser.isFirefox||Collejo.browser.isChrome?a.removeClass(Collejo.settings.alertInClass).addClass(Collejo.settings.alertOutClass).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){a.remove()}):a.remove()},n)},Collejo.form.lock=function(t){$(t).find("input").attr("readonly",!0),$(t).find(".selectized").each(function(){$(this)[0].selectize.lock()}),$(t).find(".fileinput-button").each(function(){$(this).addClass("disabled").find("input").attr("disabled",!0)}),$(t).find('button[type="submit"]').attr("disabled",!0).append(Collejo.templates.spinnerTemplate()),$(t).find('input[type="checkbox"]').attr("readonly",!0).parent(".checkbox-row").addClass("disabled")},Collejo.form.unlock=function(t){$(t).find("input").attr("readonly",!1),$(t).find(".selectized").each(function(){$(this)[0].selectize.unlock()}),$(t).find(".fileinput-button").each(function(){$(this).removeClass("disabled").find("input").attr("disabled",!1)}),$(t).find('button[type="submit"]').attr("disabled",!1).find(".spinner-wrap").remove(),$(t).find('input[type="checkbox"]').attr("readonly",!1).parent(".checkbox-row").removeClass("disabled")},Collejo.ready.push(function(t){$.validator.setDefaults({ignore:$(".selectize"),errorPlacement:function(t,e){$(e).parents(".input-group").length?t.insertAfter($(e).parents(".input-group")):"select-dropdown"==$(e).data("toggle")||"search-dropdown"==$(e).data("toggle")?t.insertAfter($(e).siblings(".selectize-control")):t.insertAfter(e)},highlight:function(t,e,n){"radio"===t.type?this.findByName(t.name).addClass(e).removeClass(n):"select-dropdown"==$(t).data("toggle")||"search-dropdown"==$(t).data("toggle")?$(t).siblings(".selectize-control").addClass(e).removeClass(n):$(t).addClass(e).removeClass(n)},unhighlight:function(t,e,n){"radio"===t.type?this.findByName(t.name).removeClass(e).addClass(n):"select-dropdown"==$(t).data("toggle")||"search-dropdown"==$(t).data("toggle")?$(t).siblings(".selectize-control").removeClass(e).addClass(n):$(t).removeClass(e).addClass(n)}})}),Collejo.ready.push(function(t){$(t).on("click",'[data-toggle="dynamic-delete"]',function(t){t.preventDefault(),Collejo.dynamics["delete"]($(this))}),Collejo.dynamics.checkRowCount($(t).find(".table-list")),Collejo.dynamics.checkRowCount($(t).find(".column-list"))}),Collejo.dynamics["delete"]=function(t){Collejo.link.ajax(t,function(t,e){t.parents(".table-list");t.closest("."+t.data("delete-block")).fadeOut().remove(),Collejo.dynamics.checkRowCount(t.parents(".table-list"))})},Collejo.dynamics.prependRow=function(t,e){var n=Collejo.dynamics.getListType(e),i=t.prop("id"),r=e.find("#"+i);r.length?r.replaceWith(t):"table"==n?t.hide().insertAfter(e.find("th").parent()).fadeIn():"columns"==n?t.hide().prependTo(e.find(".columns")).fadeIn():t.hide().prependTo(e).fadeIn(),Collejo.dynamics.checkRowCount(e)},Collejo.dynamics.getListType=function(t){var e;return t.find("table").length||"TABLE"==t.prop("tagName")?e="table":t.find("columns").length&&(e="columns"),e},Collejo.dynamics.checkRowCount=function(t){var e=Collejo.dynamics.getListType(t);if(e="table"){var n=t.find("table");1==n.find("tr").length?(t.find(".placeholder").show(),n.hide()):(t.find(".placeholder").hide(),n.show())}if(e="columns"){var i=t.find("columns");0==i.find(".col-md-6").children().length?(i.siblings(".col-md-6").show(),i.hide()):(t.siblings(".col-md-6").hide(),i.show())}},Collejo.modal.open=function(t){var e=null!=t.data("modal-id")?t.data("modal-id"):"ajax-modal-"+moment(),n=null!=t.data("modal-size")?" modal-"+t.data("modal-size")+" ":"",i=null==t.data("modal-backdrop")||t.data("modal-backdrop"),r=null==t.data("modal-keyboard")||t.data("modal-keyboard"),a=$(''),o=Collejo.templates.ajaxLoader();null!=o&&o.appendTo(a),$("body").append(a),a.on("show.bs.modal",function(){$.ajax({url:t.attr("href"),type:"GET",success:function(t){1==t.success&&t.data&&t.data.content&&(a.find(".modal-dialog").html(t.data.content),a.removeClass("loading"),null!=o&&o.remove(),Collejo.ready.recall(a))}})}).on("hidden.bs.modal",function(){a.remove()}).modal({backdrop:i,keyboard:r})},Collejo.modal.close=function(t){$(document).find("#"+$(t).prop("id")).closest(".modal").modal("hide")},Collejo.ready.push(function(t){$(t).on("click",'[data-toggle="ajax-modal"]',function(t){t.preventDefault(),Collejo.modal.open($(this))}),$(t).on("DOMNodeInserted",".modal-backdrop",function(t){$(".modal-backdrop").length>1&&$(".modal-backdrop").last().css({"z-index":parseInt($(".modal").last().prev().css("z-index"))+10})}),$(t).on("DOMNodeInserted",".modal",function(t){$(".modal").length>1&&$(".modal").last().css({"z-index":parseInt($(".modal-backdrop").last().prev().css("z-index"))+10})})}),$(function(){$(window).resize(),$(".dash-content a").click(function(t){var e=$(this).prop("href");"#"==e.substr(e.length-1)&&t.preventDefault()})}),$(window).on("resize",function(){var t=$(".dash-content .tab-content");t&&t.offset()&&t.css({"min-height":$(document).height()-t.offset().top-35+"px"});var e=$(".tabs-left");e&&t&&e.css({height:t.height()+"px"});var n=$(".section-content,.landing-screen");n&&n.offset()&&n.css({"min-height":$(document).height()-n.offset().top-35+"px" -})}); \ No newline at end of file diff --git a/src/resources/assets/build/js/collejo.js b/src/resources/assets/build/js/collejo.js deleted file mode 100644 index a165bdf..0000000 --- a/src/resources/assets/build/js/collejo.js +++ /dev/null @@ -1,46686 +0,0 @@ -/*! - * jQuery JavaScript Library v1.9.1 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2013-2-4 - */ -(function( window, undefined ) { - -// Can't do this because several apps including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -// Support: Firefox 18+ -//"use strict"; -var - // The deferred used on DOM ready - readyList, - - // A central reference to the root jQuery(document) - rootjQuery, - - // Support: IE<9 - // For `typeof node.method` instead of `node.method !== undefined` - core_strundefined = typeof undefined, - - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - location = window.location, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // [[Class]] -> type pairs - class2type = {}, - - // List of deleted data cache ids, so we can reuse them - core_deletedIds = [], - - core_version = "1.9.1", - - // Save a reference to some core methods - core_concat = core_deletedIds.concat, - core_push = core_deletedIds.push, - core_slice = core_deletedIds.slice, - core_indexOf = core_deletedIds.indexOf, - core_toString = class2type.toString, - core_hasOwn = class2type.hasOwnProperty, - core_trim = core_version.trim, - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, - - // Used for matching numbers - core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, - - // Used for splitting on whitespace - core_rnotwhite = /\S+/g, - - // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, - rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }, - - // The ready event handler - completed = function( event ) { - - // readyState === "complete" is good enough for us to call the dom ready in oldIE - if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { - detach(); - jQuery.ready(); - } - }, - // Clean-up method for dom ready events - detach = function() { - if ( document.addEventListener ) { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - - } else { - document.detachEvent( "onreadystatechange", completed ); - window.detachEvent( "onload", completed ); - } - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: core_version, - - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - - // scripts is true for back-compat - jQuery.merge( this, jQuery.parseHTML( - match[1], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - toArray: function() { - return core_slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this[ this.length + num ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - ret.context = this.context; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; - }, - - slice: function() { - return this.pushStack( core_slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: core_push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - var src, copyIsArray, copy, name, options, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger("ready").off("ready"); - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - isWindow: function( obj ) { - return obj != null && obj == obj.window; - }, - - isNumeric: function( obj ) { - return !isNaN( parseFloat(obj) ) && isFinite( obj ); - }, - - type: function( obj ) { - if ( obj == null ) { - return String( obj ); - } - return typeof obj === "object" || typeof obj === "function" ? - class2type[ core_toString.call(obj) ] || "object" : - typeof obj; - }, - - isPlainObject: function( obj ) { - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - try { - // Not own constructor property must be Object - if ( obj.constructor && - !core_hasOwn.call(obj, "constructor") && - !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - } catch ( e ) { - // IE8,9 Will throw exceptions on certain host objects #9897 - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || core_hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw new Error( msg ); - }, - - // data: string of html - // context (optional): If specified, the fragment will be created in this context, defaults to document - // keepScripts (optional): If true, will include scripts passed in the html string - parseHTML: function( data, context, keepScripts ) { - if ( !data || typeof data !== "string" ) { - return null; - } - if ( typeof context === "boolean" ) { - keepScripts = context; - context = false; - } - context = context || document; - - var parsed = rsingleTag.exec( data ), - scripts = !keepScripts && []; - - // Single tag - if ( parsed ) { - return [ context.createElement( parsed[1] ) ]; - } - - parsed = jQuery.buildFragment( [ data ], context, scripts ); - if ( scripts ) { - jQuery( scripts ).remove(); - } - return jQuery.merge( [], parsed.childNodes ); - }, - - parseJSON: function( data ) { - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( data ); - } - - if ( data === null ) { - return data; - } - - if ( typeof data === "string" ) { - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - if ( data ) { - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test( data.replace( rvalidescape, "@" ) - .replace( rvalidtokens, "]" ) - .replace( rvalidbraces, "")) ) { - - return ( new Function( "return " + data ) )(); - } - } - } - - jQuery.error( "Invalid JSON: " + data ); - }, - - // Cross-browser xml parsing - parseXML: function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - try { - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); - } - } catch( e ) { - xml = undefined; - } - if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; - }, - - noop: function() {}, - - // Evaluates a script in a global context - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && jQuery.trim( data ) ) { - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); - } )( data ); - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - // args is for internal usage only - each: function( obj, callback, args ) { - var value, - i = 0, - length = obj.length, - isArray = isArraylike( obj ); - - if ( args ) { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } - } - - return obj; - }, - - // Use native String.trim function wherever possible - trim: core_trim && !core_trim.call("\uFEFF\xA0") ? - function( text ) { - return text == null ? - "" : - core_trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - core_push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - var len; - - if ( arr ) { - if ( core_indexOf ) { - return core_indexOf.call( arr, elem, i ); - } - - len = arr.length; - i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; - - for ( ; i < len; i++ ) { - // Skip accessing in sparse arrays - if ( i in arr && arr[ i ] === elem ) { - return i; - } - } - } - - return -1; - }, - - merge: function( first, second ) { - var l = second.length, - i = first.length, - j = 0; - - if ( typeof l === "number" ) { - for ( ; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var retVal, - ret = [], - i = 0, - length = elems.length; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, - i = 0, - length = elems.length, - isArray = isArraylike( elems ), - ret = []; - - // Go through the array, translating each of the items to their - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return core_concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var args, proxy, tmp; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = core_slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - // Multifunctional method to get and set values of a collection - // The value/s can optionally be executed if it's a function - access: function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - length = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < length; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - length ? fn( elems[0], key ) : emptyGet; - }, - - now: function() { - return ( new Date() ).getTime(); - } -}); - -jQuery.ready.promise = function( obj ) { - if ( !readyList ) { - - readyList = jQuery.Deferred(); - - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); - - // Standards-based browsers support DOMContentLoaded - } else if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - - // If IE event model is used - } else { - // Ensure firing before onload, maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", completed ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", completed ); - - // If IE and not a frame - // continually check to see if the document is ready - var top = false; - - try { - top = window.frameElement == null && document.documentElement; - } catch(e) {} - - if ( top && top.doScroll ) { - (function doScrollCheck() { - if ( !jQuery.isReady ) { - - try { - // Use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - top.doScroll("left"); - } catch(e) { - return setTimeout( doScrollCheck, 50 ); - } - - // detach all dom ready events - detach(); - - // and execute any waiting functions - jQuery.ready(); - } - })(); - } - } - } - return readyList.promise( obj ); -}; - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -function isArraylike( obj ) { - var length = obj.length, - type = jQuery.type( obj ); - - if ( jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || type !== "function" && - ( length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj ); -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); -// String to Object options format cache -var optionsCache = {}; - -// Convert String-formatted options into Object-formatted ones and store in cache -function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { - object[ flag ] = true; - }); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // First callback to fire (used internally by add and fireWith) - firingStart, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && type !== "string" ) { - // Inspect recursively - add( arg ); - } - }); - })( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away - } else if ( memory ) { - firingStart = start; - fire( memory ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } - } - }); - } - return this; - }, - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); - }, - // Remove all callbacks from the list - empty: function() { - list = []; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( list && ( !fired || stack ) ) { - if ( firing ) { - stack.push( args ); - } else { - fire( args ); - } - } - return this; - }, - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; -jQuery.extend({ - - Deferred: function( func ) { - var tuples = [ - // action, add listener, listener list, final state - [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], - [ "notify", "progress", jQuery.Callbacks("memory") ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - then: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - return jQuery.Deferred(function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - var action = tuple[ 0 ], - fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; - // deferred[ done | fail | progress ] for forwarding actions to newDefer - deferred[ tuple[1] ](function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); - } else { - newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); - } - }); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Keep pipe for back-compat - promise.pipe = promise.then; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; - - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; - - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; - - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } - - // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); - return this; - }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = core_slice.call( arguments ), - length = resolveValues.length, - - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : jQuery.Deferred(), - - // Update function for both resolve and progress values - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; - if( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, - - progressValues, progressContexts, resolveContexts; - - // add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } - - // if we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } - - return deferred.promise(); - } -}); -jQuery.support = (function() { - - var support, all, a, - input, select, fragment, - opt, eventName, isSupported, i, - div = document.createElement("div"); - - // Setup - div.setAttribute( "className", "t" ); - div.innerHTML = "
    a"; - - // Support tests won't run in some limited or non-browser environments - all = div.getElementsByTagName("*"); - a = div.getElementsByTagName("a")[ 0 ]; - if ( !all || !a || !all.length ) { - return {}; - } - - // First batch of tests - select = document.createElement("select"); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName("input")[ 0 ]; - - a.style.cssText = "top:1px;float:left;opacity:.5"; - support = { - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - getSetAttribute: div.className !== "t", - - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: div.firstChild.nodeType === 3, - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName("tbody").length, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName("link").length, - - // Get the style information from getAttribute - // (IE uses .cssText instead) - style: /top/.test( a.getAttribute("style") ), - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: a.getAttribute("href") === "/a", - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.5/.test( a.style.opacity ), - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, - - // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) - checkOn: !!input.value, - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: opt.selected, - - // Tests for enctype support on a form (#6743) - enctype: !!document.createElement("form").enctype, - - // Makes sure cloning an html5 element does not cause problems - // Where outerHTML is undefined, this still works - html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", - - // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode - boxModel: document.compatMode === "CSS1Compat", - - // Will be defined later - deleteExpando: true, - noCloneEvent: true, - inlineBlockNeedsLayout: false, - shrinkWrapBlocks: false, - reliableMarginRight: true, - boxSizingReliable: true, - pixelPosition: false - }; - - // Make sure checked status is properly cloned - input.checked = true; - support.noCloneChecked = input.cloneNode( true ).checked; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Support: IE<9 - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - - // Check if we can trust getAttribute("value") - input = document.createElement("input"); - input.setAttribute( "value", "" ); - support.input = input.getAttribute( "value" ) === ""; - - // Check if an input maintains its value after becoming a radio - input.value = "t"; - input.setAttribute( "type", "radio" ); - support.radioValue = input.value === "t"; - - // #11217 - WebKit loses check when the name is after the checked attribute - input.setAttribute( "checked", "t" ); - input.setAttribute( "name", "t" ); - - fragment = document.createDocumentFragment(); - fragment.appendChild( input ); - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; - - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE<9 - // Opera does not clone events (and typeof div.attachEvent === undefined). - // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() - if ( div.attachEvent ) { - div.attachEvent( "onclick", function() { - support.noCloneEvent = false; - }); - - div.cloneNode( true ).click(); - } - - // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) - // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php - for ( i in { submit: true, change: true, focusin: true }) { - div.setAttribute( eventName = "on" + i, "t" ); - - support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; - } - - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - // Run tests that need a body at doc ready - jQuery(function() { - var container, marginDiv, tds, - divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", - body = document.getElementsByTagName("body")[0]; - - if ( !body ) { - // Return for frameset docs that don't have a body - return; - } - - container = document.createElement("div"); - container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; - - body.appendChild( container ).appendChild( div ); - - // Support: IE8 - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - div.innerHTML = "
    t
    "; - tds = div.getElementsByTagName("td"); - tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; - isSupported = ( tds[ 0 ].offsetHeight === 0 ); - - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; - - // Support: IE8 - // Check if empty table cells still have offsetWidth/Height - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - - // Check box-sizing and margin behavior - div.innerHTML = ""; - div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; - support.boxSizing = ( div.offsetWidth === 4 ); - support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); - - // Use window.getComputedStyle because jsdom on node.js will break without it. - if ( window.getComputedStyle ) { - support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; - support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - marginDiv = div.appendChild( document.createElement("div") ); - marginDiv.style.cssText = div.style.cssText = divReset; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - - support.reliableMarginRight = - !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); - } - - if ( typeof div.style.zoom !== core_strundefined ) { - // Support: IE<8 - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - div.innerHTML = ""; - div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); - - // Support: IE6 - // Check if elements with layout shrink-wrap their children - div.style.display = "block"; - div.innerHTML = "
    "; - div.firstChild.style.width = "5px"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); - - if ( support.inlineBlockNeedsLayout ) { - // Prevent IE 6 from affecting layout for positioned elements #11048 - // Prevent IE from shrinking the body in IE 7 mode #12869 - // Support: IE<8 - body.style.zoom = 1; - } - } - - body.removeChild( container ); - - // Null elements to avoid leaks in IE - container = div = tds = marginDiv = null; - }); - - // Null elements to avoid leaks in IE - all = select = fragment = opt = a = input = null; - - return support; -})(); - -var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, - rmultiDash = /([A-Z])/g; - -function internalData( elem, name, data, pvt /* Internal Use Only */ ){ - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var thisCache, ret, - internalKey = jQuery.expando, - getByName = typeof name === "string", - - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, - - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, - - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; - - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { - return; - } - - if ( !id ) { - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++; - } else { - id = internalKey; - } - } - - if ( !cache[ id ] ) { - cache[ id ] = {}; - - // Avoids exposing jQuery metadata on plain JS objects when the object - // is serialized using JSON.stringify - if ( !isNode ) { - cache[ id ].toJSON = jQuery.noop; - } - } - - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - if ( typeof name === "object" || typeof name === "function" ) { - if ( pvt ) { - cache[ id ] = jQuery.extend( cache[ id ], name ); - } else { - cache[ id ].data = jQuery.extend( cache[ id ].data, name ); - } - } - - thisCache = cache[ id ]; - - // jQuery data() is stored in a separate object inside the object's internal data - // cache in order to avoid key collisions between internal data and user-defined - // data. - if ( !pvt ) { - if ( !thisCache.data ) { - thisCache.data = {}; - } - - thisCache = thisCache.data; - } - - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } - - // Check for both converted-to-camel and non-converted data property names - // If a data property was specified - if ( getByName ) { - - // First Try to find as-is property data - ret = thisCache[ name ]; - - // Test for null|undefined property data - if ( ret == null ) { - - // Try to find the camelCased property - ret = thisCache[ jQuery.camelCase( name ) ]; - } - } else { - ret = thisCache; - } - - return ret; -} - -function internalRemoveData( elem, name, pvt ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var i, l, thisCache, - isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } - - if ( name ) { - - thisCache = pvt ? cache[ id ] : cache[ id ].data; - - if ( thisCache ) { - - // Support array or space separated string names for data keys - if ( !jQuery.isArray( name ) ) { - - // try the string as a key before any manipulation - if ( name in thisCache ) { - name = [ name ]; - } else { - - // split the camel cased version by spaces unless a key with the spaces exists - name = jQuery.camelCase( name ); - if ( name in thisCache ) { - name = [ name ]; - } else { - name = name.split(" "); - } - } - } else { - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = name.concat( jQuery.map( name, jQuery.camelCase ) ); - } - - for ( i = 0, l = name.length; i < l; i++ ) { - delete thisCache[ name[i] ]; - } - - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { - return; - } - } - } - - // See jQuery.data for more information - if ( !pvt ) { - delete cache[ id ].data; - - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject( cache[ id ] ) ) { - return; - } - } - - // Destroy the cache - if ( isNode ) { - jQuery.cleanData( [ elem ], true ); - - // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) - } else if ( jQuery.support.deleteExpando || cache != cache.window ) { - delete cache[ id ]; - - // When all else fails, null - } else { - cache[ id ] = null; - } -} - -jQuery.extend({ - cache: {}, - - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", - "applet": true - }, - - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; - return !!elem && !isEmptyDataObject( elem ); - }, - - data: function( elem, name, data ) { - return internalData( elem, name, data ); - }, - - removeData: function( elem, name ) { - return internalRemoveData( elem, name ); - }, - - // For internal use only. - _data: function( elem, name, data ) { - return internalData( elem, name, data, true ); - }, - - _removeData: function( elem, name ) { - return internalRemoveData( elem, name, true ); - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - // Do not set data on non-element because it will not be cleared (#8335). - if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { - return false; - } - - var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; - - // nodes accept data unless otherwise specified; rejection can be conditional - return !noData || noData !== true && elem.getAttribute("classid") === noData; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var attrs, name, - elem = this[0], - i = 0, - data = null; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = jQuery.data( elem ); - - if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { - attrs = elem.attributes; - for ( ; i < attrs.length; i++ ) { - name = attrs[i].name; - - if ( !name.indexOf( "data-" ) ) { - name = jQuery.camelCase( name.slice(5) ); - - dataAttr( elem, name, data[ name ] ); - } - } - jQuery._data( elem, "parsedAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - return jQuery.access( this, function( value ) { - - if ( value === undefined ) { - // Try to fetch any internally stored data first - return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; - } - - this.each(function() { - jQuery.data( this, key, value ); - }); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - -function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - - var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - -// checks a cache object for emptiness -function isEmptyDataObject( obj ) { - var name; - for ( name in obj ) { - - // if the public data object is empty, the private is still empty - if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { - continue; - } - if ( name !== "toJSON" ) { - return false; - } - } - - return true; -} -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = jQuery._data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray(data) ) { - queue = jQuery._data( elem, type, jQuery.makeArray(data) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - hooks.cur = fn; - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // not intended for public consumption - generates a queueHooks object, or returns the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return jQuery._data( elem, key ) || jQuery._data( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - jQuery._removeData( elem, type + "queue" ); - jQuery._removeData( elem, key ); - }) - }); - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); - } - - return data === undefined ? - this : - this.each(function() { - var queue = jQuery.queue( this, type, data ); - - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = setTimeout( next, time ); - hooks.stop = function() { - clearTimeout( timeout ); - }; - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while( i-- ) { - tmp = jQuery._data( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); -var nodeHook, boolHook, - rclass = /[\t\r\n]/g, - rreturn = /\r/g, - rfocusable = /^(?:input|select|textarea|button|object)$/i, - rclickable = /^(?:a|area)$/i, - rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i, - ruseDefault = /^(?:checked|selected)$/i, - getSetAttribute = jQuery.support.getSetAttribute, - getSetInput = jQuery.support.input; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - }, - - prop: function( name, value ) { - return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - name = jQuery.propFix[ name ] || name; - return this.each(function() { - // try/catch handles cases where IE balks (such as removing a property on window) - try { - this[ name ] = undefined; - delete this[ name ]; - } catch( e ) {} - }); - }, - - addClass: function( value ) { - var classes, elem, cur, clazz, j, - i = 0, - len = this.length, - proceed = typeof value === "string" && value; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call( this, j, this.className ) ); - }); - } - - if ( proceed ) { - // The disjunction here is for better compressibility (see removeClass) - classes = ( value || "" ).match( core_rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - " " - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - elem.className = jQuery.trim( cur ); - - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, - i = 0, - len = this.length, - proceed = arguments.length === 0 || typeof value === "string" && value; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( core_rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - "" - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - elem.className = value ? jQuery.trim( cur ) : ""; - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isBool = typeof stateVal === "boolean"; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - state = stateVal, - classNames = value.match( core_rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space separated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - // Toggle whole class name - } else if ( type === core_strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } - - // If the element has a class name or if we're passed "false", - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " ", - i = 0, - l = this.length; - for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - var ret, hooks, isFunction, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var val, - self = jQuery(this); - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, self.val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map(val, function ( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; - } - }, - select: { - get: function( elem ) { - var value, option, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one" || index < 0, - values = one ? null : [], - max = one ? index + 1 : options.length, - i = index < 0 ? - max : - one ? index : 0; - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // oldIE doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - // Don't return options that are disabled or in a disabled optgroup - ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && - ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var values = jQuery.makeArray( value ); - - jQuery(elem).find("option").each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, - - attr: function( elem, name, value ) { - var hooks, notxml, ret, - nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === core_strundefined ) { - return jQuery.prop( elem, name, value ); - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( notxml ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - - // In IE9+, Flash objects don't have .getAttribute (#12945) - // Support: IE9+ - if ( typeof elem.getAttribute !== core_strundefined ) { - ret = elem.getAttribute( name ); - } - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, value ) { - var name, propName, - i = 0, - attrNames = value && value.match( core_rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( rboolean.test( name ) ) { - // Set corresponding property to false for boolean attributes - // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8 - if ( !getSetAttribute && ruseDefault.test( name ) ) { - elem[ jQuery.camelCase( "default-" + name ) ] = - elem[ propName ] = false; - } else { - elem[ propName ] = false; - } - - // See #9699 for explanation of this approach (setting first, then removal) - } else { - jQuery.attr( elem, name, "" ); - } - - elem.removeAttribute( getSetAttribute ? name : propName ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to default in case type is set after value during creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - propFix: { - tabindex: "tabIndex", - readonly: "readOnly", - "for": "htmlFor", - "class": "className", - maxlength: "maxLength", - cellspacing: "cellSpacing", - cellpadding: "cellPadding", - rowspan: "rowSpan", - colspan: "colSpan", - usemap: "useMap", - frameborder: "frameBorder", - contenteditable: "contentEditable" - }, - - prop: function( elem, name, value ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - return ( elem[ name ] = value ); - } - - } else { - if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - return elem[ name ]; - } - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - var attributeNode = elem.getAttributeNode("tabindex"); - - return attributeNode && attributeNode.specified ? - parseInt( attributeNode.value, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - } - } -}); - -// Hook for boolean attributes -boolHook = { - get: function( elem, name ) { - var - // Use .prop to determine if this attribute is understood as boolean - prop = jQuery.prop( elem, name ), - - // Fetch it accordingly - attr = typeof prop === "boolean" && elem.getAttribute( name ), - detail = typeof prop === "boolean" ? - - getSetInput && getSetAttribute ? - attr != null : - // oldIE fabricates an empty string for missing boolean attributes - // and conflates checked/selected into attroperties - ruseDefault.test( name ) ? - elem[ jQuery.camelCase( "default-" + name ) ] : - !!attr : - - // fetch an attribute node for properties not recognized as boolean - elem.getAttributeNode( name ); - - return detail && detail.value !== false ? - name.toLowerCase() : - undefined; - }, - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { - // IE<8 needs the *property* name - elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); - - // Use defaultChecked and defaultSelected for oldIE - } else { - elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; - } - - return name; - } -}; - -// fix oldIE value attroperty -if ( !getSetInput || !getSetAttribute ) { - jQuery.attrHooks.value = { - get: function( elem, name ) { - var ret = elem.getAttributeNode( name ); - return jQuery.nodeName( elem, "input" ) ? - - // Ignore the value *property* by using defaultValue - elem.defaultValue : - - ret && ret.specified ? ret.value : undefined; - }, - set: function( elem, value, name ) { - if ( jQuery.nodeName( elem, "input" ) ) { - // Does not return so that setAttribute is also used - elem.defaultValue = value; - } else { - // Use nodeHook if defined (#1954); otherwise setAttribute is fine - return nodeHook && nodeHook.set( elem, value, name ); - } - } - }; -} - -// IE6/7 do not support getting/setting some attributes with get/setAttribute -if ( !getSetAttribute ) { - - // Use this for any attribute in IE6/7 - // This fixes almost every IE6/7 issue - nodeHook = jQuery.valHooks.button = { - get: function( elem, name ) { - var ret = elem.getAttributeNode( name ); - return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ? - ret.value : - undefined; - }, - set: function( elem, value, name ) { - // Set the existing or create a new attribute node - var ret = elem.getAttributeNode( name ); - if ( !ret ) { - elem.setAttributeNode( - (ret = elem.ownerDocument.createAttribute( name )) - ); - } - - ret.value = value += ""; - - // Break association with cloned elements by also using setAttribute (#9646) - return name === "value" || value === elem.getAttribute( name ) ? - value : - undefined; - } - }; - - // Set contenteditable to false on removals(#10429) - // Setting to empty string throws an error as an invalid value - jQuery.attrHooks.contenteditable = { - get: nodeHook.get, - set: function( elem, value, name ) { - nodeHook.set( elem, value === "" ? false : value, name ); - } - }; - - // Set width and height to auto instead of 0 on empty string( Bug #8150 ) - // This is for removals - jQuery.each([ "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }); - }); -} - - -// Some attributes require a special call on IE -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !jQuery.support.hrefNormalized ) { - jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - get: function( elem ) { - var ret = elem.getAttribute( name, 2 ); - return ret == null ? undefined : ret; - } - }); - }); - - // href/src property should get the full normalized URL (#10299/#12915) - jQuery.each([ "href", "src" ], function( i, name ) { - jQuery.propHooks[ name ] = { - get: function( elem ) { - return elem.getAttribute( name, 4 ); - } - }; - }); -} - -if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Note: IE uppercases css property names, but if we were to .toLowerCase() - // .cssText, that would destroy case senstitivity in URL's, like in "background" - return elem.style.cssText || undefined; - }, - set: function( elem, value ) { - return ( elem.style.cssText = value + "" ); - } - }; -} - -// Safari mis-reports the default selected property of an option -// Accessing the parent's selectedIndex property fixes it -if ( !jQuery.support.optSelected ) { - jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { - get: function( elem ) { - var parent = elem.parentNode; - - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - return null; - } - }); -} - -// IE6/7 call enctype encoding -if ( !jQuery.support.enctype ) { - jQuery.propFix.enctype = "encoding"; -} - -// Radios and checkboxes getter/setter -if ( !jQuery.support.checkOn ) { - jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - get: function( elem ) { - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - } - }; - }); -} -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }); -}); -var rformElems = /^(?:input|select|textarea)$/i, - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - var tmp, events, t, handleObjIn, - special, eventHandle, handleObj, - handlers, type, namespaces, origType, - elemData = jQuery._data( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - if ( !(eventHandle = elemData.handle) ) { - eventHandle = elemData.handle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : - undefined; - }; - // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events - eventHandle.elem = elem; - } - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = ( types || "" ).match( core_rnotwhite ) || [""]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener/attachEvent if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - var j, handleObj, tmp, - origCount, t, events, - special, handlers, type, - namespaces, origType, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( core_rnotwhite ) || [""]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery._removeData( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - var handle, ontype, cur, - bubbleType, special, tmp, i, - eventPath = [ elem || document ], - type = core_hasOwn.call( event, "type" ) ? event.type : event, - namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf(":") < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - event.isTrigger = true; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { - event.preventDefault(); - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && - !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction() check here because IE6/7 fails that test. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - try { - elem[ type ](); - } catch ( e ) { - // IE<9 dies on focus/blur to hidden element (#1486,#12518) - // only reproducible on winXP IE8 native, not IE9 in IE8 mode - } - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, ret, handleObj, matched, j, - handlerQueue = [], - args = core_slice.call( arguments ), - handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var sel, handleObj, matches, i, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - for ( ; cur != this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: IE<9 - // Fix target property (#1925) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Support: Chrome 23+, Safari? - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Support: IE<9 - // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) - event.metaKey = !!event.metaKey; - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var body, eventDoc, doc, - button = original.button, - fromElement = original.fromElement; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { - this.click(); - return false; - } - } - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== document.activeElement && this.focus ) { - try { - this.focus(); - return false; - } catch ( e ) { - // Support: IE<9 - // If we error on focus to hidden element (#1486, #12518), - // let .trigger() run the handlers - } - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === document.activeElement && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - - beforeunload: { - postDispatch: function( event ) { - - // Even when returnValue equals to undefined Firefox will still show alert - if ( event.result !== undefined ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - var name = "on" + type; - - if ( elem.detachEvent ) { - - // #8545, #7054, preventing memory leaks for custom events in IE6-8 - // detachEvent needed property on element, by name of that event, to properly expose it to GC - if ( typeof elem[ name ] === core_strundefined ) { - elem[ name ] = null; - } - - elem.detachEvent( name, handle ); - } - }; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || - src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - if ( !e ) { - return; - } - - // If preventDefault exists, run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // Support: IE - // Otherwise set the returnValue property of the original event to false - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - if ( !e ) { - return; - } - // If stopPropagation exists, run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - - // Support: IE - // Set the cancelBubble property of the original event to true - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -}); - -// IE submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Lazy-add a submit handler when a descendant form may potentially be submitted - jQuery.event.add( this, "click._submit keypress._submit", function( e ) { - // Node name check avoids a VML-related crash in IE (#9807) - var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !jQuery._data( form, "submitBubbles" ) ) { - jQuery.event.add( form, "submit._submit", function( event ) { - event._submit_bubble = true; - }); - jQuery._data( form, "submitBubbles", true ); - } - }); - // return undefined since we don't need an event listener - }, - - postDispatch: function( event ) { - // If form was submitted by the user, bubble the event up the tree - if ( event._submit_bubble ) { - delete event._submit_bubble; - if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); - } - } - }, - - teardown: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Remove delegated handlers; cleanData eventually reaps submit handlers attached above - jQuery.event.remove( this, "._submit" ); - } - }; -} - -// IE change delegation and checkbox/radio fix -if ( !jQuery.support.changeBubbles ) { - - jQuery.event.special.change = { - - setup: function() { - - if ( rformElems.test( this.nodeName ) ) { - // IE doesn't fire change on a check/radio until blur; trigger it on click - // after a propertychange. Eat the blur-change in special.change.handle. - // This still fires onchange a second time for check/radio after blur. - if ( this.type === "checkbox" || this.type === "radio" ) { - jQuery.event.add( this, "propertychange._change", function( event ) { - if ( event.originalEvent.propertyName === "checked" ) { - this._just_changed = true; - } - }); - jQuery.event.add( this, "click._change", function( event ) { - if ( this._just_changed && !event.isTrigger ) { - this._just_changed = false; - } - // Allow triggered, simulated change events (#11500) - jQuery.event.simulate( "change", this, event, true ); - }); - } - return false; - } - // Delegated event; lazy-add a change handler on descendant inputs - jQuery.event.add( this, "beforeactivate._change", function( e ) { - var elem = e.target; - - if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); - } - }); - jQuery._data( elem, "changeBubbles", true ); - } - }); - }, - - handle: function( event ) { - var elem = event.target; - - // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { - return event.handleObj.handler.apply( this, arguments ); - } - }, - - teardown: function() { - jQuery.event.remove( this, "._change" ); - - return !rformElems.test( this.nodeName ); - } - }; -} - -// Create "bubbling" focus and blur events -if ( !jQuery.support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0, - handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - if ( attaches++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --attaches === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var type, origFn; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, - - delegate: function( selector, types, data, fn ) { - return this.on( types, selector, data, fn ); - }, - undelegate: function( selector, types, fn ) { - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2012 jQuery Foundation and other contributors - * Released under the MIT license - * http://sizzlejs.com/ - */ -(function( window, undefined ) { - -var i, - cachedruns, - Expr, - getText, - isXML, - compile, - hasDuplicate, - outermostContext, - - // Local document vars - setDocument, - document, - docElem, - documentIsXML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - sortOrder, - - // Instance-specific data - expando = "sizzle" + -(new Date()), - preferredDoc = window.document, - support = {}, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - - // General-purpose constants - strundefined = typeof undefined, - MAX_NEGATIVE = 1 << 31, - - // Array methods - arr = [], - pop = arr.pop, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf if we can't use a native one - indexOf = arr.indexOf || function( elem ) { - var i = 0, - len = this.length; - for ( ; i < len; i++ ) { - if ( this[i] === elem ) { - return i; - } - } - return -1; - }, - - - // Regular expressions - - // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - // http://www.w3.org/TR/css3-syntax/#characters - characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", - - // Loosely modeled on CSS identifier characters - // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors - // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = characterEncoding.replace( "w", "w#" ), - - // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors - operators = "([*^$|!~]?=)", - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + - "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", - - // Prefer arguments quoted, - // then not containing pseudos/brackets, - // then attribute selectors/non-parenthetical expressions, - // then anything else - // These preferences are here to reduce the number of selectors - // needing tokenize in the PSEUDO preFilter - pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), - "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), - "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rsibling = /[\x20\t\r\n\f]*[+~]/, - - rnative = /^[^{]+\{\s*\[native code/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rescape = /'|\\/g, - rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, - funescape = function( _, escaped ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - return high !== high ? - escaped : - // BMP codepoint - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }; - -// Use a stripped-down slice if we can't use a native one -try { - slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType; -} catch ( e ) { - slice = function( i ) { - var elem, - results = []; - while ( (elem = this[i++]) ) { - results.push( elem ); - } - return results; - }; -} - -/** - * For feature detection - * @param {Function} fn The function to test for native support - */ -function isNative( fn ) { - return rnative.test( fn + "" ); -} - -/** - * Create key-value caches of limited size - * @returns {Function(string, Object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var cache, - keys = []; - - return (cache = function( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key += " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key ] = value); - }); -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created div and expects a boolean result - */ -function assert( fn ) { - var div = document.createElement("div"); - - try { - return fn( div ); - } catch (e) { - return false; - } finally { - // release memory in IE - div = null; - } -} - -function Sizzle( selector, context, results, seed ) { - var match, elem, m, nodeType, - // QSA vars - i, groups, old, nid, newContext, newSelector; - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - - context = context || document; - results = results || []; - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } - - if ( !documentIsXML && !seed ) { - - // Shortcuts - if ( (match = rquickExpr.exec( selector )) ) { - // Speed-up: Sizzle("#ID") - if ( (m = match[1]) ) { - if ( nodeType === 9 ) { - elem = context.getElementById( m ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE, Opera, and Webkit return items - // by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - } else { - // Context is not a document - if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && - contains( context, elem ) && elem.id === m ) { - results.push( elem ); - return results; - } - } - - // Speed-up: Sizzle("TAG") - } else if ( match[2] ) { - push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) { - push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); - return results; - } - } - - // QSA path - if ( support.qsa && !rbuggyQSA.test(selector) ) { - old = true; - nid = expando; - newContext = context; - newSelector = nodeType === 9 && selector; - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - groups = tokenize( selector ); - - if ( (old = context.getAttribute("id")) ) { - nid = old.replace( rescape, "\\$&" ); - } else { - context.setAttribute( "id", nid ); - } - nid = "[id='" + nid + "'] "; - - i = groups.length; - while ( i-- ) { - groups[i] = nid + toSelector( groups[i] ); - } - newContext = rsibling.test( selector ) && context.parentNode || context; - newSelector = groups.join(","); - } - - if ( newSelector ) { - try { - push.apply( results, slice.call( newContext.querySelectorAll( - newSelector - ), 0 ) ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Detect xml - * @param {Element|Object} elem An element or a document - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var doc = node ? node.ownerDocument || node : preferredDoc; - - // If no document and documentElement is available, return - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Set our document - document = doc; - docElem = doc.documentElement; - - // Support tests - documentIsXML = isXML( doc ); - - // Check if getElementsByTagName("*") returns only elements - support.tagNameNoComments = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Check if attributes should be retrieved by attribute nodes - support.attributes = assert(function( div ) { - div.innerHTML = ""; - var type = typeof div.lastChild.getAttribute("multiple"); - // IE8 returns a string for some attributes even when not present - return type !== "boolean" && type !== "string"; - }); - - // Check if getElementsByClassName can be trusted - support.getByClassName = assert(function( div ) { - // Opera can't find a second classname (in 9.6) - div.innerHTML = ""; - if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { - return false; - } - - // Safari 3.2 caches class attributes and doesn't catch changes - div.lastChild.className = "e"; - return div.getElementsByClassName("e").length === 2; - }); - - // Check if getElementById returns elements by name - // Check if getElementsByName privileges form controls or returns elements by ID - support.getByName = assert(function( div ) { - // Inject content - div.id = expando + 0; - div.innerHTML = "
    "; - docElem.insertBefore( div, docElem.firstChild ); - - // Test - var pass = doc.getElementsByName && - // buggy browsers will return fewer than the correct 2 - doc.getElementsByName( expando ).length === 2 + - // buggy browsers will return more than the correct 0 - doc.getElementsByName( expando + 0 ).length; - support.getIdNotName = !doc.getElementById( expando ); - - // Cleanup - docElem.removeChild( div ); - - return pass; - }); - - // IE6/7 return modified attributes - Expr.attrHandle = assert(function( div ) { - div.innerHTML = ""; - return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && - div.firstChild.getAttribute("href") === "#"; - }) ? - {} : - { - "href": function( elem ) { - return elem.getAttribute( "href", 2 ); - }, - "type": function( elem ) { - return elem.getAttribute("type"); - } - }; - - // ID find and filter - if ( support.getIdNotName ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && !documentIsXML ) { - var m = context.getElementById( id ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }; - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - } else { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && !documentIsXML ) { - var m = context.getElementById( id ); - - return m ? - m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? - [m] : - undefined : - []; - } - }; - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // Tag - Expr.find["TAG"] = support.tagNameNoComments ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== strundefined ) { - return context.getElementsByTagName( tag ); - } - } : - function( tag, context ) { - var elem, - tmp = [], - i = 0, - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Name - Expr.find["NAME"] = support.getByName && function( tag, context ) { - if ( typeof context.getElementsByName !== strundefined ) { - return context.getElementsByName( name ); - } - }; - - // Class - Expr.find["CLASS"] = support.getByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) { - return context.getElementsByClassName( className ); - } - }; - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21), - // no need to also add to buggyMatches since matches checks buggyQSA - // A support test would require too much code (would include document ready) - rbuggyQSA = [ ":focus" ]; - - if ( (support.qsa = isNative(doc.querySelectorAll)) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( div ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explictly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - div.innerHTML = ""; - - // IE8 - Some boolean attributes are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - }); - - assert(function( div ) { - - // Opera 10-12/IE8 - ^= $= *= and empty values - // Should not select anything - div.innerHTML = ""; - if ( div.querySelectorAll("[i^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":enabled").length ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - div.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector || - docElem.mozMatchesSelector || - docElem.webkitMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( div ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( div, "div" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( div, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = new RegExp( rbuggyMatches.join("|") ); - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - // Document order sorting - sortOrder = docElem.compareDocumentPosition ? - function( a, b ) { - var compare; - - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) { - if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) { - if ( a === doc || contains( preferredDoc, a ) ) { - return -1; - } - if ( b === doc || contains( preferredDoc, b ) ) { - return 1; - } - return 0; - } - return compare & 4 ? -1 : 1; - } - - return a.compareDocumentPosition ? -1 : 1; - } : - function( a, b ) { - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - - // Parentless nodes are either documents or disconnected - } else if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - // Always assume the presence of duplicates if sort doesn't - // pass them to our comparison function (as in Google Chrome). - hasDuplicate = false; - [0, 0].sort( sortOrder ); - support.detectDuplicates = hasDuplicate; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - // rbuggyQSA always contains :focus, so no need for an existence check - if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) { - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch(e) {} - } - - return Sizzle( expr, document, null, [elem] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - var val; - - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - if ( !documentIsXML ) { - name = name.toLowerCase(); - } - if ( (val = Expr.attrHandle[ name ]) ) { - return val( elem ); - } - if ( documentIsXML || support.attributes ) { - return elem.getAttribute( name ); - } - return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ? - name : - val && val.specified ? val.value : null; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -// Document sorting and removing duplicates -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - i = 1, - j = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - results.sort( sortOrder ); - - if ( hasDuplicate ) { - for ( ; (elem = results[i]); i++ ) { - if ( elem === results[ i - 1 ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - return results; -}; - -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -// Returns a function to use in pseudos for input types -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -// Returns a function to use in pseudos for buttons -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -// Returns a function to use in pseudos for positionals -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - for ( ; (node = elem[i]); i++ ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (see #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[5] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[4] ) { - match[2] = match[4]; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeName ) { - if ( nodeName === "*" ) { - return function() { return true; }; - } - - nodeName = nodeName.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, outerCache, node, diff, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - // Seek `elem` from a previously-cached index - outerCache = parent[ expando ] || (parent[ expando ] = {}); - cache = outerCache[ type ] || []; - nodeIndex = cache[0] === dirruns && cache[1]; - diff = cache[0] === dirruns && cache[2]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - // Use previously-cached element index if available - } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { - diff = cache[1]; - - // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) - } else { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { - // Cache the index of each encountered element - if ( useCache ) { - (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf.call( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifider - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsXML ? - elem.getAttribute("xml:lang") || elem.getAttribute("lang") : - elem.lang) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": function( elem ) { - return elem.disabled === false; - }, - - "disabled": function( elem ) { - return elem.disabled === true; - }, - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), - // not comment, processing instructions, or others - // Thanks to Diego Perini for the nodeName shortcut - // Greater than "@" means alpha characters (specifically not starting with "#" or "?") - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) - // use getAttribute instead to test this case - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -function tokenize( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( tokens = [] ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push( { - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -} - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - checkNonElements = base && dir === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var data, cache, outerCache, - dirkey = dirruns + " " + doneName; - - // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { - if ( (data = cache[1]) === true || data === cachedruns ) { - return data === true; - } - } else { - cache = outerCache[ dir ] = [ dirkey ]; - cache[1] = matcher( elem, context, xml ) || cachedruns; - if ( cache[1] === true ) { - return true; - } - } - } - } - } - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - // A counter to specify which element is currently being matched - var matcherCachedRuns = 0, - bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, expandContext ) { - var elem, j, matcher, - setMatched = [], - matchedCount = 0, - i = "0", - unmatched = seed && [], - outermost = expandContext != null, - contextBackup = outermostContext, - // We must always have either seed elements or context - elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); - - if ( outermost ) { - outermostContext = context !== document && context; - cachedruns = matcherCachedRuns; - } - - // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below - for ( ; (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - cachedruns = ++matcherCachedRuns; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // Apply set filters to unmatched elements - matchedCount += i; - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !group ) { - group = tokenize( selector ); - } - i = group.length; - while ( i-- ) { - cached = matcherFromTokens( group[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - } - return cached; -}; - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function select( selector, context, results, seed ) { - var i, tokens, token, type, find, - match = tokenize( selector ); - - if ( !seed ) { - // Try to minimize operations if there is only one group - if ( match.length === 1 ) { - - // Take a shortcut and set the context if the root selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && !documentIsXML && - Expr.relative[ tokens[1].type ] ) { - - context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0]; - if ( !context ) { - return results; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && context.parentNode || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, slice.call( seed, 0 ) ); - return results; - } - - break; - } - } - } - } - } - - // Compile and execute a filtering function - // Provide `match` to avoid retokenization if we modified the selector above - compile( selector, match )( - seed, - context, - documentIsXML, - results, - rsibling.test( selector ) - ); - return results; -} - -// Deprecated -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Easy API for creating new setFilters -function setFilters() {} -Expr.filters = setFilters.prototype = Expr.pseudos; -Expr.setFilters = new setFilters(); - -// Initialize with the default document -setDocument(); - -// Override sizzle attribute retrieval -Sizzle.attr = jQuery.attr; -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - -})( window ); -var runtil = /Until$/, - rparentsprev = /^(?:parents|prev(?:Until|All))/, - isSimple = /^.[^:#\[\.,]*$/, - rneedsContext = jQuery.expr.match.needsContext, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend({ - find: function( selector ) { - var i, ret, self, - len = this.length; - - if ( typeof selector !== "string" ) { - self = this; - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - ret = []; - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, this[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = ( this.selector ? this.selector + " " : "" ) + selector; - return ret; - }, - - has: function( target ) { - var i, - targets = jQuery( target, this ), - len = targets.length; - - return this.filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector, false) ); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true) ); - }, - - is: function( selector ) { - return !!selector && ( - typeof selector === "string" ? - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - rneedsContext.test( selector ) ? - jQuery( selector, this.context ).index( this[0] ) >= 0 : - jQuery.filter( selector, this ).length > 0 : - this.filter( selector ).length > 0 ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - ret = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - cur = this[i]; - - while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { - if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { - ret.push( cur ); - break; - } - cur = cur.parentNode; - } - } - - return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return jQuery.inArray( this[0], jQuery( elem ) ); - } - - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context ) : - jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( jQuery.unique(all) ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -jQuery.fn.andSelf = jQuery.fn.addBack; - -function sibling( cur, dir ) { - do { - cur = cur[ dir ]; - } while ( cur && cur.nodeType !== 1 ); - - return cur; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( name ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; - - if ( this.length > 1 && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 ? - jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : - jQuery.find.matches(expr, elems); - }, - - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; - - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, keep ) { - - // Can't pass null or undefined to indexOf in Firefox 4 - // Set to 0 to skip string check - qualifier = qualifier || 0; - - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem ) { - return ( elem === qualifier ) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem ) { - return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; - }); -} -function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); - - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; -} - -var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + - "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", - rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, - rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rtbody = /
    ", "
    " ], - tr: [ 2, "", "
    " ], - col: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, - // unless wrapped in a div with non-breaking characters in front of it. - _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
    ", "
    " ] - }, - safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement("div") ); - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -jQuery.fn.extend({ - text: function( value ) { - return jQuery.access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); - }, null, value, arguments.length ); - }, - - wrapAll: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapAll( html.call(this, i) ); - }); - } - - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); - - if ( this[0].parentNode ) { - wrap.insertBefore( this[0] ); - } - - wrap.map(function() { - var elem = this; - - while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { - elem = elem.firstChild; - } - - return elem; - }).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapInner( html.call(this, i) ); - }); - } - - return this.each(function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - }); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each(function(i) { - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); - }); - }, - - unwrap: function() { - return this.parent().each(function() { - if ( !jQuery.nodeName( this, "body" ) ) { - jQuery( this ).replaceWith( this.childNodes ); - } - }).end(); - }, - - append: function() { - return this.domManip(arguments, true, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip(arguments, true, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.insertBefore( elem, this.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, false, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, false, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - // keepData is for internal use only--do not document - remove: function( selector, keepData ) { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) { - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - } - - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - - // If this is a select, ensure that it displays empty (#12336) - // Support: IE<9 - if ( elem.options && jQuery.nodeName( elem, "select" ) ) { - elem.options.length = 0; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function () { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return jQuery.access( this, function( value ) { - var elem = this[0] || {}, - i = 0, - l = this.length; - - if ( value === undefined ) { - return elem.nodeType === 1 ? - elem.innerHTML.replace( rinlinejQuery, "" ) : - undefined; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1>" ); - - try { - for (; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - elem = this[i] || {}; - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch(e) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function( value ) { - var isFunc = jQuery.isFunction( value ); - - // Make sure that the elements are removed from the DOM before they are inserted - // this can help fix replacing a parent with child elements - if ( !isFunc && typeof value !== "string" ) { - value = jQuery( value ).not( this ).detach(); - } - - return this.domManip( [ value ], true, function( elem ) { - var next = this.nextSibling, - parent = this.parentNode; - - if ( parent ) { - jQuery( this ).remove(); - parent.insertBefore( elem, next ); - } - }); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, table, callback ) { - - // Flatten any nested arrays - args = core_concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[0], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[0] = value.call( this, index, table ? self.html() : undefined ); - } - self.domManip( args, table, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - table = table && jQuery.nodeName( first, "tr" ); - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( - table && jQuery.nodeName( this[i], "table" ) ? - findOrAppend( this[i], "tbody" ) : - this[i], - node, - i - ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Hope ajax is available... - jQuery.ajax({ - url: node.src, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); - } else { - jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); - } - } - } - } - - // Fix #11809: Avoid leaking memory - fragment = first = null; - } - } - - return this; - } -}); - -function findOrAppend( elem, tag ) { - return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - var attr = elem.getAttributeNode("type"); - elem.type = ( attr && attr.specified ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - if ( match ) { - elem.type = match[1]; - } else { - elem.removeAttribute("type"); - } - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var elem, - i = 0; - for ( ; (elem = elems[i]) != null; i++ ) { - jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); - } -} - -function cloneCopyEvent( src, dest ) { - - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { - return; - } - - var type, i, l, - oldData = jQuery._data( src ), - curData = jQuery._data( dest, oldData ), - events = oldData.events; - - if ( events ) { - delete curData.handle; - curData.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - - // make the cloned public data object a copy from the original - if ( curData.data ) { - curData.data = jQuery.extend( {}, curData.data ); - } -} - -function fixCloneNodeIssues( src, dest ) { - var nodeName, e, data; - - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; - } - - nodeName = dest.nodeName.toLowerCase(); - - // IE6-8 copies events bound via attachEvent when using cloneNode. - if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { - data = jQuery._data( dest ); - - for ( e in data.events ) { - jQuery.removeEvent( dest, e, data.handle ); - } - - // Event data gets referenced instead of copied if the expando gets copied too - dest.removeAttribute( jQuery.expando ); - } - - // IE blanks contents when cloning scripts, and tries to evaluate newly-set text - if ( nodeName === "script" && dest.text !== src.text ) { - disableScript( dest ).text = src.text; - restoreScript( dest ); - - // IE6-10 improperly clones children of object elements using classid. - // IE10 throws NoModificationAllowedError if parent is null, #12132. - } else if ( nodeName === "object" ) { - if ( dest.parentNode ) { - dest.outerHTML = src.outerHTML; - } - - // This path appears unavoidable for IE9. When cloning an object - // element in IE9, the outerHTML strategy above is not sufficient. - // If the src has innerHTML and the destination does not, - // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { - dest.innerHTML = src.innerHTML; - } - - } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set - - dest.defaultChecked = dest.checked = src.checked; - - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } - - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.defaultSelected = dest.selected = src.defaultSelected; - - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - i = 0, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone(true); - jQuery( insert[i] )[ original ]( elems ); - - // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() - core_push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - -function getAll( context, tag ) { - var elems, elem, - i = 0, - found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : - undefined; - - if ( !found ) { - for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { - if ( !tag || jQuery.nodeName( elem, tag ) ) { - found.push( elem ); - } else { - jQuery.merge( found, getAll( elem, tag ) ); - } - } - } - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], found ) : - found; -} - -// Used in buildFragment, fixes the defaultChecked property -function fixDefaultChecked( elem ) { - if ( manipulation_rcheckableType.test( elem.type ) ) { - elem.defaultChecked = elem.checked; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var destElements, node, clone, i, srcElements, - inPage = jQuery.contains( elem.ownerDocument, elem ); - - if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { - clone = elem.cloneNode( true ); - - // IE<=8 does not properly clone detached, unknown element nodes - } else { - fragmentDiv.innerHTML = elem.outerHTML; - fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); - } - - if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - // Fix all IE cloning issues - for ( i = 0; (node = srcElements[i]) != null; ++i ) { - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - fixCloneNodeIssues( node, destElements[i] ); - } - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0; (node = srcElements[i]) != null; i++ ) { - cloneCopyEvent( node, destElements[i] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - destElements = srcElements = node = null; - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var j, elem, contains, - tmp, tag, tbody, wrap, - l = elems.length, - - // Ensure a safe fragment - safe = createSafeFragment( context ), - - nodes = [], - i = 0; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || safe.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - - tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; - - // Descend through wrappers to the right content - j = wrap[0]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Manually add leading whitespace removed by IE - if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); - } - - // Remove IE's autoinserted
    , *may* have spurious - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare or - wrap[1] === "
    " && !rtbody.test( elem ) ? - tmp : - 0; - - j = elem && elem.childNodes.length; - while ( j-- ) { - if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { - elem.removeChild( tbody ); - } - } - } - - jQuery.merge( nodes, tmp.childNodes ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !jQuery.support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; - }, - - cleanData: function( elems, /* internal */ acceptData ) { - var elem, type, id, data, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - deleteExpando = jQuery.support.deleteExpando, - special = jQuery.event.special; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( acceptData || jQuery.acceptData( elem ) ) { - - id = elem[ internalKey ]; - data = id && cache[ id ]; - - if ( data ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { - - delete cache[ id ]; - - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; - - } else if ( typeof elem.removeAttribute !== core_strundefined ) { - elem.removeAttribute( internalKey ); - - } else { - elem[ internalKey ] = null; - } - - core_deletedIds.push( id ); - } - } - } - } - } -}); -var iframe, getStyles, curCSS, - ralpha = /alpha\([^)]*\)/i, - ropacity = /opacity\s*=\s*([^)]*)/, - rposition = /^(top|right|bottom|left)$/, - // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" - // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rmargin = /^margin/, - rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), - rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), - elemdisplay = { BODY: "block" }, - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: 0, - fontWeight: 400 - }, - - cssExpand = [ "Top", "Right", "Bottom", "Left" ], - cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; - -// return a css property mapped to a potentially vendor prefixed property -function vendorPropName( style, name ) { - - // shortcut for names that are not vendor prefixed - if ( name in style ) { - return name; - } - - // check for vendor prefixed names - var capName = name.charAt(0).toUpperCase() + name.slice(1), - origName = name, - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in style ) { - return name; - } - } - - return origName; -} - -function isHidden( elem, el ) { - // isHidden might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); -} - -function showHide( elements, show ) { - var display, elem, hidden, - values = [], - index = 0, - length = elements.length; - - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - values[ index ] = jQuery._data( elem, "olddisplay" ); - display = elem.style.display; - if ( show ) { - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !values[ index ] && display === "none" ) { - elem.style.display = ""; - } - - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( elem.style.display === "" && isHidden( elem ) ) { - values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); - } - } else { - - if ( !values[ index ] ) { - hidden = isHidden( elem ); - - if ( display && display !== "none" || !hidden ) { - jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); - } - } - } - } - - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( index = 0; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - if ( !show || elem.style.display === "none" || elem.style.display === "" ) { - elem.style.display = show ? values[ index ] || "" : "none"; - } - } - - return elements; -} - -jQuery.fn.extend({ - css: function( name, value ) { - return jQuery.access( this, function( elem, name, value ) { - var len, styles, - map = {}, - i = 0; - - if ( jQuery.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - }, - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - var bool = typeof state === "boolean"; - - return this.each(function() { - if ( bool ? state : isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - -jQuery.extend({ - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Exclude the following css properties to add px - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - // normalize float css property - "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; - - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } - - // Make sure that NaN and null values aren't set. See: #7116 - if ( value == null || type === "number" && isNaN( value ) ) { - return; - } - - // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, - // but it would mean to define eight (for every problematic property) identical functions - if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - - // Wrapped to prevent IE from throwing errors when 'invalid' values are provided - // Fixes bug #5509 - try { - style[ name ] = value; - } catch(e) {} - } - - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var num, val, hooks, - origName = jQuery.camelCase( name ); - - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - //convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Return, converting to number if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; - } - return val; - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; - } -}); - -// NOTE: we've included the "window" in window.getComputedStyle -// because jsdom on node.js will break without it. -if ( window.getComputedStyle ) { - getStyles = function( elem ) { - return window.getComputedStyle( elem, null ); - }; - - curCSS = function( elem, name, _computed ) { - var width, minWidth, maxWidth, - computed = _computed || getStyles( elem ), - - // getPropertyValue is only needed for .css('filter') in IE9, see #12537 - ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, - style = elem.style; - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right - // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret; - }; -} else if ( document.documentElement.currentStyle ) { - getStyles = function( elem ) { - return elem.currentStyle; - }; - - curCSS = function( elem, name, _computed ) { - var left, rs, rsLeft, - computed = _computed || getStyles( elem ), - ret = computed ? computed[ name ] : undefined, - style = elem.style; - - // Avoid setting ret to empty string here - // so we don't default to auto - if ( ret == null && style && style[ name ] ) { - ret = style[ name ]; - } - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - // but not position css attributes, as those are proportional to the parent element instead - // and we can't measure the parent instead because it might trigger a "stacking dolls" problem - if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { - - // Remember the original values - left = style.left; - rs = elem.runtimeStyle; - rsLeft = rs && rs.left; - - // Put in the new values to get a computed value out - if ( rsLeft ) { - rs.left = elem.currentStyle.left; - } - style.left = name === "fontSize" ? "1em" : ret; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - if ( rsLeft ) { - rs.left = rsLeft; - } - } - - return ret === "" ? "auto" : ret; - }; -} - -function setPositiveNumber( elem, value, subtract ) { - var matches = rnumsplit.exec( value ); - return matches ? - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i = extra === ( isBorderBox ? "border" : "content" ) ? - // If we already have the right measurement, avoid augmentation - 4 : - // Otherwise initialize for horizontal or vertical properties - name === "width" ? 1 : 0, - - val = 0; - - for ( ; i < 4; i += 2 ) { - // both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // at this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - // at this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // at this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with offset property, which is equivalent to the border-box value - var valueIsBorderBox = true, - val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - styles = getStyles( elem ), - isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { - return val; - } - - // we need the check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } - - // use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -// Try to determine the default display value of an element -function css_defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - // Use the already-created iframe if possible - iframe = ( iframe || - jQuery("' - ).bind('load', function () { - var fileInputClones, - paramNames = $.isArray(options.paramName) ? - options.paramName : [options.paramName]; - iframe - .unbind('load') - .bind('load', function () { - var response; - // Wrap in a try/catch block to catch exceptions thrown - // when trying to access cross-domain iframe contents: - try { - response = iframe.contents(); - // Google Chrome and Firefox do not throw an - // exception when calling iframe.contents() on - // cross-domain requests, so we unify the response: - if (!response.length || !response[0].firstChild) { - throw new Error(); - } - } catch (e) { - response = undefined; - } - // The complete callback returns the - // iframe content document as response object: - completeCallback( - 200, - 'success', - {'iframe': response} - ); - // Fix for IE endless progress bar activity bug - // (happens on form submits to iframe targets): - $('') - .appendTo(form); - window.setTimeout(function () { - // Removing the form in a setTimeout call - // allows Chrome's developer tools to display - // the response result - form.remove(); - }, 0); - }); - form - .prop('target', iframe.prop('name')) - .prop('action', options.url) - .prop('method', options.type); - if (options.formData) { - $.each(options.formData, function (index, field) { - $('') - .prop('name', field.name) - .val(field.value) - .appendTo(form); - }); - } - if (options.fileInput && options.fileInput.length && - options.type === 'POST') { - fileInputClones = options.fileInput.clone(); - // Insert a clone for each file input field: - options.fileInput.after(function (index) { - return fileInputClones[index]; - }); - if (options.paramName) { - options.fileInput.each(function (index) { - $(this).prop( - 'name', - paramNames[index] || options.paramName - ); - }); - } - // Appending the file input fields to the hidden form - // removes them from their original location: - form - .append(options.fileInput) - .prop('enctype', 'multipart/form-data') - // enctype must be set as encoding for IE: - .prop('encoding', 'multipart/form-data'); - // Remove the HTML5 form attribute from the input(s): - options.fileInput.removeAttr('form'); - } - form.submit(); - // Insert the file input fields at their original location - // by replacing the clones with the originals: - if (fileInputClones && fileInputClones.length) { - options.fileInput.each(function (index, input) { - var clone = $(fileInputClones[index]); - // Restore the original name and form properties: - $(input) - .prop('name', clone.prop('name')) - .attr('form', clone.attr('form')); - clone.replaceWith(input); - }); - } - }); - form.append(iframe).appendTo(document.body); - }, - abort: function () { - if (iframe) { - // javascript:false as iframe src aborts the request - // and prevents warning popups on HTTPS in IE6. - // concat is used to avoid the "Script URL" JSLint error: - iframe - .unbind('load') - .prop('src', initialIframeSrc); - } - if (form) { - form.remove(); - } - } - }; - } - }); - - // The iframe transport returns the iframe content document as response. - // The following adds converters from iframe to text, json, html, xml - // and script. - // Please note that the Content-Type for JSON responses has to be text/plain - // or text/html, if the browser doesn't include application/json in the - // Accept header, else IE will show a download dialog. - // The Content-Type for XML responses on the other hand has to be always - // application/xml or text/xml, so IE properly parses the XML response. - // See also - // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation - $.ajaxSetup({ - converters: { - 'iframe text': function (iframe) { - return iframe && $(iframe[0].body).text(); - }, - 'iframe json': function (iframe) { - return iframe && $.parseJSON($(iframe[0].body).text()); - }, - 'iframe html': function (iframe) { - return iframe && $(iframe[0].body).html(); - }, - 'iframe xml': function (iframe) { - var xmlDoc = iframe && iframe[0]; - return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc : - $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) || - $(xmlDoc.body).html()); - }, - 'iframe script': function (iframe) { - return iframe && $.globalEval($(iframe[0].body).text()); - } - } - }); - -})); - -/* - * jQuery File Upload Plugin - * https://github.com/blueimp/jQuery-File-Upload - * - * Copyright 2010, Sebastian Tschan - * https://blueimp.net - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/MIT - */ - -/* jshint nomen:false */ -/* global define, require, window, document, location, Blob, FormData */ - -;(function (factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - // Register as an anonymous AMD module: - define([ - 'jquery', - 'jquery.ui.widget' - ], factory); - } else if (typeof exports === 'object') { - // Node/CommonJS: - factory( - require('jquery'), - require('./vendor/jquery.ui.widget') - ); - } else { - // Browser globals: - factory(window.jQuery); - } -}(function ($) { - 'use strict'; - - // Detect file input support, based on - // http://viljamis.com/blog/2012/file-upload-support-on-mobile/ - $.support.fileInput = !(new RegExp( - // Handle devices which give false positives for the feature detection: - '(Android (1\\.[0156]|2\\.[01]))' + - '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' + - '|(w(eb)?OSBrowser)|(webOS)' + - '|(Kindle/(1\\.0|2\\.[05]|3\\.0))' - ).test(window.navigator.userAgent) || - // Feature detection for all other devices: - $('').prop('disabled')); - - // The FileReader API is not actually used, but works as feature detection, - // as some Safari versions (5?) support XHR file uploads via the FormData API, - // but not non-multipart XHR file uploads. - // window.XMLHttpRequestUpload is not available on IE10, so we check for - // window.ProgressEvent instead to detect XHR2 file upload capability: - $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader); - $.support.xhrFormDataFileUpload = !!window.FormData; - - // Detect support for Blob slicing (required for chunked uploads): - $.support.blobSlice = window.Blob && (Blob.prototype.slice || - Blob.prototype.webkitSlice || Blob.prototype.mozSlice); - - // Helper function to create drag handlers for dragover/dragenter/dragleave: - function getDragHandler(type) { - var isDragOver = type === 'dragover'; - return function (e) { - e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; - var dataTransfer = e.dataTransfer; - if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 && - this._trigger( - type, - $.Event(type, {delegatedEvent: e}) - ) !== false) { - e.preventDefault(); - if (isDragOver) { - dataTransfer.dropEffect = 'copy'; - } - } - }; - } - - // The fileupload widget listens for change events on file input fields defined - // via fileInput setting and paste or drop events of the given dropZone. - // In addition to the default jQuery Widget methods, the fileupload widget - // exposes the "add" and "send" methods, to add or directly send files using - // the fileupload API. - // By default, files added via file input selection, paste, drag & drop or - // "add" method are uploaded immediately, but it is possible to override - // the "add" callback option to queue file uploads. - $.widget('blueimp.fileupload', { - - options: { - // The drop target element(s), by the default the complete document. - // Set to null to disable drag & drop support: - dropZone: $(document), - // The paste target element(s), by the default undefined. - // Set to a DOM node or jQuery object to enable file pasting: - pasteZone: undefined, - // The file input field(s), that are listened to for change events. - // If undefined, it is set to the file input fields inside - // of the widget element on plugin initialization. - // Set to null to disable the change listener. - fileInput: undefined, - // By default, the file input field is replaced with a clone after - // each input field change event. This is required for iframe transport - // queues and allows change events to be fired for the same file - // selection, but can be disabled by setting the following option to false: - replaceFileInput: true, - // The parameter name for the file form data (the request argument name). - // If undefined or empty, the name property of the file input field is - // used, or "files[]" if the file input name property is also empty, - // can be a string or an array of strings: - paramName: undefined, - // By default, each file of a selection is uploaded using an individual - // request for XHR type uploads. Set to false to upload file - // selections in one request each: - singleFileUploads: true, - // To limit the number of files uploaded with one XHR request, - // set the following option to an integer greater than 0: - limitMultiFileUploads: undefined, - // The following option limits the number of files uploaded with one - // XHR request to keep the request size under or equal to the defined - // limit in bytes: - limitMultiFileUploadSize: undefined, - // Multipart file uploads add a number of bytes to each uploaded file, - // therefore the following option adds an overhead for each file used - // in the limitMultiFileUploadSize configuration: - limitMultiFileUploadSizeOverhead: 512, - // Set the following option to true to issue all file upload requests - // in a sequential order: - sequentialUploads: false, - // To limit the number of concurrent uploads, - // set the following option to an integer greater than 0: - limitConcurrentUploads: undefined, - // Set the following option to true to force iframe transport uploads: - forceIframeTransport: false, - // Set the following option to the location of a redirect url on the - // origin server, for cross-domain iframe transport uploads: - redirect: undefined, - // The parameter name for the redirect url, sent as part of the form - // data and set to 'redirect' if this option is empty: - redirectParamName: undefined, - // Set the following option to the location of a postMessage window, - // to enable postMessage transport uploads: - postMessage: undefined, - // By default, XHR file uploads are sent as multipart/form-data. - // The iframe transport is always using multipart/form-data. - // Set to false to enable non-multipart XHR uploads: - multipart: true, - // To upload large files in smaller chunks, set the following option - // to a preferred maximum chunk size. If set to 0, null or undefined, - // or the browser does not support the required Blob API, files will - // be uploaded as a whole. - maxChunkSize: undefined, - // When a non-multipart upload or a chunked multipart upload has been - // aborted, this option can be used to resume the upload by setting - // it to the size of the already uploaded bytes. This option is most - // useful when modifying the options object inside of the "add" or - // "send" callbacks, as the options are cloned for each file upload. - uploadedBytes: undefined, - // By default, failed (abort or error) file uploads are removed from the - // global progress calculation. Set the following option to false to - // prevent recalculating the global progress data: - recalculateProgress: true, - // Interval in milliseconds to calculate and trigger progress events: - progressInterval: 100, - // Interval in milliseconds to calculate progress bitrate: - bitrateInterval: 500, - // By default, uploads are started automatically when adding files: - autoUpload: true, - - // Error and info messages: - messages: { - uploadedBytes: 'Uploaded bytes exceed file size' - }, - - // Translation function, gets the message key to be translated - // and an object with context specific data as arguments: - i18n: function (message, context) { - message = this.messages[message] || message.toString(); - if (context) { - $.each(context, function (key, value) { - message = message.replace('{' + key + '}', value); - }); - } - return message; - }, - - // Additional form data to be sent along with the file uploads can be set - // using this option, which accepts an array of objects with name and - // value properties, a function returning such an array, a FormData - // object (for XHR file uploads), or a simple object. - // The form of the first fileInput is given as parameter to the function: - formData: function (form) { - return form.serializeArray(); - }, - - // The add callback is invoked as soon as files are added to the fileupload - // widget (via file input selection, drag & drop, paste or add API call). - // If the singleFileUploads option is enabled, this callback will be - // called once for each file in the selection for XHR file uploads, else - // once for each file selection. - // - // The upload starts when the submit method is invoked on the data parameter. - // The data object contains a files property holding the added files - // and allows you to override plugin options as well as define ajax settings. - // - // Listeners for this callback can also be bound the following way: - // .bind('fileuploadadd', func); - // - // data.submit() returns a Promise object and allows to attach additional - // handlers using jQuery's Deferred callbacks: - // data.submit().done(func).fail(func).always(func); - add: function (e, data) { - if (e.isDefaultPrevented()) { - return false; - } - if (data.autoUpload || (data.autoUpload !== false && - $(this).fileupload('option', 'autoUpload'))) { - data.process().done(function () { - data.submit(); - }); - } - }, - - // Other callbacks: - - // Callback for the submit event of each file upload: - // submit: function (e, data) {}, // .bind('fileuploadsubmit', func); - - // Callback for the start of each file upload request: - // send: function (e, data) {}, // .bind('fileuploadsend', func); - - // Callback for successful uploads: - // done: function (e, data) {}, // .bind('fileuploaddone', func); - - // Callback for failed (abort or error) uploads: - // fail: function (e, data) {}, // .bind('fileuploadfail', func); - - // Callback for completed (success, abort or error) requests: - // always: function (e, data) {}, // .bind('fileuploadalways', func); - - // Callback for upload progress events: - // progress: function (e, data) {}, // .bind('fileuploadprogress', func); - - // Callback for global upload progress events: - // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func); - - // Callback for uploads start, equivalent to the global ajaxStart event: - // start: function (e) {}, // .bind('fileuploadstart', func); - - // Callback for uploads stop, equivalent to the global ajaxStop event: - // stop: function (e) {}, // .bind('fileuploadstop', func); - - // Callback for change events of the fileInput(s): - // change: function (e, data) {}, // .bind('fileuploadchange', func); - - // Callback for paste events to the pasteZone(s): - // paste: function (e, data) {}, // .bind('fileuploadpaste', func); - - // Callback for drop events of the dropZone(s): - // drop: function (e, data) {}, // .bind('fileuploaddrop', func); - - // Callback for dragover events of the dropZone(s): - // dragover: function (e) {}, // .bind('fileuploaddragover', func); - - // Callback for the start of each chunk upload request: - // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func); - - // Callback for successful chunk uploads: - // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func); - - // Callback for failed (abort or error) chunk uploads: - // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func); - - // Callback for completed (success, abort or error) chunk upload requests: - // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func); - - // The plugin options are used as settings object for the ajax calls. - // The following are jQuery ajax settings required for the file uploads: - processData: false, - contentType: false, - cache: false, - timeout: 0 - }, - - // A list of options that require reinitializing event listeners and/or - // special initialization code: - _specialOptions: [ - 'fileInput', - 'dropZone', - 'pasteZone', - 'multipart', - 'forceIframeTransport' - ], - - _blobSlice: $.support.blobSlice && function () { - var slice = this.slice || this.webkitSlice || this.mozSlice; - return slice.apply(this, arguments); - }, - - _BitrateTimer: function () { - this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime()); - this.loaded = 0; - this.bitrate = 0; - this.getBitrate = function (now, loaded, interval) { - var timeDiff = now - this.timestamp; - if (!this.bitrate || !interval || timeDiff > interval) { - this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8; - this.loaded = loaded; - this.timestamp = now; - } - return this.bitrate; - }; - }, - - _isXHRUpload: function (options) { - return !options.forceIframeTransport && - ((!options.multipart && $.support.xhrFileUpload) || - $.support.xhrFormDataFileUpload); - }, - - _getFormData: function (options) { - var formData; - if ($.type(options.formData) === 'function') { - return options.formData(options.form); - } - if ($.isArray(options.formData)) { - return options.formData; - } - if ($.type(options.formData) === 'object') { - formData = []; - $.each(options.formData, function (name, value) { - formData.push({name: name, value: value}); - }); - return formData; - } - return []; - }, - - _getTotal: function (files) { - var total = 0; - $.each(files, function (index, file) { - total += file.size || 1; - }); - return total; - }, - - _initProgressObject: function (obj) { - var progress = { - loaded: 0, - total: 0, - bitrate: 0 - }; - if (obj._progress) { - $.extend(obj._progress, progress); - } else { - obj._progress = progress; - } - }, - - _initResponseObject: function (obj) { - var prop; - if (obj._response) { - for (prop in obj._response) { - if (obj._response.hasOwnProperty(prop)) { - delete obj._response[prop]; - } - } - } else { - obj._response = {}; - } - }, - - _onProgress: function (e, data) { - if (e.lengthComputable) { - var now = ((Date.now) ? Date.now() : (new Date()).getTime()), - loaded; - if (data._time && data.progressInterval && - (now - data._time < data.progressInterval) && - e.loaded !== e.total) { - return; - } - data._time = now; - loaded = Math.floor( - e.loaded / e.total * (data.chunkSize || data._progress.total) - ) + (data.uploadedBytes || 0); - // Add the difference from the previously loaded state - // to the global loaded counter: - this._progress.loaded += (loaded - data._progress.loaded); - this._progress.bitrate = this._bitrateTimer.getBitrate( - now, - this._progress.loaded, - data.bitrateInterval - ); - data._progress.loaded = data.loaded = loaded; - data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate( - now, - loaded, - data.bitrateInterval - ); - // Trigger a custom progress event with a total data property set - // to the file size(s) of the current upload and a loaded data - // property calculated accordingly: - this._trigger( - 'progress', - $.Event('progress', {delegatedEvent: e}), - data - ); - // Trigger a global progress event for all current file uploads, - // including ajax calls queued for sequential file uploads: - this._trigger( - 'progressall', - $.Event('progressall', {delegatedEvent: e}), - this._progress - ); - } - }, - - _initProgressListener: function (options) { - var that = this, - xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr(); - // Accesss to the native XHR object is required to add event listeners - // for the upload progress event: - if (xhr.upload) { - $(xhr.upload).bind('progress', function (e) { - var oe = e.originalEvent; - // Make sure the progress event properties get copied over: - e.lengthComputable = oe.lengthComputable; - e.loaded = oe.loaded; - e.total = oe.total; - that._onProgress(e, options); - }); - options.xhr = function () { - return xhr; - }; - } - }, - - _isInstanceOf: function (type, obj) { - // Cross-frame instanceof check - return Object.prototype.toString.call(obj) === '[object ' + type + ']'; - }, - - _initXHRData: function (options) { - var that = this, - formData, - file = options.files[0], - // Ignore non-multipart setting if not supported: - multipart = options.multipart || !$.support.xhrFileUpload, - paramName = $.type(options.paramName) === 'array' ? - options.paramName[0] : options.paramName; - options.headers = $.extend({}, options.headers); - if (options.contentRange) { - options.headers['Content-Range'] = options.contentRange; - } - if (!multipart || options.blob || !this._isInstanceOf('File', file)) { - options.headers['Content-Disposition'] = 'attachment; filename="' + - encodeURI(file.name) + '"'; - } - if (!multipart) { - options.contentType = file.type || 'application/octet-stream'; - options.data = options.blob || file; - } else if ($.support.xhrFormDataFileUpload) { - if (options.postMessage) { - // window.postMessage does not allow sending FormData - // objects, so we just add the File/Blob objects to - // the formData array and let the postMessage window - // create the FormData object out of this array: - formData = this._getFormData(options); - if (options.blob) { - formData.push({ - name: paramName, - value: options.blob - }); - } else { - $.each(options.files, function (index, file) { - formData.push({ - name: ($.type(options.paramName) === 'array' && - options.paramName[index]) || paramName, - value: file - }); - }); - } - } else { - if (that._isInstanceOf('FormData', options.formData)) { - formData = options.formData; - } else { - formData = new FormData(); - $.each(this._getFormData(options), function (index, field) { - formData.append(field.name, field.value); - }); - } - if (options.blob) { - formData.append(paramName, options.blob, file.name); - } else { - $.each(options.files, function (index, file) { - // This check allows the tests to run with - // dummy objects: - if (that._isInstanceOf('File', file) || - that._isInstanceOf('Blob', file)) { - formData.append( - ($.type(options.paramName) === 'array' && - options.paramName[index]) || paramName, - file, - file.uploadName || file.name - ); - } - }); - } - } - options.data = formData; - } - // Blob reference is not needed anymore, free memory: - options.blob = null; - }, - - _initIframeSettings: function (options) { - var targetHost = $('').prop('href', options.url).prop('host'); - // Setting the dataType to iframe enables the iframe transport: - options.dataType = 'iframe ' + (options.dataType || ''); - // The iframe transport accepts a serialized array as form data: - options.formData = this._getFormData(options); - // Add redirect url to form data on cross-domain uploads: - if (options.redirect && targetHost && targetHost !== location.host) { - options.formData.push({ - name: options.redirectParamName || 'redirect', - value: options.redirect - }); - } - }, - - _initDataSettings: function (options) { - if (this._isXHRUpload(options)) { - if (!this._chunkedUpload(options, true)) { - if (!options.data) { - this._initXHRData(options); - } - this._initProgressListener(options); - } - if (options.postMessage) { - // Setting the dataType to postmessage enables the - // postMessage transport: - options.dataType = 'postmessage ' + (options.dataType || ''); - } - } else { - this._initIframeSettings(options); - } - }, - - _getParamName: function (options) { - var fileInput = $(options.fileInput), - paramName = options.paramName; - if (!paramName) { - paramName = []; - fileInput.each(function () { - var input = $(this), - name = input.prop('name') || 'files[]', - i = (input.prop('files') || [1]).length; - while (i) { - paramName.push(name); - i -= 1; - } - }); - if (!paramName.length) { - paramName = [fileInput.prop('name') || 'files[]']; - } - } else if (!$.isArray(paramName)) { - paramName = [paramName]; - } - return paramName; - }, - - _initFormSettings: function (options) { - // Retrieve missing options from the input field and the - // associated form, if available: - if (!options.form || !options.form.length) { - options.form = $(options.fileInput.prop('form')); - // If the given file input doesn't have an associated form, - // use the default widget file input's form: - if (!options.form.length) { - options.form = $(this.options.fileInput.prop('form')); - } - } - options.paramName = this._getParamName(options); - if (!options.url) { - options.url = options.form.prop('action') || location.href; - } - // The HTTP request method must be "POST" or "PUT": - options.type = (options.type || - ($.type(options.form.prop('method')) === 'string' && - options.form.prop('method')) || '' - ).toUpperCase(); - if (options.type !== 'POST' && options.type !== 'PUT' && - options.type !== 'PATCH') { - options.type = 'POST'; - } - if (!options.formAcceptCharset) { - options.formAcceptCharset = options.form.attr('accept-charset'); - } - }, - - _getAJAXSettings: function (data) { - var options = $.extend({}, this.options, data); - this._initFormSettings(options); - this._initDataSettings(options); - return options; - }, - - // jQuery 1.6 doesn't provide .state(), - // while jQuery 1.8+ removed .isRejected() and .isResolved(): - _getDeferredState: function (deferred) { - if (deferred.state) { - return deferred.state(); - } - if (deferred.isResolved()) { - return 'resolved'; - } - if (deferred.isRejected()) { - return 'rejected'; - } - return 'pending'; - }, - - // Maps jqXHR callbacks to the equivalent - // methods of the given Promise object: - _enhancePromise: function (promise) { - promise.success = promise.done; - promise.error = promise.fail; - promise.complete = promise.always; - return promise; - }, - - // Creates and returns a Promise object enhanced with - // the jqXHR methods abort, success, error and complete: - _getXHRPromise: function (resolveOrReject, context, args) { - var dfd = $.Deferred(), - promise = dfd.promise(); - context = context || this.options.context || promise; - if (resolveOrReject === true) { - dfd.resolveWith(context, args); - } else if (resolveOrReject === false) { - dfd.rejectWith(context, args); - } - promise.abort = dfd.promise; - return this._enhancePromise(promise); - }, - - // Adds convenience methods to the data callback argument: - _addConvenienceMethods: function (e, data) { - var that = this, - getPromise = function (args) { - return $.Deferred().resolveWith(that, args).promise(); - }; - data.process = function (resolveFunc, rejectFunc) { - if (resolveFunc || rejectFunc) { - data._processQueue = this._processQueue = - (this._processQueue || getPromise([this])).then( - function () { - if (data.errorThrown) { - return $.Deferred() - .rejectWith(that, [data]).promise(); - } - return getPromise(arguments); - } - ).then(resolveFunc, rejectFunc); - } - return this._processQueue || getPromise([this]); - }; - data.submit = function () { - if (this.state() !== 'pending') { - data.jqXHR = this.jqXHR = - (that._trigger( - 'submit', - $.Event('submit', {delegatedEvent: e}), - this - ) !== false) && that._onSend(e, this); - } - return this.jqXHR || that._getXHRPromise(); - }; - data.abort = function () { - if (this.jqXHR) { - return this.jqXHR.abort(); - } - this.errorThrown = 'abort'; - that._trigger('fail', null, this); - return that._getXHRPromise(false); - }; - data.state = function () { - if (this.jqXHR) { - return that._getDeferredState(this.jqXHR); - } - if (this._processQueue) { - return that._getDeferredState(this._processQueue); - } - }; - data.processing = function () { - return !this.jqXHR && this._processQueue && that - ._getDeferredState(this._processQueue) === 'pending'; - }; - data.progress = function () { - return this._progress; - }; - data.response = function () { - return this._response; - }; - }, - - // Parses the Range header from the server response - // and returns the uploaded bytes: - _getUploadedBytes: function (jqXHR) { - var range = jqXHR.getResponseHeader('Range'), - parts = range && range.split('-'), - upperBytesPos = parts && parts.length > 1 && - parseInt(parts[1], 10); - return upperBytesPos && upperBytesPos + 1; - }, - - // Uploads a file in multiple, sequential requests - // by splitting the file up in multiple blob chunks. - // If the second parameter is true, only tests if the file - // should be uploaded in chunks, but does not invoke any - // upload requests: - _chunkedUpload: function (options, testOnly) { - options.uploadedBytes = options.uploadedBytes || 0; - var that = this, - file = options.files[0], - fs = file.size, - ub = options.uploadedBytes, - mcs = options.maxChunkSize || fs, - slice = this._blobSlice, - dfd = $.Deferred(), - promise = dfd.promise(), - jqXHR, - upload; - if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) || - options.data) { - return false; - } - if (testOnly) { - return true; - } - if (ub >= fs) { - file.error = options.i18n('uploadedBytes'); - return this._getXHRPromise( - false, - options.context, - [null, 'error', file.error] - ); - } - // The chunk upload method: - upload = function () { - // Clone the options object for each chunk upload: - var o = $.extend({}, options), - currentLoaded = o._progress.loaded; - o.blob = slice.call( - file, - ub, - ub + mcs, - file.type - ); - // Store the current chunk size, as the blob itself - // will be dereferenced after data processing: - o.chunkSize = o.blob.size; - // Expose the chunk bytes position range: - o.contentRange = 'bytes ' + ub + '-' + - (ub + o.chunkSize - 1) + '/' + fs; - // Process the upload data (the blob and potential form data): - that._initXHRData(o); - // Add progress listeners for this chunk upload: - that._initProgressListener(o); - jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) || - that._getXHRPromise(false, o.context)) - .done(function (result, textStatus, jqXHR) { - ub = that._getUploadedBytes(jqXHR) || - (ub + o.chunkSize); - // Create a progress event if no final progress event - // with loaded equaling total has been triggered - // for this chunk: - if (currentLoaded + o.chunkSize - o._progress.loaded) { - that._onProgress($.Event('progress', { - lengthComputable: true, - loaded: ub - o.uploadedBytes, - total: ub - o.uploadedBytes - }), o); - } - options.uploadedBytes = o.uploadedBytes = ub; - o.result = result; - o.textStatus = textStatus; - o.jqXHR = jqXHR; - that._trigger('chunkdone', null, o); - that._trigger('chunkalways', null, o); - if (ub < fs) { - // File upload not yet complete, - // continue with the next chunk: - upload(); - } else { - dfd.resolveWith( - o.context, - [result, textStatus, jqXHR] - ); - } - }) - .fail(function (jqXHR, textStatus, errorThrown) { - o.jqXHR = jqXHR; - o.textStatus = textStatus; - o.errorThrown = errorThrown; - that._trigger('chunkfail', null, o); - that._trigger('chunkalways', null, o); - dfd.rejectWith( - o.context, - [jqXHR, textStatus, errorThrown] - ); - }); - }; - this._enhancePromise(promise); - promise.abort = function () { - return jqXHR.abort(); - }; - upload(); - return promise; - }, - - _beforeSend: function (e, data) { - if (this._active === 0) { - // the start callback is triggered when an upload starts - // and no other uploads are currently running, - // equivalent to the global ajaxStart event: - this._trigger('start'); - // Set timer for global bitrate progress calculation: - this._bitrateTimer = new this._BitrateTimer(); - // Reset the global progress values: - this._progress.loaded = this._progress.total = 0; - this._progress.bitrate = 0; - } - // Make sure the container objects for the .response() and - // .progress() methods on the data object are available - // and reset to their initial state: - this._initResponseObject(data); - this._initProgressObject(data); - data._progress.loaded = data.loaded = data.uploadedBytes || 0; - data._progress.total = data.total = this._getTotal(data.files) || 1; - data._progress.bitrate = data.bitrate = 0; - this._active += 1; - // Initialize the global progress values: - this._progress.loaded += data.loaded; - this._progress.total += data.total; - }, - - _onDone: function (result, textStatus, jqXHR, options) { - var total = options._progress.total, - response = options._response; - if (options._progress.loaded < total) { - // Create a progress event if no final progress event - // with loaded equaling total has been triggered: - this._onProgress($.Event('progress', { - lengthComputable: true, - loaded: total, - total: total - }), options); - } - response.result = options.result = result; - response.textStatus = options.textStatus = textStatus; - response.jqXHR = options.jqXHR = jqXHR; - this._trigger('done', null, options); - }, - - _onFail: function (jqXHR, textStatus, errorThrown, options) { - var response = options._response; - if (options.recalculateProgress) { - // Remove the failed (error or abort) file upload from - // the global progress calculation: - this._progress.loaded -= options._progress.loaded; - this._progress.total -= options._progress.total; - } - response.jqXHR = options.jqXHR = jqXHR; - response.textStatus = options.textStatus = textStatus; - response.errorThrown = options.errorThrown = errorThrown; - this._trigger('fail', null, options); - }, - - _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) { - // jqXHRorResult, textStatus and jqXHRorError are added to the - // options object via done and fail callbacks - this._trigger('always', null, options); - }, - - _onSend: function (e, data) { - if (!data.submit) { - this._addConvenienceMethods(e, data); - } - var that = this, - jqXHR, - aborted, - slot, - pipe, - options = that._getAJAXSettings(data), - send = function () { - that._sending += 1; - // Set timer for bitrate progress calculation: - options._bitrateTimer = new that._BitrateTimer(); - jqXHR = jqXHR || ( - ((aborted || that._trigger( - 'send', - $.Event('send', {delegatedEvent: e}), - options - ) === false) && - that._getXHRPromise(false, options.context, aborted)) || - that._chunkedUpload(options) || $.ajax(options) - ).done(function (result, textStatus, jqXHR) { - that._onDone(result, textStatus, jqXHR, options); - }).fail(function (jqXHR, textStatus, errorThrown) { - that._onFail(jqXHR, textStatus, errorThrown, options); - }).always(function (jqXHRorResult, textStatus, jqXHRorError) { - that._onAlways( - jqXHRorResult, - textStatus, - jqXHRorError, - options - ); - that._sending -= 1; - that._active -= 1; - if (options.limitConcurrentUploads && - options.limitConcurrentUploads > that._sending) { - // Start the next queued upload, - // that has not been aborted: - var nextSlot = that._slots.shift(); - while (nextSlot) { - if (that._getDeferredState(nextSlot) === 'pending') { - nextSlot.resolve(); - break; - } - nextSlot = that._slots.shift(); - } - } - if (that._active === 0) { - // The stop callback is triggered when all uploads have - // been completed, equivalent to the global ajaxStop event: - that._trigger('stop'); - } - }); - return jqXHR; - }; - this._beforeSend(e, options); - if (this.options.sequentialUploads || - (this.options.limitConcurrentUploads && - this.options.limitConcurrentUploads <= this._sending)) { - if (this.options.limitConcurrentUploads > 1) { - slot = $.Deferred(); - this._slots.push(slot); - pipe = slot.then(send); - } else { - this._sequence = this._sequence.then(send, send); - pipe = this._sequence; - } - // Return the piped Promise object, enhanced with an abort method, - // which is delegated to the jqXHR object of the current upload, - // and jqXHR callbacks mapped to the equivalent Promise methods: - pipe.abort = function () { - aborted = [undefined, 'abort', 'abort']; - if (!jqXHR) { - if (slot) { - slot.rejectWith(options.context, aborted); - } - return send(); - } - return jqXHR.abort(); - }; - return this._enhancePromise(pipe); - } - return send(); - }, - - _onAdd: function (e, data) { - var that = this, - result = true, - options = $.extend({}, this.options, data), - files = data.files, - filesLength = files.length, - limit = options.limitMultiFileUploads, - limitSize = options.limitMultiFileUploadSize, - overhead = options.limitMultiFileUploadSizeOverhead, - batchSize = 0, - paramName = this._getParamName(options), - paramNameSet, - paramNameSlice, - fileSet, - i, - j = 0; - if (!filesLength) { - return false; - } - if (limitSize && files[0].size === undefined) { - limitSize = undefined; - } - if (!(options.singleFileUploads || limit || limitSize) || - !this._isXHRUpload(options)) { - fileSet = [files]; - paramNameSet = [paramName]; - } else if (!(options.singleFileUploads || limitSize) && limit) { - fileSet = []; - paramNameSet = []; - for (i = 0; i < filesLength; i += limit) { - fileSet.push(files.slice(i, i + limit)); - paramNameSlice = paramName.slice(i, i + limit); - if (!paramNameSlice.length) { - paramNameSlice = paramName; - } - paramNameSet.push(paramNameSlice); - } - } else if (!options.singleFileUploads && limitSize) { - fileSet = []; - paramNameSet = []; - for (i = 0; i < filesLength; i = i + 1) { - batchSize += files[i].size + overhead; - if (i + 1 === filesLength || - ((batchSize + files[i + 1].size + overhead) > limitSize) || - (limit && i + 1 - j >= limit)) { - fileSet.push(files.slice(j, i + 1)); - paramNameSlice = paramName.slice(j, i + 1); - if (!paramNameSlice.length) { - paramNameSlice = paramName; - } - paramNameSet.push(paramNameSlice); - j = i + 1; - batchSize = 0; - } - } - } else { - paramNameSet = paramName; - } - data.originalFiles = files; - $.each(fileSet || files, function (index, element) { - var newData = $.extend({}, data); - newData.files = fileSet ? element : [element]; - newData.paramName = paramNameSet[index]; - that._initResponseObject(newData); - that._initProgressObject(newData); - that._addConvenienceMethods(e, newData); - result = that._trigger( - 'add', - $.Event('add', {delegatedEvent: e}), - newData - ); - return result; - }); - return result; - }, - - _replaceFileInput: function (data) { - var input = data.fileInput, - inputClone = input.clone(true), - restoreFocus = input.is(document.activeElement); - // Add a reference for the new cloned file input to the data argument: - data.fileInputClone = inputClone; - $('').append(inputClone)[0].reset(); - // Detaching allows to insert the fileInput on another form - // without loosing the file input value: - input.after(inputClone).detach(); - // If the fileInput had focus before it was detached, - // restore focus to the inputClone. - if (restoreFocus) { - inputClone.focus(); - } - // Avoid memory leaks with the detached file input: - $.cleanData(input.unbind('remove')); - // Replace the original file input element in the fileInput - // elements set with the clone, which has been copied including - // event handlers: - this.options.fileInput = this.options.fileInput.map(function (i, el) { - if (el === input[0]) { - return inputClone[0]; - } - return el; - }); - // If the widget has been initialized on the file input itself, - // override this.element with the file input clone: - if (input[0] === this.element[0]) { - this.element = inputClone; - } - }, - - _handleFileTreeEntry: function (entry, path) { - var that = this, - dfd = $.Deferred(), - errorHandler = function (e) { - if (e && !e.entry) { - e.entry = entry; - } - // Since $.when returns immediately if one - // Deferred is rejected, we use resolve instead. - // This allows valid files and invalid items - // to be returned together in one set: - dfd.resolve([e]); - }, - successHandler = function (entries) { - that._handleFileTreeEntries( - entries, - path + entry.name + '/' - ).done(function (files) { - dfd.resolve(files); - }).fail(errorHandler); - }, - readEntries = function () { - dirReader.readEntries(function (results) { - if (!results.length) { - successHandler(entries); - } else { - entries = entries.concat(results); - readEntries(); - } - }, errorHandler); - }, - dirReader, entries = []; - path = path || ''; - if (entry.isFile) { - if (entry._file) { - // Workaround for Chrome bug #149735 - entry._file.relativePath = path; - dfd.resolve(entry._file); - } else { - entry.file(function (file) { - file.relativePath = path; - dfd.resolve(file); - }, errorHandler); - } - } else if (entry.isDirectory) { - dirReader = entry.createReader(); - readEntries(); - } else { - // Return an empy list for file system items - // other than files or directories: - dfd.resolve([]); - } - return dfd.promise(); - }, - - _handleFileTreeEntries: function (entries, path) { - var that = this; - return $.when.apply( - $, - $.map(entries, function (entry) { - return that._handleFileTreeEntry(entry, path); - }) - ).then(function () { - return Array.prototype.concat.apply( - [], - arguments - ); - }); - }, - - _getDroppedFiles: function (dataTransfer) { - dataTransfer = dataTransfer || {}; - var items = dataTransfer.items; - if (items && items.length && (items[0].webkitGetAsEntry || - items[0].getAsEntry)) { - return this._handleFileTreeEntries( - $.map(items, function (item) { - var entry; - if (item.webkitGetAsEntry) { - entry = item.webkitGetAsEntry(); - if (entry) { - // Workaround for Chrome bug #149735: - entry._file = item.getAsFile(); - } - return entry; - } - return item.getAsEntry(); - }) - ); - } - return $.Deferred().resolve( - $.makeArray(dataTransfer.files) - ).promise(); - }, - - _getSingleFileInputFiles: function (fileInput) { - fileInput = $(fileInput); - var entries = fileInput.prop('webkitEntries') || - fileInput.prop('entries'), - files, - value; - if (entries && entries.length) { - return this._handleFileTreeEntries(entries); - } - files = $.makeArray(fileInput.prop('files')); - if (!files.length) { - value = fileInput.prop('value'); - if (!value) { - return $.Deferred().resolve([]).promise(); - } - // If the files property is not available, the browser does not - // support the File API and we add a pseudo File object with - // the input value as name with path information removed: - files = [{name: value.replace(/^.*\\/, '')}]; - } else if (files[0].name === undefined && files[0].fileName) { - // File normalization for Safari 4 and Firefox 3: - $.each(files, function (index, file) { - file.name = file.fileName; - file.size = file.fileSize; - }); - } - return $.Deferred().resolve(files).promise(); - }, - - _getFileInputFiles: function (fileInput) { - if (!(fileInput instanceof $) || fileInput.length === 1) { - return this._getSingleFileInputFiles(fileInput); - } - return $.when.apply( - $, - $.map(fileInput, this._getSingleFileInputFiles) - ).then(function () { - return Array.prototype.concat.apply( - [], - arguments - ); - }); - }, - - _onChange: function (e) { - var that = this, - data = { - fileInput: $(e.target), - form: $(e.target.form) - }; - this._getFileInputFiles(data.fileInput).always(function (files) { - data.files = files; - if (that.options.replaceFileInput) { - that._replaceFileInput(data); - } - if (that._trigger( - 'change', - $.Event('change', {delegatedEvent: e}), - data - ) !== false) { - that._onAdd(e, data); - } - }); - }, - - _onPaste: function (e) { - var items = e.originalEvent && e.originalEvent.clipboardData && - e.originalEvent.clipboardData.items, - data = {files: []}; - if (items && items.length) { - $.each(items, function (index, item) { - var file = item.getAsFile && item.getAsFile(); - if (file) { - data.files.push(file); - } - }); - if (this._trigger( - 'paste', - $.Event('paste', {delegatedEvent: e}), - data - ) !== false) { - this._onAdd(e, data); - } - } - }, - - _onDrop: function (e) { - e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; - var that = this, - dataTransfer = e.dataTransfer, - data = {}; - if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { - e.preventDefault(); - this._getDroppedFiles(dataTransfer).always(function (files) { - data.files = files; - if (that._trigger( - 'drop', - $.Event('drop', {delegatedEvent: e}), - data - ) !== false) { - that._onAdd(e, data); - } - }); - } - }, - - _onDragOver: getDragHandler('dragover'), - - _onDragEnter: getDragHandler('dragenter'), - - _onDragLeave: getDragHandler('dragleave'), - - _initEventHandlers: function () { - if (this._isXHRUpload(this.options)) { - this._on(this.options.dropZone, { - dragover: this._onDragOver, - drop: this._onDrop, - // event.preventDefault() on dragenter is required for IE10+: - dragenter: this._onDragEnter, - // dragleave is not required, but added for completeness: - dragleave: this._onDragLeave - }); - this._on(this.options.pasteZone, { - paste: this._onPaste - }); - } - if ($.support.fileInput) { - this._on(this.options.fileInput, { - change: this._onChange - }); - } - }, - - _destroyEventHandlers: function () { - this._off(this.options.dropZone, 'dragenter dragleave dragover drop'); - this._off(this.options.pasteZone, 'paste'); - this._off(this.options.fileInput, 'change'); - }, - - _setOption: function (key, value) { - var reinit = $.inArray(key, this._specialOptions) !== -1; - if (reinit) { - this._destroyEventHandlers(); - } - this._super(key, value); - if (reinit) { - this._initSpecialOptions(); - this._initEventHandlers(); - } - }, - - _initSpecialOptions: function () { - var options = this.options; - if (options.fileInput === undefined) { - options.fileInput = this.element.is('input[type="file"]') ? - this.element : this.element.find('input[type="file"]'); - } else if (!(options.fileInput instanceof $)) { - options.fileInput = $(options.fileInput); - } - if (!(options.dropZone instanceof $)) { - options.dropZone = $(options.dropZone); - } - if (!(options.pasteZone instanceof $)) { - options.pasteZone = $(options.pasteZone); - } - }, - - _getRegExp: function (str) { - var parts = str.split('/'), - modifiers = parts.pop(); - parts.shift(); - return new RegExp(parts.join('/'), modifiers); - }, - - _isRegExpOption: function (key, value) { - return key !== 'url' && $.type(value) === 'string' && - /^\/.*\/[igm]{0,3}$/.test(value); - }, - - _initDataAttributes: function () { - var that = this, - options = this.options, - data = this.element.data(); - // Initialize options set via HTML5 data-attributes: - $.each( - this.element[0].attributes, - function (index, attr) { - var key = attr.name.toLowerCase(), - value; - if (/^data-/.test(key)) { - // Convert hyphen-ated key to camelCase: - key = key.slice(5).replace(/-[a-z]/g, function (str) { - return str.charAt(1).toUpperCase(); - }); - value = data[key]; - if (that._isRegExpOption(key, value)) { - value = that._getRegExp(value); - } - options[key] = value; - } - } - ); - }, - - _create: function () { - this._initDataAttributes(); - this._initSpecialOptions(); - this._slots = []; - this._sequence = this._getXHRPromise(true); - this._sending = this._active = 0; - this._initProgressObject(this); - this._initEventHandlers(); - }, - - // This method is exposed to the widget API and allows to query - // the number of active uploads: - active: function () { - return this._active; - }, - - // This method is exposed to the widget API and allows to query - // the widget upload progress. - // It returns an object with loaded, total and bitrate properties - // for the running uploads: - progress: function () { - return this._progress; - }, - - // This method is exposed to the widget API and allows adding files - // using the fileupload API. The data parameter accepts an object which - // must have a files property and can contain additional options: - // .fileupload('add', {files: filesList}); - add: function (data) { - var that = this; - if (!data || this.options.disabled) { - return; - } - if (data.fileInput && !data.files) { - this._getFileInputFiles(data.fileInput).always(function (files) { - data.files = files; - that._onAdd(null, data); - }); - } else { - data.files = $.makeArray(data.files); - this._onAdd(null, data); - } - }, - - // This method is exposed to the widget API and allows sending files - // using the fileupload API. The data parameter accepts an object which - // must have a files or fileInput property and can contain additional options: - // .fileupload('send', {files: filesList}); - // The method returns a Promise object for the file upload call. - send: function (data) { - if (data && !this.options.disabled) { - if (data.fileInput && !data.files) { - var that = this, - dfd = $.Deferred(), - promise = dfd.promise(), - jqXHR, - aborted; - promise.abort = function () { - aborted = true; - if (jqXHR) { - return jqXHR.abort(); - } - dfd.reject(null, 'abort', 'abort'); - return promise; - }; - this._getFileInputFiles(data.fileInput).always( - function (files) { - if (aborted) { - return; - } - if (!files.length) { - dfd.reject(); - return; - } - data.files = files; - jqXHR = that._onSend(null, data); - jqXHR.then( - function (result, textStatus, jqXHR) { - dfd.resolve(result, textStatus, jqXHR); - }, - function (jqXHR, textStatus, errorThrown) { - dfd.reject(jqXHR, textStatus, errorThrown); - } - ); - } - ); - return this._enhancePromise(promise); - } - data.files = $.makeArray(data.files); - if (data.files.length) { - return this._onSend(null, data); - } - } - return this._getXHRPromise(false, data && data.context); - } - - }); - -})); - -var Collejo = Collejo || { - settings: { - alertInClass: 'bounceInDown', - alertOutClass: 'fadeOutUp' - }, - lang: {}, - templates: {}, - form: {}, - link: {}, - modal: {}, - dynamics: {}, - browser: {}, - components: {}, - image: {}, - ready: { - push: function(callback, recall) { - C.f.push({ - callback: callback, - recall: recall === true ? true : false - }) - }, - call: function(ns) { - $.each(C.f, function(i, func) { - func.callback(ns); - }) - }, - recall: function(ns) { - $.each(C.f, function(i, func) { - if (func.recall) { - func.callback(ns); - } - }) - } - } -}; - -jQuery.events = function(expr) { - var rez = [], - evo; - jQuery(expr).each( - function() { - if (evo = jQuery._data(this, "events")) - rez.push({ - element: this, - events: evo - }); - }); - return rez.length > 0 ? rez : null; -} - -$(function() { - Collejo.ready.call($(document)); -}); -// Opera 8.0+ -Collejo.browser.isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0; -// Firefox 1.0+ -Collejo.browser.isFirefox = typeof InstallTrigger !== 'undefined'; -// At least Safari 3+: "[object HTMLElementConstructor]" -Collejo.browser.isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0; -// Internet Explorer 6-11 -Collejo.browser.isIE = /*@cc_on!@*/ false || !!document.documentMode; -// Edge 20+ -Collejo.browser.isEdge = !Collejo.browser.isIE && !!window.StyleMedia; -// Chrome 1+ -Collejo.browser.isChrome = !!window.chrome && !!window.chrome.webstore; -// Blink engine detection -Collejo.browser.isBlink = (Collejo.browser.isChrome || Collejo.browser.isOpera) && !!window.CSS; -Collejo.templates.spinnerTemplate = function() { - return $(''); -} - -Collejo.templates.alertTemplate = function(type, message, duration) { - return $(''); -} - -Collejo.templates.alertWrap = function() { - return $('
    '); -} - -Collejo.templates.alertContainer = function() { - return $('
    '); -} - -Collejo.templates.ajaxLoader = function() { - return $('
    '); -} - -Collejo.templates.dateTimePickerIcons = function() { - return { - time: 'fa fa-clock-o', - date: 'fa fa-calendar', - up: 'fa fa-chevron-up', - down: 'fa fa-chevron-down', - previous: 'fa fa-chevron-left', - next: 'fa fa-chevron-right', - today: 'fa fa-calendar-check-o', - clear: 'fa fa-trash-o', - close: 'fa fa-close' - } -} -$.ajaxSetup({ - headers: { - 'X-CSRF-Token': $('meta[name="token"]').attr('content'), - 'X-User-Time': new Date() - } -}); - -Collejo.ajaxComplete = function(event, xhr, settings) { - - var code, status, timeout, response = 0; - - try { - response = $.parseJSON(xhr.responseText); - } catch (e) { - console.log(e) - } - - status = (response == 0) ? xhr.status : response; - - if (status == 403 || status == 401) { - Collejo.alert('danger', Collejo.lang.ajax_unauthorize, 3000); - $('.modal,.modal-backdrop').remove(); - - window.location = settings.url; - } - - if (status == 400) { - Collejo.alert('warning', response.message, false); - $('.modal,.modal-backdrop').remove(); - } - - if (status != 0 && status != null) { - var code = status.code != undefined ? status.code : 0; - if (code == 0) { - if (response.data != undefined && response.data.partial != undefined) { - var target = response.data.target ? response.data.target : 'ajax-target'; - - var target = $('#' + target); - var partial = $(response.data.partial); - - Collejo.dynamics.prependRow(partial, target); - - Collejo.ready.recall(partial); - } - - if (response.data != undefined && response.data.redir != undefined) { - if (response.message != null) { - Collejo.alert(response.success ? 'success' : 'warning', response.message + '. redirecting…', 1000); - timeout = 0; - } - setTimeout(function() { - window.location = response.data.redir; - }, timeout); - } - - if (response.message != undefined && response.message != null && response.message.length > 0 && response.data.redir == undefined) { - Collejo.alert(response.success ? 'success' : 'warning', response.message, 3000); - } - - if (response.data != undefined && response.data.errors != undefined) { - var msg = '' + Collejo.lang.validation_failed + ' ' + Collejo.lang.validation_correct + '
    '; - $.each(response.data.errors, function(field, err) { - $.each(err, function(i, e) { - msg = msg + e + '
    '; - }); - }); - - Collejo.alert('warning', msg, 5000); - } - } - } - - $(window).resize(); -} - -$(document).ajaxComplete(Collejo.ajaxComplete); -Collejo.image.lazyLoad = function(img) { - img.hide(); - img.each(function(i) { - if (this.complete) { - $(this).fadeIn(); - } else { - $(this).load(function() { - $(this).fadeIn(500); - }); - } - }); -} - -Collejo.ready.push(function(scope) { - Collejo.image.lazyLoad($(scope).find('img.img-lazy')); -}); -$.fn.datetimepicker.defaults.icons = Collejo.templates.dateTimePickerIcons(); - -Collejo.ready.push(function(scope) { - $(scope).find('[data-toggle="date-input"]').datetimepicker({ - format: 'YYYY-MM-DD' - }); -}, true); - -Collejo.ready.push(function(scope) { - $(scope).find('[data-toggle="time-input"]').datetimepicker({ - format: 'HH:i:s' - }); -}, true); - -Collejo.ready.push(function(scope) { - $(scope).find('[data-toggle="date-time-input"]').datetimepicker({ - format: 'YYYY-MM-DD HH:i:s' - }); -}, true); -Selectize.define('allow-clear', function(options) { - var that = this; - var html = $(''); - - this.setup = (function() { - var original = that.setup; - - return function() { - - original.apply(this, arguments); - if (this.getValue() == '') { - html.addClass('disabled'); - } - this.$wrapper.append(html); - - this.$wrapper.on('click', '.clear-selection', function(e) { - e.preventDefault(); - if (that.isLocked) return; - that.clear(); - that.$control_input.focus(); - }); - - this.on('change', function(value) { - if (value == '') { - this.$wrapper.find('.clear-selection').addClass('disabled'); - } else { - this.$wrapper.find('.clear-selection').removeClass('disabled'); - } - }); - }; - })(); -}); - -Collejo.ready.push(function(scope) { - - Collejo.components.dropDown($(scope).find('[data-toggle="select-dropdown"]')); - - Collejo.components.searchDropDown($(scope).find('[data-toggle="search-dropdown"]')); - -}, true); - -Collejo.components.dropDown = function(el) { - el.each(function() { - var element = $(this); - - if (element.data('toggle') == null) { - element.data('toggle', 'select-dropdown'); - } - - var plugins = []; - - if (element.data('allow-clear') == true) { - plugins.push('allow-clear'); - } - - element.selectize({ - placeholder: Collejo.lang.select, - plugins: plugins - }); - - var selectize = element[0].selectize; - - selectize.on('change', function() { - element.valid(); - }); - }); - - if (el.length == 1) { - var selectize = el[0].selectize; - return selectize; - } -} - -Collejo.components.searchDropDown = function(el) { - el.each(function() { - var element = $(this); - - if (element.data('toggle') == null) { - element.data('toggle', 'search-dropdown'); - } - - var plugins = []; - - if (element.data('allow-clear') == true) { - plugins.push('allow-clear'); - } - - element.selectize({ - placeholder: Collejo.lang.search, - valueField: 'id', - labelField: 'name', - searchField: 'name', - options: [], - create: false, - plugins: plugins, - render: { - option: function(item, escape) { - return '
    ' + item.name + '
    '; - }, - item: function(item, escape) { - return '
    ' + item.name + '
    '; - } - }, - load: function(query, callback) { - if (!query.length) return callback(); - Collejo.templates.spinnerTemplate().addClass('inline').insertAfter(element); - $.ajax({ - url: element.data('url'), - type: 'GET', - dataType: 'json', - data: { - q: query - }, - error: function() { - callback(); - element.siblings('.spinner-wrap').remove(); - }, - success: function(res) { - callback(res.data); - element.siblings('.spinner-wrap').remove(); - } - }); - } - }); - - var selectize = element[0].selectize; - - selectize.on('change', function() { - element.valid(); - }); - }); - - if (el.length == 1) { - var selectize = el[0].selectize; - return selectize; - } -} -Collejo.ready.push(function(scope) { - $(scope).on('click', '[data-toggle="ajax-link"]', function(e) { - e.preventDefault(); - Collejo.link.ajax($(this)); - }); -}); - -Collejo.link.ajax = function(link, callback) { - - if (link.data('confirm') == null) { - - callAjax(link); - - } else { - - bootbox.confirm({ - message: link.data('confirm'), - buttons: { - cancel: { - label: Collejo.lang.no, - className: 'btn-default' - }, - confirm: { - label: Collejo.lang.yes, - className: 'btn-danger' - } - }, - callback: function(result) { - if (result) { - callAjax(link); - } - } - }); - } - - function callAjax(link) { - $.getJSON(link.attr('href'), function(response) { - - if (link.data('success-callback') == null) { - - if (typeof callback == 'function') { - callback(link, response); - } - - } else { - - var func = window[link.data('success-callback')]; - - if (typeof func == 'function') { - func(link, response); - } - } - - }); - } - -} -Collejo.alert = function(type, msg, duration) { - var alertWrap = Collejo.templates.alertWrap(); - var alertContainer = Collejo.templates.alertContainer(); - - alertWrap.css({ - position: 'fixed', - top: '60px', - width: '100%', - height: 0, - 'z-index': 99999 - }); - - alertContainer.css({ - width: '400px', - margin: '0 auto' - }); - - alertWrap.append(alertContainer); - var alert = Collejo.templates.alertTemplate(type, msg, duration); - - if ($('#alert-wrap').length == 0) { - $('body').append(alertWrap); - } - - var alertContainer = $('#alert-wrap').find('.alert-container'); - - if (duration === false) { - alertContainer.empty(); - } - - alert.appendTo(alertContainer).addClass('animated ' + Collejo.settings.alertInClass); - - if (duration !== false) { - window.setTimeout(function() { - if (Collejo.browser.isFirefox || Collejo.browser.isChrome) { - alert.removeClass(Collejo.settings.alertInClass) - .addClass(Collejo.settings.alertOutClass) - .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() { - alert.remove(); - }); - } else { - alert.remove(); - } - }, duration); - } - -} -Collejo.form.lock = function(form) { - $(form).find('input').attr('readonly', true); - $(form).find('.selectized').each(function() { - $(this)[0].selectize.lock(); - }); - $(form).find('.fileinput-button').each(function() { - $(this).addClass('disabled').find('input').attr('disabled', true); - }); - $(form).find('button[type="submit"]') - .attr('disabled', true) - .append(Collejo.templates.spinnerTemplate()); - $(form).find('input[type="checkbox"]') - .attr('readonly', true) - .parent('.checkbox-row').addClass('disabled'); -} - -Collejo.form.unlock = function(form) { - $(form).find('input').attr('readonly', false); - $(form).find('.selectized').each(function() { - $(this)[0].selectize.unlock(); - }); - $(form).find('.fileinput-button').each(function() { - $(this).removeClass('disabled').find('input').attr('disabled', false); - }); - $(form).find('button[type="submit"]') - .attr('disabled', false) - .find('.spinner-wrap') - .remove(); - $(form).find('input[type="checkbox"]') - .attr('readonly', false) - .parent('.checkbox-row').removeClass('disabled'); -} - -Collejo.ready.push(function(scope) { - $.validator.setDefaults({ - ignore: $('.selectize'), - errorPlacement: function(error, element) { - if ($(element).parents('.input-group').length) { - error.insertAfter($(element).parents('.input-group')); - } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') { - error.insertAfter($(element).siblings('.selectize-control')); - } else { - error.insertAfter(element); - } - }, - highlight: function(element, errorClass, validClass) { - if (element.type === "radio") { - this.findByName(element.name).addClass(errorClass).removeClass(validClass); - } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') { - $(element).siblings('.selectize-control').addClass(errorClass).removeClass(validClass) - } else { - $(element).addClass(errorClass).removeClass(validClass); - } - }, - unhighlight: function(element, errorClass, validClass) { - if (element.type === "radio") { - this.findByName(element.name).removeClass(errorClass).addClass(validClass); - } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') { - $(element).siblings('.selectize-control').removeClass(errorClass).addClass(validClass); - } else { - $(element).removeClass(errorClass).addClass(validClass); - } - } - }); -}); -Collejo.ready.push(function(scope) { - $(scope).on('click', '[data-toggle="dynamic-delete"]', function(e) { - e.preventDefault(); - - Collejo.dynamics.delete($(this)); - }); - - Collejo.dynamics.checkRowCount($(scope).find('.table-list')); - Collejo.dynamics.checkRowCount($(scope).find('.column-list')); -}); - -Collejo.dynamics.delete = function(element) { - - Collejo.link.ajax(element, function(link, response) { - - var list = link.parents('.table-list'); - - link.closest('.' + link.data('delete-block')).fadeOut().remove(); - - Collejo.dynamics.checkRowCount(link.parents('.table-list')); - }); -} - -Collejo.dynamics.prependRow = function(partial, list) { - - var type = Collejo.dynamics.getListType(list); - - var id = partial.prop('id'); - var replacing = list.find('#' + id); - - if (replacing.length) { - replacing.replaceWith(partial); - } else { - if (type == 'table') { - partial.hide().insertAfter(list.find('th').parent()).fadeIn(); - } else if (type == 'columns') { - partial.hide().prependTo(list.find('.columns')).fadeIn(); - } else { - partial.hide().prependTo(list).fadeIn(); - } - } - - Collejo.dynamics.checkRowCount(list); -} - -Collejo.dynamics.getListType = function(list) { - var type; - - if (list.find('table').length || list.prop('tagName') == 'TABLE') { - type = 'table'; - } else if (list.find('columns').length) { - type = 'columns'; - } - - return type; -} - -Collejo.dynamics.checkRowCount = function(list) { - - var type = Collejo.dynamics.getListType(list); - - if (type = 'table') { - var table = list.find('table'); - - if (table.find('tr').length == 1) { - list.find('.placeholder').show(); - table.hide(); - } else { - list.find('.placeholder').hide(); - table.show(); - } - } - - if (type = 'columns') { - var columns = list.find('columns'); - - if (columns.find('.col-md-6').children().length == 0) { - columns.siblings('.col-md-6').show(); - columns.hide(); - } else { - list.siblings('.col-md-6').hide(); - columns.show(); - } - } -} -Collejo.modal.open = function(link) { - var id = link.data('modal-id') != null ? link.data('modal-id') : 'ajax-modal-' + moment(); - var size = link.data('modal-size') != null ? ' modal-' + link.data('modal-size') + ' ' : ''; - - var backdrop = link.data('modal-backdrop') != null ? link.data('modal-backdrop') : true; - var keyboard = link.data('modal-keyboard') != null ? link.data('modal-keyboard') : true; - - var modal = $(''); - - var loader = Collejo.templates.ajaxLoader(); - - if (loader != null) { - loader.appendTo(modal); - } - - $('body').append(modal); - - modal.on('show.bs.modal', function() { - - $.ajax({ - url: link.attr('href'), - type: 'GET', - success: function(response) { - if (response.success == true && response.data && response.data.content) { - modal.find('.modal-dialog').html(response.data.content); - modal.removeClass('loading'); - - if (loader != null) { - loader.remove(); - } - - Collejo.ready.recall(modal); - } - } - }); - }).on('hidden.bs.modal', function() { - modal.remove(); - }).modal({ - backdrop: backdrop, - keyboard: keyboard - }); -} - -Collejo.modal.close = function(form) { - $(document).find('#' + $(form).prop('id')).closest('.modal').modal('hide'); -} - -Collejo.ready.push(function(scope) { - $(scope).on('click', '[data-toggle="ajax-modal"]', function(e) { - e.preventDefault(); - Collejo.modal.open($(this)); - }); - - $(scope).on('DOMNodeInserted', '.modal-backdrop', function(e) { - if ($('.modal-backdrop').length > 1) { - - $('.modal-backdrop').last().css({ - 'z-index': parseInt($('.modal').last().prev().css('z-index')) + 10 - }) - } - }); - - $(scope).on('DOMNodeInserted', '.modal', function(e) { - if ($('.modal').length > 1) { - $('.modal').last().css({ - 'z-index': parseInt($('.modal-backdrop').last().prev().css('z-index')) + 10 - }) - } - }); -}); -$(function() { - $(window).resize(); - - $('.dash-content a').click(function(e) { - var url = $(this).prop('href'); - if (url.substr(url.length - 1) == '#') { - e.preventDefault(); - } - }); -}); - -$(window).on('resize', function() { - - var tab = $('.dash-content .tab-content'); - if (tab && tab.offset()) { - tab.css({ - 'min-height': ($(document).height() - tab.offset().top - 35) + 'px' - }); - } - - var tabnav = $('.tabs-left'); - if (tabnav && tab) { - tabnav.css({ - 'height': tab.height() + 'px' - }); - } - - var section = $('.section-content,.landing-screen'); - if (section && section.offset()) { - section.css({ - 'min-height': ($(document).height() - section.offset().top - 35) + 'px' - }); - } -}); -//# sourceMappingURL=collejo.js.map diff --git a/src/resources/assets/build/js/collejos.js b/src/resources/assets/build/js/collejos.js deleted file mode 100644 index ad08f70..0000000 --- a/src/resources/assets/build/js/collejos.js +++ /dev/null @@ -1,22 +0,0 @@ -if(function(t,e){function n(t){var e=t.length,n=lt.type(t);return!lt.isWindow(t)&&(!(1!==t.nodeType||!e)||("array"===n||"function"!==n&&(0===e||"number"==typeof e&&e>0&&e-1 in t)))}function i(t){var e=St[t]={};return lt.each(t.match(ct)||[],function(t,n){e[n]=!0}),e}function r(t,n,i,r){if(lt.acceptData(t)){var a,o,s=lt.expando,l="string"==typeof n,u=t.nodeType,c=u?lt.cache:t,d=u?t[s]:t[s]&&s;if(d&&c[d]&&(r||c[d].data)||!l||i!==e)return d||(u?t[s]=d=J.pop()||lt.guid++:d=s),c[d]||(c[d]={},u||(c[d].toJSON=lt.noop)),"object"!=typeof n&&"function"!=typeof n||(r?c[d]=lt.extend(c[d],n):c[d].data=lt.extend(c[d].data,n)),a=c[d],r||(a.data||(a.data={}),a=a.data),i!==e&&(a[lt.camelCase(n)]=i),l?(o=a[n],null==o&&(o=a[lt.camelCase(n)])):o=a,o}}function a(t,e,n){if(lt.acceptData(t)){var i,r,a,o=t.nodeType,l=o?lt.cache:t,u=o?t[lt.expando]:lt.expando;if(l[u]){if(e&&(a=n?l[u]:l[u].data)){lt.isArray(e)?e=e.concat(lt.map(e,lt.camelCase)):e in a?e=[e]:(e=lt.camelCase(e),e=e in a?[e]:e.split(" "));for(i=0,r=e.length;i=0===n})}function h(t){var e=Xt.split("|"),n=t.createDocumentFragment();if(n.createElement)for(;e.length;)n.createElement(e.pop());return n}function f(t,e){return t.getElementsByTagName(e)[0]||t.appendChild(t.ownerDocument.createElement(e))}function p(t){var e=t.getAttributeNode("type");return t.type=(e&&e.specified)+"/"+t.type,t}function g(t){var e=re.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function m(t,e){for(var n,i=0;null!=(n=t[i]);i++)lt._data(n,"globalEval",!e||lt._data(e[i],"globalEval"))}function v(t,e){if(1===e.nodeType&<.hasData(t)){var n,i,r,a=lt._data(t),o=lt._data(e,a),s=a.events;if(s){delete o.handle,o.events={};for(n in s)for(i=0,r=s[n].length;i").css("cssText","display:block !important")).appendTo(e.documentElement),e=(ue[0].contentWindow||ue[0].contentDocument).document,e.write(""),e.close(),n=P(t,e),ue.detach()),_e[t]=n),n}function P(t,e){var n=lt(e.createElement(t)).appendTo(e.body),i=lt.css(n[0],"display");return n.remove(),i}function M(t,e,n,i){var r;if(lt.isArray(e))lt.each(e,function(e,r){n||Ae.test(t)?i(t,r):M(t+"["+("object"==typeof r?e:"")+"]",r,n,i)});else if(n||"object"!==lt.type(e))i(t,e);else for(r in e)M(t+"["+r+"]",e[r],n,i)}function E(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var i,r=0,a=e.toLowerCase().match(ct)||[];if(lt.isFunction(n))for(;i=a[r++];)"+"===i[0]?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(n)):(t[i]=t[i]||[]).push(n)}}function D(t,e,n,i){function r(s){var l;return a[s]=!0,lt.each(t[s]||[],function(t,s){var u=s(e,n,i);return"string"!=typeof u||o||a[u]?o?!(l=u):void 0:(e.dataTypes.unshift(u),r(u),!1)}),l}var a={},o=t===ze;return r(e.dataTypes[0])||!a["*"]&&r("*")}function O(t,n){var i,r,a=lt.ajaxSettings.flatOptions||{};for(r in n)n[r]!==e&&((a[r]?t:i||(i={}))[r]=n[r]);return i&<.extend(!0,t,i),t}function L(t,n,i){var r,a,o,s,l=t.contents,u=t.dataTypes,c=t.responseFields;for(s in c)s in i&&(n[c[s]]=i[s]);for(;"*"===u[0];)u.shift(),a===e&&(a=t.mimeType||n.getResponseHeader("Content-Type"));if(a)for(s in l)if(l[s]&&l[s].test(a)){u.unshift(s);break}if(u[0]in i)o=u[0];else{for(s in i){if(!u[0]||t.converters[s+" "+u[0]]){o=s;break}r||(r=s)}o=o||r}if(o)return o!==u[0]&&u.unshift(o),i[o]}function I(t,e){var n,i,r,a,o={},s=0,l=t.dataTypes.slice(),u=l[0];if(t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l[1])for(r in t.converters)o[r.toLowerCase()]=t.converters[r];for(;i=l[++s];)if("*"!==i){if("*"!==u&&u!==i){if(r=o[u+" "+i]||o["* "+i],!r)for(n in o)if(a=n.split(" "),a[1]===i&&(r=o[u+" "+a[0]]||o["* "+a[0]])){r===!0?r=o[n]:o[n]!==!0&&(i=a[0],l.splice(s--,0,i));break}if(r!==!0)if(r&&t["throws"])e=r(e);else try{e=r(e)}catch(c){return{state:"parsererror",error:r?c:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:e}}function N(){try{return new t.XMLHttpRequest}catch(e){}}function R(){try{return new t.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function F(){return setTimeout(function(){Ze=e}),Ze=lt.now()}function V(t,e){lt.each(e,function(e,n){for(var i=(an[e]||[]).concat(an["*"]),r=0,a=i.length;r)[^>]*|#([\w-]*))$/,ft=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,pt=/^[\],:{}\s]*$/,gt=/(?:^|:|,)(?:\s*\[)+/g,mt=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,vt=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,yt=/^-ms-/,xt=/-([\da-z])/gi,_t=function(t,e){return e.toUpperCase()},bt=function(t){(U.addEventListener||"load"===t.type||"complete"===U.readyState)&&(wt(),lt.ready())},wt=function(){U.addEventListener?(U.removeEventListener("DOMContentLoaded",bt,!1),t.removeEventListener("load",bt,!1)):(U.detachEvent("onreadystatechange",bt),t.detachEvent("onload",bt))};lt.fn=lt.prototype={jquery:tt,constructor:lt,init:function(t,n,i){var r,a;if(!t)return this;if("string"==typeof t){if(r="<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3?[null,t,null]:ht.exec(t),!r||!r[1]&&n)return!n||n.jquery?(n||i).find(t):this.constructor(n).find(t);if(r[1]){if(n=n instanceof lt?n[0]:n,lt.merge(this,lt.parseHTML(r[1],n&&n.nodeType?n.ownerDocument||n:U,!0)),ft.test(r[1])&<.isPlainObject(n))for(r in n)lt.isFunction(this[r])?this[r](n[r]):this.attr(r,n[r]);return this}if(a=U.getElementById(r[2]),a&&a.parentNode){if(a.id!==r[2])return i.find(t);this.length=1,this[0]=a}return this.context=U,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):lt.isFunction(t)?i.ready(t):(t.selector!==e&&(this.selector=t.selector,this.context=t.context),lt.makeArray(t,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return it.call(this)},get:function(t){return null==t?this.toArray():t<0?this[this.length+t]:this[t]},pushStack:function(t){var e=lt.merge(this.constructor(),t);return e.prevObject=this,e.context=this.context,e},each:function(t,e){return lt.each(this,t,e)},ready:function(t){return lt.ready.promise().done(t),this},slice:function(){return this.pushStack(it.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n0||(B.resolveWith(U,[lt]),lt.fn.trigger&<(U).trigger("ready").off("ready"))}},isFunction:function(t){return"function"===lt.type(t)},isArray:Array.isArray||function(t){return"array"===lt.type(t)},isWindow:function(t){return null!=t&&t==t.window},isNumeric:function(t){return!isNaN(parseFloat(t))&&isFinite(t)},type:function(t){return null==t?String(t):"object"==typeof t||"function"==typeof t?Z[at.call(t)]||"object":typeof t},isPlainObject:function(t){if(!t||"object"!==lt.type(t)||t.nodeType||lt.isWindow(t))return!1;try{if(t.constructor&&!ot.call(t,"constructor")&&!ot.call(t.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var i;for(i in t);return i===e||ot.call(t,i)},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},error:function(t){throw new Error(t)},parseHTML:function(t,e,n){if(!t||"string"!=typeof t)return null;"boolean"==typeof e&&(n=e,e=!1),e=e||U;var i=ft.exec(t),r=!n&&[];return i?[e.createElement(i[1])]:(i=lt.buildFragment([t],e,r),r&<(r).remove(),lt.merge([],i.childNodes))},parseJSON:function(e){return t.JSON&&t.JSON.parse?t.JSON.parse(e):null===e?e:"string"==typeof e&&(e=lt.trim(e),e&&pt.test(e.replace(mt,"@").replace(vt,"]").replace(gt,"")))?new Function("return "+e)():void lt.error("Invalid JSON: "+e)},parseXML:function(n){var i,r;if(!n||"string"!=typeof n)return null;try{t.DOMParser?(r=new DOMParser,i=r.parseFromString(n,"text/xml")):(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(n))}catch(a){i=e}return i&&i.documentElement&&!i.getElementsByTagName("parsererror").length||lt.error("Invalid XML: "+n),i},noop:function(){},globalEval:function(e){e&<.trim(e)&&(t.execScript||function(e){t.eval.call(t,e)})(e)},camelCase:function(t){return t.replace(yt,"ms-").replace(xt,_t)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,i){var r,a=0,o=t.length,s=n(t);if(i){if(s)for(;a-1;)u.splice(i,1),n&&(i<=o&&o--,i<=s&&s--)}),this},has:function(t){return t?lt.inArray(t,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=c=r=e,this},disabled:function(){return!u},lock:function(){return c=e,r||h.disable(),this},locked:function(){return!c},fireWith:function(t,e){return e=e||[],e=[t,e.slice?e.slice():e],!u||a&&!c||(n?c.push(e):d(e)),this},fire:function(){return h.fireWith(this,arguments),this},fired:function(){return!!a}};return h},lt.extend({Deferred:function(t){var e=[["resolve","done",lt.Callbacks("once memory"),"resolved"],["reject","fail",lt.Callbacks("once memory"),"rejected"],["notify","progress",lt.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return r.done(arguments).fail(arguments),this},then:function(){var t=arguments;return lt.Deferred(function(n){lt.each(e,function(e,a){var o=a[0],s=lt.isFunction(t[e])&&t[e];r[a[1]](function(){var t=s&&s.apply(this,arguments);t&<.isFunction(t.promise)?t.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[o+"With"](this===i?n.promise():this,s?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?lt.extend(t,i):i}},r={};return i.pipe=i.then,lt.each(e,function(t,a){var o=a[2],s=a[3];i[a[1]]=o.add,s&&o.add(function(){n=s},e[1^t][2].disable,e[2][2].lock),r[a[0]]=function(){return r[a[0]+"With"](this===r?i:this,arguments),this},r[a[0]+"With"]=o.fireWith}),i.promise(r),t&&t.call(r,r),r},when:function(t){var e,n,i,r=0,a=it.call(arguments),o=a.length,s=1!==o||t&<.isFunction(t.promise)?o:0,l=1===s?t:lt.Deferred(),u=function(t,n,i){return function(r){n[t]=this,i[t]=arguments.length>1?it.call(arguments):r,i===e?l.notifyWith(n,i):--s||l.resolveWith(n,i)}};if(o>1)for(e=new Array(o),n=new Array(o),i=new Array(o);r
    a",n=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0],!n||!i||!n.length)return{};a=U.createElement("select"),s=a.appendChild(U.createElement("option")),r=d.getElementsByTagName("input")[0],i.style.cssText="top:1px;float:left;opacity:.5",e={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(i.getAttribute("style")),hrefNormalized:"/a"===i.getAttribute("href"),opacity:/^0.5/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:!!r.value,optSelected:s.selected,enctype:!!U.createElement("form").enctype,html5Clone:"<:nav>"!==U.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===U.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},r.checked=!0,e.noCloneChecked=r.cloneNode(!0).checked,a.disabled=!0,e.optDisabled=!s.disabled;try{delete d.test}catch(h){e.deleteExpando=!1}r=U.createElement("input"),r.setAttribute("value",""),e.input=""===r.getAttribute("value"),r.value="t",r.setAttribute("type","radio"),e.radioValue="t"===r.value,r.setAttribute("checked","t"),r.setAttribute("name","t"),o=U.createDocumentFragment(),o.appendChild(r),e.appendChecked=r.checked,e.checkClone=o.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){e.noCloneEvent=!1}),d.cloneNode(!0).click());for(c in{submit:!0,change:!0,focusin:!0})d.setAttribute(l="on"+c,"t"),e[c+"Bubbles"]=l in t||d.attributes[l].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",e.clearCloneStyle="content-box"===d.style.backgroundClip,lt(function(){var n,i,r,a="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",o=U.getElementsByTagName("body")[0];o&&(n=U.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",o.appendChild(n).appendChild(d),d.innerHTML="
    t
    ",r=d.getElementsByTagName("td"),r[0].style.cssText="padding:0;margin:0;border:0;display:none",u=0===r[0].offsetHeight,r[0].style.display="",r[1].style.display="none",e.reliableHiddenOffsets=u&&0===r[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",e.boxSizing=4===d.offsetWidth,e.doesNotIncludeMarginInBodyOffset=1!==o.offsetTop,t.getComputedStyle&&(e.pixelPosition="1%"!==(t.getComputedStyle(d,null)||{}).top,e.boxSizingReliable="4px"===(t.getComputedStyle(d,null)||{width:"4px"}).width,i=d.appendChild(U.createElement("div")),i.style.cssText=d.style.cssText=a,i.style.marginRight=i.style.width="0",d.style.width="1px",e.reliableMarginRight=!parseFloat((t.getComputedStyle(i,null)||{}).marginRight)),typeof d.style.zoom!==q&&(d.innerHTML="",d.style.cssText=a+"width:1px;padding:1px;display:inline;zoom:1",e.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
    ",d.firstChild.style.width="5px",e.shrinkWrapBlocks=3!==d.offsetWidth,e.inlineBlockNeedsLayout&&(o.style.zoom=1)),o.removeChild(n),n=d=r=i=null)}),n=a=o=s=i=r=null,e}();var Tt=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Ct=/([A-Z])/g;lt.extend({cache:{},expando:"jQuery"+(tt+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(t){return t=t.nodeType?lt.cache[t[lt.expando]]:t[lt.expando],!!t&&!s(t)},data:function(t,e,n){return r(t,e,n)},removeData:function(t,e){return a(t,e)},_data:function(t,e,n){return r(t,e,n,!0)},_removeData:function(t,e){return a(t,e,!0)},acceptData:function(t){if(t.nodeType&&1!==t.nodeType&&9!==t.nodeType)return!1;var e=t.nodeName&<.noData[t.nodeName.toLowerCase()];return!e||e!==!0&&t.getAttribute("classid")===e}}),lt.fn.extend({data:function(t,n){var i,r,a=this[0],s=0,l=null;if(t===e){if(this.length&&(l=lt.data(a),1===a.nodeType&&!lt._data(a,"parsedAttrs"))){for(i=a.attributes;s1,null,!0)},removeData:function(t){return this.each(function(){lt.removeData(this,t)})}}),lt.extend({queue:function(t,e,n){var i;if(t)return e=(e||"fx")+"queue",i=lt._data(t,e),n&&(!i||lt.isArray(n)?i=lt._data(t,e,lt.makeArray(n)):i.push(n)),i||[]},dequeue:function(t,e){e=e||"fx";var n=lt.queue(t,e),i=n.length,r=n.shift(),a=lt._queueHooks(t,e),o=function(){lt.dequeue(t,e)};"inprogress"===r&&(r=n.shift(),i--),a.cur=r,r&&("fx"===e&&n.unshift("inprogress"),delete a.stop,r.call(t,o,a)),!i&&a&&a.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return lt._data(t,n)||lt._data(t,n,{empty:lt.Callbacks("once memory").add(function(){lt._removeData(t,e+"queue"),lt._removeData(t,n)})})}}),lt.fn.extend({queue:function(t,n){var i=2;return"string"!=typeof t&&(n=t,t="fx",i--),arguments.length1)},removeAttr:function(t){return this.each(function(){lt.removeAttr(this,t)})},prop:function(t,e){return lt.access(this,lt.prop,t,e,arguments.length>1)},removeProp:function(t){return t=lt.propFix[t]||t,this.each(function(){try{this[t]=e,delete this[t]}catch(n){}})},addClass:function(t){var e,n,i,r,a,o=0,s=this.length,l="string"==typeof t&&t;if(lt.isFunction(t))return this.each(function(e){lt(this).addClass(t.call(this,e,this.className))});if(l)for(e=(t||"").match(ct)||[];o=0;)i=i.replace(" "+r+" "," ");n.className=t?lt.trim(i):""}return this},toggleClass:function(t,e){var n=typeof t,i="boolean"==typeof e;return lt.isFunction(t)?this.each(function(n){lt(this).toggleClass(t.call(this,n,this.className,e),e)}):this.each(function(){if("string"===n)for(var r,a=0,o=lt(this),s=e,l=t.match(ct)||[];r=l[a++];)s=i?s:!o.hasClass(r),o[s?"addClass":"removeClass"](r);else n!==q&&"boolean"!==n||(this.className&<._data(this,"__className__",this.className),this.className=this.className||t===!1?"":lt._data(this,"__className__")||"")})},hasClass:function(t){for(var e=" "+t+" ",n=0,i=this.length;n=0)return!0;return!1},val:function(t){var n,i,r,a=this[0];{if(arguments.length)return r=lt.isFunction(t),this.each(function(n){var a,o=lt(this);1===this.nodeType&&(a=r?t.call(this,n,o.val()):t,null==a?a="":"number"==typeof a?a+="":lt.isArray(a)&&(a=lt.map(a,function(t){return null==t?"":t+""})),i=lt.valHooks[this.type]||lt.valHooks[this.nodeName.toLowerCase()],i&&"set"in i&&i.set(this,a,"value")!==e||(this.value=a))});if(a)return i=lt.valHooks[a.type]||lt.valHooks[a.nodeName.toLowerCase()],i&&"get"in i&&(n=i.get(a,"value"))!==e?n:(n=a.value,"string"==typeof n?n.replace(Mt,""):null==n?"":n)}}}),lt.extend({valHooks:{option:{get:function(t){var e=t.attributes.value;return!e||e.specified?t.value:t.text}},select:{get:function(t){for(var e,n,i=t.options,r=t.selectedIndex,a="select-one"===t.type||r<0,o=a?null:[],s=a?r+1:i.length,l=r<0?s:a?r:0;l=0}),n.length||(t.selectedIndex=-1),n}}},attr:function(t,n,i){var r,a,o,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return typeof t.getAttribute===q?lt.prop(t,n,i):(a=1!==s||!lt.isXMLDoc(t),a&&(n=n.toLowerCase(),r=lt.attrHooks[n]||(Ot.test(n)?kt:At)),i===e?r&&a&&"get"in r&&null!==(o=r.get(t,n))?o:(typeof t.getAttribute!==q&&(o=t.getAttribute(n)),null==o?e:o):null!==i?r&&a&&"set"in r&&(o=r.set(t,i,n))!==e?o:(t.setAttribute(n,i+""),i):void lt.removeAttr(t,n))},removeAttr:function(t,e){var n,i,r=0,a=e&&e.match(ct);if(a&&1===t.nodeType)for(;n=a[r++];)i=lt.propFix[n]||n,Ot.test(n)?!It&&Lt.test(n)?t[lt.camelCase("default-"+n)]=t[i]=!1:t[i]=!1:lt.attr(t,n,""),t.removeAttribute(It?n:i)},attrHooks:{type:{set:function(t,e){if(!lt.support.radioValue&&"radio"===e&<.nodeName(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(t,n,i){var r,a,o,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return o=1!==s||!lt.isXMLDoc(t),o&&(n=lt.propFix[n]||n,a=lt.propHooks[n]),i!==e?a&&"set"in a&&(r=a.set(t,i,n))!==e?r:t[n]=i:a&&"get"in a&&null!==(r=a.get(t,n))?r:t[n]},propHooks:{tabIndex:{get:function(t){var n=t.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):Et.test(t.nodeName)||Dt.test(t.nodeName)&&t.href?0:e}}}}),kt={get:function(t,n){var i=lt.prop(t,n),r="boolean"==typeof i&&t.getAttribute(n),a="boolean"==typeof i?Nt&&It?null!=r:Lt.test(n)?t[lt.camelCase("default-"+n)]:!!r:t.getAttributeNode(n);return a&&a.value!==!1?n.toLowerCase():e; -},set:function(t,e,n){return e===!1?lt.removeAttr(t,n):Nt&&It||!Lt.test(n)?t.setAttribute(!It&<.propFix[n]||n,n):t[lt.camelCase("default-"+n)]=t[n]=!0,n}},Nt&&It||(lt.attrHooks.value={get:function(t,n){var i=t.getAttributeNode(n);return lt.nodeName(t,"input")?t.defaultValue:i&&i.specified?i.value:e},set:function(t,e,n){return lt.nodeName(t,"input")?void(t.defaultValue=e):At&&At.set(t,e,n)}}),It||(At=lt.valHooks.button={get:function(t,n){var i=t.getAttributeNode(n);return i&&("id"===n||"name"===n||"coords"===n?""!==i.value:i.specified)?i.value:e},set:function(t,n,i){var r=t.getAttributeNode(i);return r||t.setAttributeNode(r=t.ownerDocument.createAttribute(i)),r.value=n+="","value"===i||n===t.getAttribute(i)?n:e}},lt.attrHooks.contenteditable={get:At.get,set:function(t,e,n){At.set(t,""!==e&&e,n)}},lt.each(["width","height"],function(t,e){lt.attrHooks[e]=lt.extend(lt.attrHooks[e],{set:function(t,n){if(""===n)return t.setAttribute(e,"auto"),n}})})),lt.support.hrefNormalized||(lt.each(["href","src","width","height"],function(t,n){lt.attrHooks[n]=lt.extend(lt.attrHooks[n],{get:function(t){var i=t.getAttribute(n,2);return null==i?e:i}})}),lt.each(["href","src"],function(t,e){lt.propHooks[e]={get:function(t){return t.getAttribute(e,4)}}})),lt.support.style||(lt.attrHooks.style={get:function(t){return t.style.cssText||e},set:function(t,e){return t.style.cssText=e+""}}),lt.support.optSelected||(lt.propHooks.selected=lt.extend(lt.propHooks.selected,{get:function(t){var e=t.parentNode;return e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex),null}})),lt.support.enctype||(lt.propFix.enctype="encoding"),lt.support.checkOn||lt.each(["radio","checkbox"],function(){lt.valHooks[this]={get:function(t){return null===t.getAttribute("value")?"on":t.value}}}),lt.each(["radio","checkbox"],function(){lt.valHooks[this]=lt.extend(lt.valHooks[this],{set:function(t,e){if(lt.isArray(e))return t.checked=lt.inArray(lt(t).val(),e)>=0}})});var Rt=/^(?:input|select|textarea)$/i,Ft=/^key/,Vt=/^(?:mouse|contextmenu)|click/,jt=/^(?:focusinfocus|focusoutblur)$/,Gt=/^([^.]*)(?:\.(.+)|)$/;lt.event={global:{},add:function(t,n,i,r,a){var o,s,l,u,c,d,h,f,p,g,m,v=lt._data(t);if(v){for(i.handler&&(u=i,i=u.handler,a=u.selector),i.guid||(i.guid=lt.guid++),(s=v.events)||(s=v.events={}),(d=v.handle)||(d=v.handle=function(t){return typeof lt===q||t&<.event.triggered===t.type?e:lt.event.dispatch.apply(d.elem,arguments)},d.elem=t),n=(n||"").match(ct)||[""],l=n.length;l--;)o=Gt.exec(n[l])||[],p=m=o[1],g=(o[2]||"").split(".").sort(),c=lt.event.special[p]||{},p=(a?c.delegateType:c.bindType)||p,c=lt.event.special[p]||{},h=lt.extend({type:p,origType:m,data:r,handler:i,guid:i.guid,selector:a,needsContext:a&<.expr.match.needsContext.test(a),namespace:g.join(".")},u),(f=s[p])||(f=s[p]=[],f.delegateCount=0,c.setup&&c.setup.call(t,r,g,d)!==!1||(t.addEventListener?t.addEventListener(p,d,!1):t.attachEvent&&t.attachEvent("on"+p,d))),c.add&&(c.add.call(t,h),h.handler.guid||(h.handler.guid=i.guid)),a?f.splice(f.delegateCount++,0,h):f.push(h),lt.event.global[p]=!0;t=null}},remove:function(t,e,n,i,r){var a,o,s,l,u,c,d,h,f,p,g,m=lt.hasData(t)&<._data(t);if(m&&(c=m.events)){for(e=(e||"").match(ct)||[""],u=e.length;u--;)if(s=Gt.exec(e[u])||[],f=g=s[1],p=(s[2]||"").split(".").sort(),f){for(d=lt.event.special[f]||{},f=(i?d.delegateType:d.bindType)||f,h=c[f]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=a=h.length;a--;)o=h[a],!r&&g!==o.origType||n&&n.guid!==o.guid||s&&!s.test(o.namespace)||i&&i!==o.selector&&("**"!==i||!o.selector)||(h.splice(a,1),o.selector&&h.delegateCount--,d.remove&&d.remove.call(t,o));l&&!h.length&&(d.teardown&&d.teardown.call(t,p,m.handle)!==!1||lt.removeEvent(t,f,m.handle),delete c[f])}else for(f in c)lt.event.remove(t,f+e[u],n,i,!0);lt.isEmptyObject(c)&&(delete m.handle,lt._removeData(t,"events"))}},trigger:function(n,i,r,a){var o,s,l,u,c,d,h,f=[r||U],p=ot.call(n,"type")?n.type:n,g=ot.call(n,"namespace")?n.namespace.split("."):[];if(l=d=r=r||U,3!==r.nodeType&&8!==r.nodeType&&!jt.test(p+lt.event.triggered)&&(p.indexOf(".")>=0&&(g=p.split("."),p=g.shift(),g.sort()),s=p.indexOf(":")<0&&"on"+p,n=n[lt.expando]?n:new lt.Event(p,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=g.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=e,n.target||(n.target=r),i=null==i?[n]:lt.makeArray(i,[n]),c=lt.event.special[p]||{},a||!c.trigger||c.trigger.apply(r,i)!==!1)){if(!a&&!c.noBubble&&!lt.isWindow(r)){for(u=c.delegateType||p,jt.test(u+p)||(l=l.parentNode);l;l=l.parentNode)f.push(l),d=l;d===(r.ownerDocument||U)&&f.push(d.defaultView||d.parentWindow||t)}for(h=0;(l=f[h++])&&!n.isPropagationStopped();)n.type=h>1?u:c.bindType||p,o=(lt._data(l,"events")||{})[n.type]&<._data(l,"handle"),o&&o.apply(l,i),o=s&&l[s],o&<.acceptData(l)&&o.apply&&o.apply(l,i)===!1&&n.preventDefault();if(n.type=p,!a&&!n.isDefaultPrevented()&&(!c._default||c._default.apply(r.ownerDocument,i)===!1)&&("click"!==p||!lt.nodeName(r,"a"))&<.acceptData(r)&&s&&r[p]&&!lt.isWindow(r)){d=r[s],d&&(r[s]=null),lt.event.triggered=p;try{r[p]()}catch(m){}lt.event.triggered=e,d&&(r[s]=d)}return n.result}},dispatch:function(t){t=lt.event.fix(t);var n,i,r,a,o,s=[],l=it.call(arguments),u=(lt._data(this,"events")||{})[t.type]||[],c=lt.event.special[t.type]||{};if(l[0]=t,t.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,t)!==!1){for(s=lt.event.handlers.call(this,t,u),n=0;(a=s[n++])&&!t.isPropagationStopped();)for(t.currentTarget=a.elem,o=0;(r=a.handlers[o++])&&!t.isImmediatePropagationStopped();)t.namespace_re&&!t.namespace_re.test(r.namespace)||(t.handleObj=r,t.data=r.data,i=((lt.event.special[r.origType]||{}).handle||r.handler).apply(a.elem,l),i!==e&&(t.result=i)===!1&&(t.preventDefault(),t.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(t,n){var i,r,a,o,s=[],l=n.delegateCount,u=t.target;if(l&&u.nodeType&&(!t.button||"click"!==t.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==t.type)){for(a=[],o=0;o=0:lt.find(i,this,null,[u]).length),a[i]&&a.push(r);a.length&&s.push({elem:u,handlers:a})}return lT.cacheLength&&delete t[e.shift()],t[n]=i}}function r(t){return t[j]=!0,t}function a(t){var e=D.createElement("div");try{return t(e)}catch(n){return!1}finally{e=null}}function o(t,e,n,i){var r,a,o,s,l,u,c,f,p,g;if((e?e.ownerDocument||e:G)!==D&&E(e),e=e||D,n=n||[],!t||"string"!=typeof t)return n;if(1!==(s=e.nodeType)&&9!==s)return[];if(!L&&!i){if(r=gt.exec(t))if(o=r[1]){if(9===s){if(a=e.getElementById(o),!a||!a.parentNode)return n;if(a.id===o)return n.push(a),n}else if(e.ownerDocument&&(a=e.ownerDocument.getElementById(o))&&F(e,a)&&a.id===o)return n.push(a),n}else{if(r[2])return K.apply(n,Z.call(e.getElementsByTagName(t),0)),n;if((o=r[3])&&H.getByClassName&&e.getElementsByClassName)return K.apply(n,Z.call(e.getElementsByClassName(o),0)),n}if(H.qsa&&!I.test(t)){if(c=!0,f=j,p=e,g=9===s&&t,1===s&&"object"!==e.nodeName.toLowerCase()){for(u=d(t),(c=e.getAttribute("id"))?f=c.replace(yt,"\\$&"):e.setAttribute("id",f),f="[id='"+f+"'] ",l=u.length;l--;)u[l]=f+h(u[l]);p=ft.test(t)&&e.parentNode||e,g=u.join(",")}if(g)try{return K.apply(n,Z.call(p.querySelectorAll(g),0)),n}catch(m){}finally{c||e.removeAttribute("id")}}}return _(t.replace(ot,"$1"),e,n,i)}function s(t,e){var n=e&&t,i=n&&(~e.sourceIndex||U)-(~t.sourceIndex||U);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function l(t){return function(e){var n=e.nodeName.toLowerCase();return"input"===n&&e.type===t}}function u(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function c(t){return r(function(e){return e=+e,r(function(n,i){for(var r,a=t([],n.length,e),o=a.length;o--;)n[r=a[o]]&&(n[r]=!(i[r]=n[r]))})})}function d(t,e){var n,i,r,a,s,l,u,c=B[t+" "];if(c)return e?0:c.slice(0);for(s=t,l=[],u=T.preFilter;s;){n&&!(i=st.exec(s))||(i&&(s=s.slice(i[0].length)||s),l.push(r=[])),n=!1,(i=ut.exec(s))&&(n=i.shift(),r.push({value:n,type:i[0].replace(ot," ")}),s=s.slice(n.length));for(a in T.filter)!(i=ht[a].exec(s))||u[a]&&!(i=u[a](i))||(n=i.shift(),r.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return e?s.length:s?o.error(t):B(t,l).slice(0)}function h(t){for(var e=0,n=t.length,i="";e1?function(e,n,i){for(var r=t.length;r--;)if(!t[r](e,n,i))return!1;return!0}:t[0]}function g(t,e,n,i,r){for(var a,o=[],s=0,l=t.length,u=null!=e;s-1&&(r[u]=!(o[u]=d))}}else y=g(y===o?y.splice(p,y.length):y),a?a(null,o,y,l):K.apply(o,y)})}function v(t){for(var e,n,i,r=t.length,a=T.relative[t[0].type],o=a||T.relative[" "],s=a?1:0,l=f(function(t){return t===e},o,!0),u=f(function(t){return J.call(e,t)>-1},o,!0),c=[function(t,n,i){return!a&&(i||n!==M)||((e=n).nodeType?l(t,n,i):u(t,n,i))}];s1&&p(c),s>1&&h(t.slice(0,s-1)).replace(ot,"$1"),n,s0,a=t.length>0,s=function(r,s,l,u,c){var d,h,f,p=[],m=0,v="0",y=r&&[],x=null!=c,_=M,b=r||a&&T.find.TAG("*",c&&s.parentNode||s),w=$+=null==_?1:Math.random()||.1;for(x&&(M=s!==D&&s,S=n);null!=(d=b[v]);v++){if(a&&d){for(h=0;f=t[h++];)if(f(d,s,l)){u.push(d);break}x&&($=w,S=++n)}i&&((d=!f&&d)&&m--,r&&y.push(d))}if(m+=v,i&&v!==m){for(h=0;f=e[h++];)f(y,p,s,l);if(r){if(m>0)for(;v--;)y[v]||p[v]||(p[v]=Q.call(u));p=g(p)}K.apply(u,p),x&&!r&&p.length>0&&m+e.length>1&&o.uniqueSort(u)}return x&&($=w,M=_),y};return i?r(s):s}function x(t,e,n){for(var i=0,r=e.length;i2&&"ID"===(o=a[0]).type&&9===e.nodeType&&!L&&T.relative[a[1].type]){if(e=T.find.ID(o.matches[0].replace(_t,bt),e)[0],!e)return n;t=t.slice(a.shift().value.length)}for(r=ht.needsContext.test(t)?0:a.length;r--&&(o=a[r],!T.relative[s=o.type]);)if((l=T.find[s])&&(i=l(o.matches[0].replace(_t,bt),ft.test(a[0].type)&&e.parentNode||e))){if(a.splice(r,1),t=i.length&&h(a),!t)return K.apply(n,Z.call(i,0)),n;break}}return k(t,u)(i,e,L,n,ft.test(t)),n}function b(){}var w,S,T,C,A,k,P,M,E,D,O,L,I,N,R,F,V,j="sizzle"+-new Date,G=t.document,H={},$=0,z=0,Y=i(),B=i(),X=i(),q=typeof e,U=1<<31,W=[],Q=W.pop,K=W.push,Z=W.slice,J=W.indexOf||function(t){for(var e=0,n=this.length;e+~])"+tt+"*"),ct=new RegExp(at),dt=new RegExp("^"+nt+"$"),ht={ID:new RegExp("^#("+et+")"),CLASS:new RegExp("^\\.("+et+")"),NAME:new RegExp("^\\[name=['\"]?("+et+")['\"]?\\]"),TAG:new RegExp("^("+et.replace("w","w*")+")"),ATTR:new RegExp("^"+rt),PSEUDO:new RegExp("^"+at),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+tt+"*(even|odd|(([+-]|)(\\d*)n|)"+tt+"*(?:([+-]|)"+tt+"*(\\d+)|))"+tt+"*\\)|)","i"),needsContext:new RegExp("^"+tt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+tt+"*((?:-\\d)?\\d*)"+tt+"*\\)|)(?=[^-]|$)","i")},ft=/[\x20\t\r\n\f]*[+~]/,pt=/^[^{]+\{\s*\[native code/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/^(?:input|select|textarea|button)$/i,vt=/^h\d$/i,yt=/'|\\/g,xt=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,_t=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,bt=function(t,e){var n="0x"+e-65536;return n!==n?e:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)};try{Z.call(G.documentElement.childNodes,0)[0].nodeType}catch(wt){Z=function(t){for(var e,n=[];e=this[t++];)n.push(e);return n}}A=o.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},E=o.setDocument=function(t){var i=t?t.ownerDocument||t:G;return i!==D&&9===i.nodeType&&i.documentElement?(D=i,O=i.documentElement,L=A(i),H.tagNameNoComments=a(function(t){return t.appendChild(i.createComment("")),!t.getElementsByTagName("*").length}),H.attributes=a(function(t){t.innerHTML="";var e=typeof t.lastChild.getAttribute("multiple");return"boolean"!==e&&"string"!==e}),H.getByClassName=a(function(t){return t.innerHTML="",!(!t.getElementsByClassName||!t.getElementsByClassName("e").length)&&(t.lastChild.className="e",2===t.getElementsByClassName("e").length)}),H.getByName=a(function(t){t.id=j+0,t.innerHTML="
    ",O.insertBefore(t,O.firstChild);var e=i.getElementsByName&&i.getElementsByName(j).length===2+i.getElementsByName(j+0).length;return H.getIdNotName=!i.getElementById(j),O.removeChild(t),e}),T.attrHandle=a(function(t){return t.innerHTML="",t.firstChild&&typeof t.firstChild.getAttribute!==q&&"#"===t.firstChild.getAttribute("href")})?{}:{href:function(t){return t.getAttribute("href",2)},type:function(t){return t.getAttribute("type")}},H.getIdNotName?(T.find.ID=function(t,e){if(typeof e.getElementById!==q&&!L){var n=e.getElementById(t);return n&&n.parentNode?[n]:[]}},T.filter.ID=function(t){var e=t.replace(_t,bt);return function(t){return t.getAttribute("id")===e}}):(T.find.ID=function(t,n){if(typeof n.getElementById!==q&&!L){var i=n.getElementById(t);return i?i.id===t||typeof i.getAttributeNode!==q&&i.getAttributeNode("id").value===t?[i]:e:[]}},T.filter.ID=function(t){var e=t.replace(_t,bt);return function(t){var n=typeof t.getAttributeNode!==q&&t.getAttributeNode("id");return n&&n.value===e}}),T.find.TAG=H.tagNameNoComments?function(t,e){if(typeof e.getElementsByTagName!==q)return e.getElementsByTagName(t)}:function(t,e){var n,i=[],r=0,a=e.getElementsByTagName(t);if("*"===t){for(;n=a[r++];)1===n.nodeType&&i.push(n);return i}return a},T.find.NAME=H.getByName&&function(t,e){if(typeof e.getElementsByName!==q)return e.getElementsByName(name)},T.find.CLASS=H.getByClassName&&function(t,e){if(typeof e.getElementsByClassName!==q&&!L)return e.getElementsByClassName(t)},N=[],I=[":focus"],(H.qsa=n(i.querySelectorAll))&&(a(function(t){t.innerHTML="",t.querySelectorAll("[selected]").length||I.push("\\["+tt+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),t.querySelectorAll(":checked").length||I.push(":checked")}),a(function(t){t.innerHTML="",t.querySelectorAll("[i^='']").length&&I.push("[*^$]="+tt+"*(?:\"\"|'')"),t.querySelectorAll(":enabled").length||I.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),I.push(",.*:")})),(H.matchesSelector=n(R=O.matchesSelector||O.mozMatchesSelector||O.webkitMatchesSelector||O.oMatchesSelector||O.msMatchesSelector))&&a(function(t){H.disconnectedMatch=R.call(t,"div"),R.call(t,"[s!='']:x"),N.push("!=",at)}),I=new RegExp(I.join("|")),N=new RegExp(N.join("|")),F=n(O.contains)||O.compareDocumentPosition?function(t,e){var n=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},V=O.compareDocumentPosition?function(t,e){var n;return t===e?(P=!0,0):(n=e.compareDocumentPosition&&t.compareDocumentPosition&&t.compareDocumentPosition(e))?1&n||t.parentNode&&11===t.parentNode.nodeType?t===i||F(G,t)?-1:e===i||F(G,e)?1:0:4&n?-1:1:t.compareDocumentPosition?-1:1}:function(t,e){var n,r=0,a=t.parentNode,o=e.parentNode,l=[t],u=[e];if(t===e)return P=!0,0;if(!a||!o)return t===i?-1:e===i?1:a?-1:o?1:0;if(a===o)return s(t,e);for(n=t;n=n.parentNode;)l.unshift(n);for(n=e;n=n.parentNode;)u.unshift(n);for(;l[r]===u[r];)r++;return r?s(l[r],u[r]):l[r]===G?-1:u[r]===G?1:0},P=!1,[0,0].sort(V),H.detectDuplicates=P,D):D},o.matches=function(t,e){return o(t,null,null,e)},o.matchesSelector=function(t,e){if((t.ownerDocument||t)!==D&&E(t),e=e.replace(xt,"='$1']"),H.matchesSelector&&!L&&(!N||!N.test(e))&&!I.test(e))try{var n=R.call(t,e);if(n||H.disconnectedMatch||t.document&&11!==t.document.nodeType)return n}catch(i){}return o(e,D,null,[t]).length>0},o.contains=function(t,e){return(t.ownerDocument||t)!==D&&E(t),F(t,e)},o.attr=function(t,e){var n;return(t.ownerDocument||t)!==D&&E(t),L||(e=e.toLowerCase()),(n=T.attrHandle[e])?n(t):L||H.attributes?t.getAttribute(e):((n=t.getAttributeNode(e))||t.getAttribute(e))&&t[e]===!0?e:n&&n.specified?n.value:null},o.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},o.uniqueSort=function(t){var e,n=[],i=1,r=0;if(P=!H.detectDuplicates,t.sort(V),P){for(;e=t[i];i++)e===t[i-1]&&(r=n.push(i));for(;r--;)t.splice(n[r],1)}return t},C=o.getText=function(t){var e,n="",i=0,r=t.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=C(t)}else if(3===r||4===r)return t.nodeValue}else for(;e=t[i];i++)n+=C(e);return n},T=o.selectors={cacheLength:50,createPseudo:r,match:ht,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(_t,bt),t[3]=(t[4]||t[5]||"").replace(_t,bt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||o.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&o.error(t[0]),t},PSEUDO:function(t){var e,n=!t[5]&&t[2];return ht.CHILD.test(t[0])?null:(t[4]?t[2]=t[4]:n&&ct.test(n)&&(e=d(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){return"*"===t?function(){return!0}:(t=t.replace(_t,bt).toLowerCase(),function(e){return e.nodeName&&e.nodeName.toLowerCase()===t})},CLASS:function(t){var e=Y[t+" "];return e||(e=new RegExp("(^|"+tt+")"+t+"("+tt+"|$)"))&&Y(t,function(t){return e.test(t.className||typeof t.getAttribute!==q&&t.getAttribute("class")||"")})},ATTR:function(t,e,n){return function(i){var r=o.attr(i,t);return null==r?"!="===e:!e||(r+="","="===e?r===n:"!="===e?r!==n:"^="===e?n&&0===r.indexOf(n):"*="===e?n&&r.indexOf(n)>-1:"$="===e?n&&r.slice(-n.length)===n:"~="===e?(" "+r+" ").indexOf(n)>-1:"|="===e&&(r===n||r.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,n,i,r){var a="nth"!==t.slice(0,3),o="last"!==t.slice(-4),s="of-type"===e;return 1===i&&0===r?function(t){return!!t.parentNode}:function(e,n,l){var u,c,d,h,f,p,g=a!==o?"nextSibling":"previousSibling",m=e.parentNode,v=s&&e.nodeName.toLowerCase(),y=!l&&!s;if(m){if(a){for(;g;){for(d=e;d=d[g];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=g="only"===t&&!p&&"nextSibling"}return!0}if(p=[o?m.firstChild:m.lastChild],o&&y){for(c=m[j]||(m[j]={}),u=c[t]||[],f=u[0]===$&&u[1],h=u[0]===$&&u[2],d=f&&m.childNodes[f];d=++f&&d&&d[g]||(h=f=0)||p.pop();)if(1===d.nodeType&&++h&&d===e){c[t]=[$,f,h];break}}else if(y&&(u=(e[j]||(e[j]={}))[t])&&u[0]===$)h=u[1];else for(;(d=++f&&d&&d[g]||(h=f=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++h||(y&&((d[j]||(d[j]={}))[t]=[$,h]),d!==e)););return h-=r,h===i||h%i===0&&h/i>=0}}},PSEUDO:function(t,e){var n,i=T.pseudos[t]||T.setFilters[t.toLowerCase()]||o.error("unsupported pseudo: "+t);return i[j]?i(e):i.length>1?(n=[t,t,"",e],T.setFilters.hasOwnProperty(t.toLowerCase())?r(function(t,n){for(var r,a=i(t,e),o=a.length;o--;)r=J.call(t,a[o]),t[r]=!(n[r]=a[o])}):function(t){return i(t,0,n)}):i}},pseudos:{not:r(function(t){var e=[],n=[],i=k(t.replace(ot,"$1"));return i[j]?r(function(t,e,n,r){for(var a,o=i(t,null,r,[]),s=t.length;s--;)(a=o[s])&&(t[s]=!(e[s]=a))}):function(t,r,a){return e[0]=t,i(e,null,a,n),!n.pop()}}),has:r(function(t){return function(e){return o(t,e).length>0}}),contains:r(function(t){return function(e){return(e.textContent||e.innerText||C(e)).indexOf(t)>-1}}),lang:r(function(t){return dt.test(t||"")||o.error("unsupported lang: "+t),t=t.replace(_t,bt).toLowerCase(),function(e){var n;do if(n=L?e.getAttribute("xml:lang")||e.getAttribute("lang"):e.lang)return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===O},focus:function(t){return t===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeName>"@"||3===t.nodeType||4===t.nodeType)return!1;return!0},parent:function(t){return!T.pseudos.empty(t)},header:function(t){return vt.test(t.nodeName)},input:function(t){return mt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||e.toLowerCase()===t.type)},first:c(function(){return[0]}),last:c(function(t,e){return[e-1]}),eq:c(function(t,e,n){return[n<0?n+e:n]}),even:c(function(t,e){for(var n=0;n=0;)t.push(i);return t}),gt:c(function(t,e,n){for(var i=n<0?n+e:n;++i1?lt.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+t,n},has:function(t){var e,n=lt(t,this),i=n.length;return this.filter(function(){for(e=0;e=0:lt.filter(t,this).length>0:this.filter(t).length>0)},closest:function(t,e){for(var n,i=0,r=this.length,a=[],o=Yt.test(t)||"string"!=typeof t?lt(t,e||this.context):0;i-1:lt.find.matchesSelector(n,t)){a.push(n);break}n=n.parentNode}return this.pushStack(a.length>1?lt.unique(a):a)},index:function(t){return t?"string"==typeof t?lt.inArray(this[0],lt(t)):lt.inArray(t.jquery?t[0]:t,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){var n="string"==typeof t?lt(t,e):lt.makeArray(t&&t.nodeType?[t]:t),i=lt.merge(this.get(),n);return this.pushStack(lt.unique(i))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),lt.fn.andSelf=lt.fn.addBack,lt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return lt.dir(t,"parentNode")},parentsUntil:function(t,e,n){return lt.dir(t,"parentNode",n)},next:function(t){return c(t,"nextSibling")},prev:function(t){return c(t,"previousSibling"); -},nextAll:function(t){return lt.dir(t,"nextSibling")},prevAll:function(t){return lt.dir(t,"previousSibling")},nextUntil:function(t,e,n){return lt.dir(t,"nextSibling",n)},prevUntil:function(t,e,n){return lt.dir(t,"previousSibling",n)},siblings:function(t){return lt.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return lt.sibling(t.firstChild)},contents:function(t){return lt.nodeName(t,"iframe")?t.contentDocument||t.contentWindow.document:lt.merge([],t.childNodes)}},function(t,e){lt.fn[t]=function(n,i){var r=lt.map(this,e,n);return Ht.test(t)||(i=n),i&&"string"==typeof i&&(r=lt.filter(i,r)),r=this.length>1&&!Bt[t]?lt.unique(r):r,this.length>1&&$t.test(t)&&(r=r.reverse()),this.pushStack(r)}}),lt.extend({filter:function(t,e,n){return n&&(t=":not("+t+")"),1===e.length?lt.find.matchesSelector(e[0],t)?[e[0]]:[]:lt.find.matches(t,e)},dir:function(t,n,i){for(var r=[],a=t[n];a&&9!==a.nodeType&&(i===e||1!==a.nodeType||!lt(a).is(i));)1===a.nodeType&&r.push(a),a=a[n];return r},sibling:function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n}});var Xt="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",qt=/ jQuery\d+="(?:null|\d+)"/g,Ut=new RegExp("<(?:"+Xt+")[\\s/>]","i"),Wt=/^\s+/,Qt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Kt=/<([\w:]+)/,Zt=/
    ","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:lt.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},se=h(U),le=se.appendChild(U.createElement("div"));oe.optgroup=oe.option,oe.tbody=oe.tfoot=oe.colgroup=oe.caption=oe.thead,oe.th=oe.td,lt.fn.extend({text:function(t){return lt.access(this,function(t){return t===e?lt.text(this):this.empty().append((this[0]&&this[0].ownerDocument||U).createTextNode(t))},null,t,arguments.length)},wrapAll:function(t){if(lt.isFunction(t))return this.each(function(e){lt(this).wrapAll(t.call(this,e))});if(this[0]){var e=lt(t,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstChild&&1===t.firstChild.nodeType;)t=t.firstChild;return t}).append(this)}return this},wrapInner:function(t){return lt.isFunction(t)?this.each(function(e){lt(this).wrapInner(t.call(this,e))}):this.each(function(){var e=lt(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=lt.isFunction(t);return this.each(function(n){lt(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(){return this.parent().each(function(){lt.nodeName(this,"body")||lt(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||this.appendChild(t)})},prepend:function(){return this.domManip(arguments,!0,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||this.insertBefore(t,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,!1,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var n,i=0;null!=(n=this[i]);i++)(!t||lt.filter(t,[n]).length>0)&&(e||1!==n.nodeType||lt.cleanData(x(n)),n.parentNode&&(e&<.contains(n.ownerDocument,n)&&m(x(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++){for(1===t.nodeType&<.cleanData(x(t,!1));t.firstChild;)t.removeChild(t.firstChild);t.options&<.nodeName(t,"select")&&(t.options.length=0)}return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return lt.clone(this,t,e)})},html:function(t){return lt.access(this,function(t){var n=this[0]||{},i=0,r=this.length;if(t===e)return 1===n.nodeType?n.innerHTML.replace(qt,""):e;if("string"==typeof t&&!te.test(t)&&(lt.support.htmlSerialize||!Ut.test(t))&&(lt.support.leadingWhitespace||!Wt.test(t))&&!oe[(Kt.exec(t)||["",""])[1].toLowerCase()]){t=t.replace(Qt,"<$1>");try{for(;i")?a=t.cloneNode(!0):(le.innerHTML=t.outerHTML,le.removeChild(a=le.firstChild)),!(lt.support.noCloneEvent&<.support.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||lt.isXMLDoc(t)))for(i=x(a),s=x(t),o=0;null!=(r=s[o]);++o)i[o]&&y(r,i[o]);if(e)if(n)for(s=s||x(t),i=i||x(a),o=0;null!=(r=s[o]);o++)v(r,i[o]);else v(t,a);return i=x(a,"script"),i.length>0&&m(i,!l&&x(t,"script")),i=s=r=null,a},buildFragment:function(t,e,n,i){for(var r,a,o,s,l,u,c,d=t.length,f=h(e),p=[],g=0;g")+c[2],r=c[0];r--;)s=s.lastChild;if(!lt.support.leadingWhitespace&&Wt.test(a)&&p.push(e.createTextNode(Wt.exec(a)[0])),!lt.support.tbody)for(a="table"!==l||Zt.test(a)?""!==c[1]||Zt.test(a)?0:s:s.firstChild,r=a&&a.childNodes.length;r--;)lt.nodeName(u=a.childNodes[r],"tbody")&&!u.childNodes.length&&a.removeChild(u);for(lt.merge(p,s.childNodes),s.textContent="";s.firstChild;)s.removeChild(s.firstChild);s=f.lastChild}else p.push(e.createTextNode(a));for(s&&f.removeChild(s),lt.support.appendChecked||lt.grep(x(p,"input"),_),g=0;a=p[g++];)if((!i||lt.inArray(a,i)===-1)&&(o=lt.contains(a.ownerDocument,a),s=x(f.appendChild(a),"script"),o&&m(s),n))for(r=0;a=s[r++];)ie.test(a.type||"")&&n.push(a);return s=null,f},cleanData:function(t,e){for(var n,i,r,a,o=0,s=lt.expando,l=lt.cache,u=lt.support.deleteExpando,c=lt.event.special;null!=(n=t[o]);o++)if((e||lt.acceptData(n))&&(r=n[s],a=r&&l[r])){if(a.events)for(i in a.events)c[i]?lt.event.remove(n,i):lt.removeEvent(n,i,a.handle);l[r]&&(delete l[r],u?delete n[s]:typeof n.removeAttribute!==q?n.removeAttribute(s):n[s]=null,J.push(r))}}});var ue,ce,de,he=/alpha\([^)]*\)/i,fe=/opacity\s*=\s*([^)]*)/,pe=/^(top|right|bottom|left)$/,ge=/^(none|table(?!-c[ea]).+)/,me=/^margin/,ve=new RegExp("^("+ut+")(.*)$","i"),ye=new RegExp("^("+ut+")(?!px)[a-z%]+$","i"),xe=new RegExp("^([+-])=("+ut+")","i"),_e={BODY:"block"},be={position:"absolute",visibility:"hidden",display:"block"},we={letterSpacing:0,fontWeight:400},Se=["Top","Right","Bottom","Left"],Te=["Webkit","O","Moz","ms"];lt.fn.extend({css:function(t,n){return lt.access(this,function(t,n,i){var r,a,o={},s=0;if(lt.isArray(n)){for(a=ce(t),r=n.length;s1)},show:function(){return S(this,!0)},hide:function(){return S(this)},toggle:function(t){var e="boolean"==typeof t;return this.each(function(){(e?t:w(this))?lt(this).show():lt(this).hide()})}}),lt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=de(t,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":lt.support.cssFloat?"cssFloat":"styleFloat"},style:function(t,n,i,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var a,o,s,l=lt.camelCase(n),u=t.style;if(n=lt.cssProps[l]||(lt.cssProps[l]=b(u,l)),s=lt.cssHooks[n]||lt.cssHooks[l],i===e)return s&&"get"in s&&(a=s.get(t,!1,r))!==e?a:u[n];if(o=typeof i,"string"===o&&(a=xe.exec(i))&&(i=(a[1]+1)*a[2]+parseFloat(lt.css(t,n)),o="number"),!(null==i||"number"===o&&isNaN(i)||("number"!==o||lt.cssNumber[l]||(i+="px"),lt.support.clearCloneStyle||""!==i||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(i=s.set(t,i,r))===e)))try{u[n]=i}catch(c){}}},css:function(t,n,i,r){var a,o,s,l=lt.camelCase(n);return n=lt.cssProps[l]||(lt.cssProps[l]=b(t.style,l)),s=lt.cssHooks[n]||lt.cssHooks[l],s&&"get"in s&&(o=s.get(t,!0,i)),o===e&&(o=de(t,n,r)),"normal"===o&&n in we&&(o=we[n]),""===i||i?(a=parseFloat(o),i===!0||lt.isNumeric(a)?a||0:o):o},swap:function(t,e,n,i){var r,a,o={};for(a in e)o[a]=t.style[a],t.style[a]=e[a];r=n.apply(t,i||[]);for(a in e)t.style[a]=o[a];return r}}),t.getComputedStyle?(ce=function(e){return t.getComputedStyle(e,null)},de=function(t,n,i){var r,a,o,s=i||ce(t),l=s?s.getPropertyValue(n)||s[n]:e,u=t.style;return s&&(""!==l||lt.contains(t.ownerDocument,t)||(l=lt.style(t,n)),ye.test(l)&&me.test(n)&&(r=u.width,a=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=r,u.minWidth=a,u.maxWidth=o)),l}):U.documentElement.currentStyle&&(ce=function(t){return t.currentStyle},de=function(t,n,i){var r,a,o,s=i||ce(t),l=s?s[n]:e,u=t.style;return null==l&&u&&u[n]&&(l=u[n]),ye.test(l)&&!pe.test(n)&&(r=u.left,a=t.runtimeStyle,o=a&&a.left,o&&(a.left=t.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=r,o&&(a.left=o)),""===l?"auto":l}),lt.each(["height","width"],function(t,e){lt.cssHooks[e]={get:function(t,n,i){if(n)return 0===t.offsetWidth&&ge.test(lt.css(t,"display"))?lt.swap(t,be,function(){return A(t,e,i)}):A(t,e,i)},set:function(t,n,i){var r=i&&ce(t);return T(t,n,i?C(t,e,i,lt.support.boxSizing&&"border-box"===lt.css(t,"boxSizing",!1,r),r):0)}}}),lt.support.opacity||(lt.cssHooks.opacity={get:function(t,e){return fe.test((e&&t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":e?"1":""},set:function(t,e){var n=t.style,i=t.currentStyle,r=lt.isNumeric(e)?"alpha(opacity="+100*e+")":"",a=i&&i.filter||n.filter||"";n.zoom=1,(e>=1||""===e)&&""===lt.trim(a.replace(he,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===e||i&&!i.filter)||(n.filter=he.test(a)?a.replace(he,r):a+" "+r)}}),lt(function(){lt.support.reliableMarginRight||(lt.cssHooks.marginRight={get:function(t,e){if(e)return lt.swap(t,{display:"inline-block"},de,[t,"marginRight"])}}),!lt.support.pixelPosition&<.fn.position&<.each(["top","left"],function(t,e){lt.cssHooks[e]={get:function(t,n){if(n)return n=de(t,e),ye.test(n)?lt(t).position()[e]+"px":n}}})}),lt.expr&<.expr.filters&&(lt.expr.filters.hidden=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0||!lt.support.reliableHiddenOffsets&&"none"===(t.style&&t.style.display||lt.css(t,"display"))},lt.expr.filters.visible=function(t){return!lt.expr.filters.hidden(t)}),lt.each({margin:"",padding:"",border:"Width"},function(t,e){lt.cssHooks[t+e]={expand:function(n){for(var i=0,r={},a="string"==typeof n?n.split(" "):[n];i<4;i++)r[t+Se[i]+e]=a[i]||a[i-2]||a[0];return r}},me.test(t)||(lt.cssHooks[t+e].set=T)});var Ce=/%20/g,Ae=/\[\]$/,ke=/\r?\n/g,Pe=/^(?:submit|button|image|reset|file)$/i,Me=/^(?:input|select|textarea|keygen)/i;lt.fn.extend({serialize:function(){return lt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=lt.prop(this,"elements");return t?lt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!lt(this).is(":disabled")&&Me.test(this.nodeName)&&!Pe.test(t)&&(this.checked||!ee.test(t))}).map(function(t,e){var n=lt(this).val();return null==n?null:lt.isArray(n)?lt.map(n,function(t){return{name:e.name,value:t.replace(ke,"\r\n")}}):{name:e.name,value:n.replace(ke,"\r\n")}}).get()}}),lt.param=function(t,n){var i,r=[],a=function(t,e){e=lt.isFunction(e)?e():null==e?"":e,r[r.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(n===e&&(n=lt.ajaxSettings&<.ajaxSettings.traditional),lt.isArray(t)||t.jquery&&!lt.isPlainObject(t))lt.each(t,function(){a(this.name,this.value)});else for(i in t)M(i,t[i],n,a);return r.join("&").replace(Ce,"+")},lt.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){lt.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),lt.fn.hover=function(t,e){return this.mouseenter(t).mouseleave(e||t)};var Ee,De,Oe=lt.now(),Le=/\?/,Ie=/#.*$/,Ne=/([?&])_=[^&]*/,Re=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Fe=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ve=/^(?:GET|HEAD)$/,je=/^\/\//,Ge=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,He=lt.fn.load,$e={},ze={},Ye="*/".concat("*");try{De=W.href}catch(Be){De=U.createElement("a"),De.href="",De=De.href}Ee=Ge.exec(De.toLowerCase())||[],lt.fn.load=function(t,n,i){if("string"!=typeof t&&He)return He.apply(this,arguments);var r,a,o,s=this,l=t.indexOf(" ");return l>=0&&(r=t.slice(l,t.length),t=t.slice(0,l)),lt.isFunction(n)?(i=n,n=e):n&&"object"==typeof n&&(o="POST"),s.length>0&<.ajax({url:t,type:o,dataType:"html",data:n}).done(function(t){a=arguments,s.html(r?lt("
    ").append(lt.parseHTML(t)).find(r):t)}).complete(i&&function(t,e){s.each(i,a||[t.responseText,e,t])}),this},lt.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){lt.fn[e]=function(t){return this.on(e,t)}}),lt.each(["get","post"],function(t,n){lt[n]=function(t,i,r,a){return lt.isFunction(i)&&(a=a||r,r=i,i=e),lt.ajax({url:t,type:n,dataType:a,data:i,success:r})}}),lt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:De,type:"GET",isLocal:Fe.test(Ee[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ye,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":t.String,"text html":!0,"text json":lt.parseJSON,"text xml":lt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?O(O(t,lt.ajaxSettings),e):O(lt.ajaxSettings,t)},ajaxPrefilter:E($e),ajaxTransport:E(ze),ajax:function(t,n){function i(t,n,i,r){var a,d,y,x,b,S=n;2!==_&&(_=2,l&&clearTimeout(l),c=e,s=r||"",w.readyState=t>0?4:0,i&&(x=L(h,w,i)),t>=200&&t<300||304===t?(h.ifModified&&(b=w.getResponseHeader("Last-Modified"),b&&(lt.lastModified[o]=b),b=w.getResponseHeader("etag"),b&&(lt.etag[o]=b)),204===t?(a=!0,S="nocontent"):304===t?(a=!0,S="notmodified"):(a=I(h,x),S=a.state,d=a.data,y=a.error,a=!y)):(y=S,!t&&S||(S="error",t<0&&(t=0))),w.status=t,w.statusText=(n||S)+"",a?g.resolveWith(f,[d,S,w]):g.rejectWith(f,[w,S,y]),w.statusCode(v),v=e,u&&p.trigger(a?"ajaxSuccess":"ajaxError",[w,h,a?d:y]),m.fireWith(f,[w,S]),u&&(p.trigger("ajaxComplete",[w,h]),--lt.active||lt.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=e),n=n||{};var r,a,o,s,l,u,c,d,h=lt.ajaxSetup({},n),f=h.context||h,p=h.context&&(f.nodeType||f.jquery)?lt(f):lt.event,g=lt.Deferred(),m=lt.Callbacks("once memory"),v=h.statusCode||{},y={},x={},_=0,b="canceled",w={readyState:0,getResponseHeader:function(t){var e;if(2===_){if(!d)for(d={};e=Re.exec(s);)d[e[1].toLowerCase()]=e[2];e=d[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===_?s:null},setRequestHeader:function(t,e){var n=t.toLowerCase();return _||(t=x[n]=x[n]||t,y[t]=e),this},overrideMimeType:function(t){return _||(h.mimeType=t),this},statusCode:function(t){var e;if(t)if(_<2)for(e in t)v[e]=[v[e],t[e]];else w.always(t[w.status]);return this},abort:function(t){var e=t||b;return c&&c.abort(e),i(0,e),this}};if(g.promise(w).complete=m.add,w.success=w.done,w.error=w.fail,h.url=((t||h.url||De)+"").replace(Ie,"").replace(je,Ee[1]+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=lt.trim(h.dataType||"*").toLowerCase().match(ct)||[""],null==h.crossDomain&&(r=Ge.exec(h.url.toLowerCase()),h.crossDomain=!(!r||r[1]===Ee[1]&&r[2]===Ee[2]&&(r[3]||("http:"===r[1]?80:443))==(Ee[3]||("http:"===Ee[1]?80:443)))),h.data&&h.processData&&"string"!=typeof h.data&&(h.data=lt.param(h.data,h.traditional)),D($e,h,n,w),2===_)return w;u=h.global,u&&0===lt.active++&<.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Ve.test(h.type),o=h.url,h.hasContent||(h.data&&(o=h.url+=(Le.test(o)?"&":"?")+h.data,delete h.data),h.cache===!1&&(h.url=Ne.test(o)?o.replace(Ne,"$1_="+Oe++):o+(Le.test(o)?"&":"?")+"_="+Oe++)),h.ifModified&&(lt.lastModified[o]&&w.setRequestHeader("If-Modified-Since",lt.lastModified[o]),lt.etag[o]&&w.setRequestHeader("If-None-Match",lt.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&w.setRequestHeader("Content-Type",h.contentType),w.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Ye+"; q=0.01":""):h.accepts["*"]);for(a in h.headers)w.setRequestHeader(a,h.headers[a]);if(h.beforeSend&&(h.beforeSend.call(f,w,h)===!1||2===_))return w.abort();b="abort";for(a in{success:1,error:1,complete:1})w[a](h[a]);if(c=D(ze,h,n,w)){w.readyState=1,u&&p.trigger("ajaxSend",[w,h]),h.async&&h.timeout>0&&(l=setTimeout(function(){w.abort("timeout")},h.timeout));try{_=1,c.send(y,i)}catch(S){if(!(_<2))throw S;i(-1,S)}}else i(-1,"No Transport");return w},getScript:function(t,n){return lt.get(t,e,n,"script")},getJSON:function(t,e,n){return lt.get(t,e,n,"json")}}),lt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(t){return lt.globalEval(t),t}}}),lt.ajaxPrefilter("script",function(t){t.cache===e&&(t.cache=!1),t.crossDomain&&(t.type="GET",t.global=!1)}),lt.ajaxTransport("script",function(t){if(t.crossDomain){var n,i=U.head||lt("head")[0]||U.documentElement;return{send:function(e,r){n=U.createElement("script"),n.async=!0,t.scriptCharset&&(n.charset=t.scriptCharset),n.src=t.url,n.onload=n.onreadystatechange=function(t,e){(e||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,e||r(200,"success"))},i.insertBefore(n,i.firstChild)},abort:function(){n&&n.onload(e,!0)}}}});var Xe=[],qe=/(=)\?(?=&|$)|\?\?/;lt.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=Xe.pop()||lt.expando+"_"+Oe++;return this[t]=!0,t}}),lt.ajaxPrefilter("json jsonp",function(n,i,r){var a,o,s,l=n.jsonp!==!1&&(qe.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&qe.test(n.data)&&"data");if(l||"jsonp"===n.dataTypes[0])return a=n.jsonpCallback=lt.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(qe,"$1"+a):n.jsonp!==!1&&(n.url+=(Le.test(n.url)?"&":"?")+n.jsonp+"="+a),n.converters["script json"]=function(){return s||lt.error(a+" was not called"),s[0]},n.dataTypes[0]="json",o=t[a],t[a]=function(){s=arguments},r.always(function(){t[a]=o,n[a]&&(n.jsonpCallback=i.jsonpCallback,Xe.push(a)),s&<.isFunction(o)&&o(s[0]),s=o=e}),"script"});var Ue,We,Qe=0,Ke=t.ActiveXObject&&function(){var t;for(t in Ue)Ue[t](e,!0)};lt.ajaxSettings.xhr=t.ActiveXObject?function(){return!this.isLocal&&N()||R()}:N,We=lt.ajaxSettings.xhr(),lt.support.cors=!!We&&"withCredentials"in We,We=lt.support.ajax=!!We,We&<.ajaxTransport(function(n){if(!n.crossDomain||lt.support.cors){var i;return{send:function(r,a){var o,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest");try{for(s in r)l.setRequestHeader(s,r[s])}catch(u){}l.send(n.hasContent&&n.data||null),i=function(t,r){var s,u,c,d;try{if(i&&(r||4===l.readyState))if(i=e,o&&(l.onreadystatechange=lt.noop,Ke&&delete Ue[o]),r)4!==l.readyState&&l.abort();else{d={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(d.text=l.responseText);try{c=l.statusText}catch(h){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=d.text?200:404}}catch(f){r||a(-1,f)}d&&a(s,c,d,u)},n.async?4===l.readyState?setTimeout(i):(o=++Qe,Ke&&(Ue||(Ue={},lt(t).unload(Ke)),Ue[o]=i),l.onreadystatechange=i):i()},abort:function(){i&&i(e,!0)}}}});var Ze,Je,tn=/^(?:toggle|show|hide)$/,en=new RegExp("^(?:([+-])=|)("+ut+")([a-z%]*)$","i"),nn=/queueHooks$/,rn=[H],an={"*":[function(t,e){var n,i,r=this.createTween(t,e),a=en.exec(e),o=r.cur(),s=+o||0,l=1,u=20;if(a){if(n=+a[2],i=a[3]||(lt.cssNumber[t]?"":"px"),"px"!==i&&s){s=lt.css(r.elem,t,!0)||n||1;do l=l||".5",s/=l,lt.style(r.elem,t,s+i);while(l!==(l=r.cur()/o)&&1!==l&&--u)}r.unit=i,r.start=s,r.end=a[1]?s+(a[1]+1)*n:n}return r}]};lt.Animation=lt.extend(j,{tweener:function(t,e){lt.isFunction(t)?(e=t,t=["*"]):t=t.split(" ");for(var n,i=0,r=t.length;i-1,d={},h={};c?(h=o.position(),r=h.top,a=h.left):(r=parseFloat(l)||0,a=parseFloat(u)||0),lt.isFunction(e)&&(e=e.call(t,n,s)),null!=e.top&&(d.top=e.top-s.top+r),null!=e.left&&(d.left=e.left-s.left+a),"using"in e?e.using.call(t,d):o.css(d)}},lt.fn.extend({position:function(){if(this[0]){var t,e,n={top:0,left:0},i=this[0];return"fixed"===lt.css(i,"position")?e=i.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),lt.nodeName(t[0],"html")||(n=t.offset()),n.top+=lt.css(t[0],"borderTopWidth",!0),n.left+=lt.css(t[0],"borderLeftWidth",!0)),{top:e.top-n.top-lt.css(i,"marginTop",!0),left:e.left-n.left-lt.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||U.documentElement;t&&!lt.nodeName(t,"html")&&"static"===lt.css(t,"position");)t=t.offsetParent;return t||U.documentElement})}}),lt.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,n){var i=/Y/.test(n);lt.fn[t]=function(r){return lt.access(this,function(t,r,a){var o=Y(t);return a===e?o?n in o?o[n]:o.document.documentElement[r]:t[r]:void(o?o.scrollTo(i?lt(o).scrollLeft():a,i?a:lt(o).scrollTop()):t[r]=a)},t,r,arguments.length,null)}}),lt.each({Height:"height",Width:"width"},function(t,n){lt.each({padding:"inner"+t,content:n,"":"outer"+t},function(i,r){lt.fn[r]=function(r,a){var o=arguments.length&&(i||"boolean"!=typeof r),s=i||(r===!0||a===!0?"margin":"border");return lt.access(this,function(n,i,r){var a;return lt.isWindow(n)?n.document.documentElement["client"+t]:9===n.nodeType?(a=n.documentElement,Math.max(n.body["scroll"+t],a["scroll"+t],n.body["offset"+t],a["offset"+t],a["client"+t])):r===e?lt.css(n,i,s):lt.style(n,i,r,s)},n,o?r:e,o,null)}})}),t.jQuery=t.$=lt,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return lt})}(window),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.moment=e()}(this,function(){"use strict";function t(){return oi.apply(null,arguments)}function e(t){oi=t}function n(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function i(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function r(t,e){var n,i=[];for(n=0;n0)for(n in li)i=li[n],r=e[i],h(r)||(t[i]=r);return t}function p(e){f(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),ui===!1&&(ui=!0,t.updateOffset(this),ui=!1)}function g(t){return t instanceof p||null!=t&&null!=t._isAMomentObject}function m(t){return t<0?Math.ceil(t):Math.floor(t)}function v(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=m(e)),n}function y(t,e,n){var i,r=Math.min(t.length,e.length),a=Math.abs(t.length-e.length),o=0;for(i=0;i0;){if(i=M(r.slice(0,e).join("-")))return i;if(n&&n.length>=e&&y(r,n,!0)>=e-1)break;e--}a++}return null}function M(t){var e=null;if(!pi[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=hi._abbr,require("./locale/"+t),E(e)}catch(n){}return pi[t]}function E(t,e){var n;return t&&(n=h(e)?L(t):D(t,e),n&&(hi=n)),hi._abbr}function D(t,e){return null!==e?(e.abbr=t,null!=pi[t]?(b("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale"),e=C(pi[t]._config,e)):null!=e.parentLocale&&(null!=pi[e.parentLocale]?e=C(pi[e.parentLocale]._config,e):b("parentLocaleUndefined","specified parentLocale is not defined yet")),pi[t]=new A(e),E(t),pi[t]):(delete pi[t],null)}function O(t,e){if(null!=e){var n;null!=pi[t]&&(e=C(pi[t]._config,e)),n=new A(e),n.parentLocale=pi[t],pi[t]=n,E(t)}else null!=pi[t]&&(null!=pi[t].parentLocale?pi[t]=pi[t].parentLocale:null!=pi[t]&&delete pi[t]);return pi[t]}function L(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return hi;if(!n(t)){if(e=M(t))return e;t=[t]}return P(t)}function I(){return di(pi)}function N(t,e){var n=t.toLowerCase();gi[n]=gi[n+"s"]=gi[e]=t}function R(t){return"string"==typeof t?gi[t]||gi[t.toLowerCase()]:void 0}function F(t){var e,n,i={};for(n in t)a(t,n)&&(e=R(n),e&&(i[e]=t[n]));return i}function V(e,n){return function(i){return null!=i?(G(this,e,i),t.updateOffset(this,n),this):j(this,e)}}function j(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function G(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function H(t,e){var n;if("object"==typeof t)for(n in t)this.set(n,t[n]);else if(t=R(t),w(this[t]))return this[t](e);return this}function $(t,e,n){var i=""+Math.abs(t),r=e-i.length,a=t>=0;return(a?n?"+":"":"-")+Math.pow(10,Math.max(0,r)).toString().substr(1)+i}function z(t,e,n,i){var r=i;"string"==typeof i&&(r=function(){return this[i]()}),t&&(xi[t]=r),e&&(xi[e[0]]=function(){return $(r.apply(this,arguments),e[1],e[2])}),n&&(xi[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),t)})}function Y(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function B(t){var e,n,i=t.match(mi);for(e=0,n=i.length;e=0&&vi.test(t);)t=t.replace(vi,n),vi.lastIndex=0,i-=1;return t}function U(t,e,n){Fi[t]=w(e)?e:function(t,i){return t&&n?n:e}}function W(t,e){return a(Fi,t)?Fi[t](e._strict,e._locale):new RegExp(Q(t))}function Q(t){return K(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,i,r){return e||n||i||r}))}function K(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Z(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),"number"==typeof e&&(i=function(t,n){n[e]=v(t)}),n=0;n11?Gi:n[Hi]<1||n[Hi]>et(n[ji],n[Gi])?Hi:n[$i]<0||n[$i]>24||24===n[$i]&&(0!==n[zi]||0!==n[Yi]||0!==n[Bi])?$i:n[zi]<0||n[zi]>59?zi:n[Yi]<0||n[Yi]>59?Yi:n[Bi]<0||n[Bi]>999?Bi:-1,u(t)._overflowDayOfYear&&(eHi)&&(e=Hi),u(t)._overflowWeeks&&e===-1&&(e=Xi),u(t)._overflowWeekday&&e===-1&&(e=qi),u(t).overflow=e),t}function ft(t){var e,n,i,r,a,o,s=t._i,l=Ji.exec(s)||tr.exec(s);if(l){for(u(t).iso=!0,e=0,n=nr.length;e=0&&isFinite(s.getFullYear())&&s.setFullYear(t),s}function mt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function vt(t){return yt(t)?366:365}function yt(t){return t%4===0&&t%100!==0||t%400===0}function xt(){return yt(this.year())}function _t(t,e,n){var i=7+e-n,r=(7+mt(t,0,i).getUTCDay()-e)%7;return-r+i-1}function bt(t,e,n,i,r){var a,o,s=(7+n-i)%7,l=_t(t,i,r),u=1+7*(e-1)+s+l;return u<=0?(a=t-1,o=vt(a)+u):u>vt(t)?(a=t+1,o=u-vt(t)):(a=t,o=u),{year:a,dayOfYear:o}}function wt(t,e,n){var i,r,a=_t(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?(r=t.year()-1,i=o+St(r,e,n)):o>St(t.year(),e,n)?(i=o-St(t.year(),e,n),r=t.year()+1):(r=t.year(),i=o),{week:i,year:r}}function St(t,e,n){var i=_t(t,e,n),r=_t(t+1,e,n);return(vt(t)-i+r)/7}function Tt(t,e,n){return null!=t?t:null!=e?e:n}function Ct(e){var n=new Date(t.now());return e._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function At(t){var e,n,i,r,a=[];if(!t._d){for(i=Ct(t),t._w&&null==t._a[Hi]&&null==t._a[Gi]&&kt(t),t._dayOfYear&&(r=Tt(t._a[ji],i[ji]),t._dayOfYear>vt(r)&&(u(t)._overflowDayOfYear=!0),n=mt(r,0,t._dayOfYear),t._a[Gi]=n.getUTCMonth(),t._a[Hi]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=a[e]=i[e];for(;e<7;e++)t._a[e]=a[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[$i]&&0===t._a[zi]&&0===t._a[Yi]&&0===t._a[Bi]&&(t._nextDay=!0,t._a[$i]=0),t._d=(t._useUTC?mt:gt).apply(null,a),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[$i]=24)}}function kt(t){var e,n,i,r,a,o,s,l;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(a=1,o=4,n=Tt(e.GG,t._a[ji],wt(Rt(),1,4).year),i=Tt(e.W,1),r=Tt(e.E,1),(r<1||r>7)&&(l=!0)):(a=t._locale._week.dow,o=t._locale._week.doy,n=Tt(e.gg,t._a[ji],wt(Rt(),a,o).year),i=Tt(e.w,1),null!=e.d?(r=e.d,(r<0||r>6)&&(l=!0)):null!=e.e?(r=e.e+a,(e.e<0||e.e>6)&&(l=!0)):r=a),i<1||i>St(n,a,o)?u(t)._overflowWeeks=!0:null!=l?u(t)._overflowWeekday=!0:(s=bt(n,i,r,a,o),t._a[ji]=s.year,t._dayOfYear=s.dayOfYear)}function Pt(e){if(e._f===t.ISO_8601)return void ft(e);e._a=[],u(e).empty=!0;var n,i,r,a,o,s=""+e._i,l=s.length,c=0;for(r=q(e._f,e._locale).match(mi)||[],n=0;n0&&u(e).unusedInput.push(o),s=s.slice(s.indexOf(i)+i.length),c+=i.length),xi[a]?(i?u(e).empty=!1:u(e).unusedTokens.push(a),tt(a,i,e)):e._strict&&!i&&u(e).unusedTokens.push(a);u(e).charsLeftOver=l-c,s.length>0&&u(e).unusedInput.push(s),u(e).bigHour===!0&&e._a[$i]<=12&&e._a[$i]>0&&(u(e).bigHour=void 0),u(e).parsedDateParts=e._a.slice(0),u(e).meridiem=e._meridiem,e._a[$i]=Mt(e._locale,e._a[$i],e._meridiem),At(e),ht(e)}function Mt(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(i=t.isPM(n),i&&e<12&&(e+=12),i||12!==e||(e=0),e):e}function Et(t){var e,n,i,r,a;if(0===t._f.length)return u(t).invalidFormat=!0,void(t._d=new Date(NaN));for(r=0;rthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Jt(){if(!h(this._isDSTShifted))return this._isDSTShifted;var t={};if(f(t,this),t=Lt(t),t._a){var e=t._isUTC?s(t._a):Rt(t._a);this._isDSTShifted=this.isValid()&&y(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function te(){return!!this.isValid()&&!this._isUTC}function ee(){return!!this.isValid()&&this._isUTC}function ne(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function ie(t,e){var n,i,r,o=t,s=null;return Ht(t)?o={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(o={},e?o[e]=t:o.milliseconds=t):(s=cr.exec(t))?(n="-"===s[1]?-1:1,o={y:0,d:v(s[Hi])*n,h:v(s[$i])*n,m:v(s[zi])*n,s:v(s[Yi])*n,ms:v(s[Bi])*n}):(s=dr.exec(t))?(n="-"===s[1]?-1:1,o={y:re(s[2],n),M:re(s[3],n),w:re(s[4],n),d:re(s[5],n),h:re(s[6],n),m:re(s[7],n),s:re(s[8],n)}):null==o?o={}:"object"==typeof o&&("from"in o||"to"in o)&&(r=oe(Rt(o.from),Rt(o.to)),o={},o.ms=r.milliseconds,o.M=r.months),i=new Gt(o),Ht(t)&&a(t,"_locale")&&(i._locale=t._locale),i}function re(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function ae(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function oe(t,e){var n;return t.isValid()&&e.isValid()?(e=Yt(e,t),t.isBefore(e)?n=ae(t,e):(n=ae(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function se(t){return t<0?Math.round(-1*t)*-1:Math.round(t)}function le(t,e){return function(n,i){var r,a;return null===i||isNaN(+i)||(b(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period)."),a=n,n=i,i=a),n="string"==typeof n?+n:n,r=ie(n,i),ue(this,r,t),this}}function ue(e,n,i,r){var a=n._milliseconds,o=se(n._days),s=se(n._months);e.isValid()&&(r=null==r||r,a&&e._d.setTime(e._d.valueOf()+a*i),o&&G(e,"Date",j(e,"Date")+o*i),s&&ot(e,j(e,"Month")+s*i),r&&t.updateOffset(e,o||s))}function ce(t,e){var n=t||Rt(),i=Yt(n,this).startOf("day"),r=this.diff(i,"days",!0),a=r<-6?"sameElse":r<-1?"lastWeek":r<0?"lastDay":r<1?"sameDay":r<2?"nextDay":r<7?"nextWeek":"sameElse",o=e&&(w(e[a])?e[a]():e[a]);return this.format(o||this.localeData().calendar(a,this,Rt(n)))}function de(){return new p(this)}function he(t,e){var n=g(t)?t:Rt(t);return!(!this.isValid()||!n.isValid())&&(e=R(h(e)?"millisecond":e),"millisecond"===e?this.valueOf()>n.valueOf():n.valueOf()a&&(e=a),qe.call(this,t,e,n,i,r))}function qe(t,e,n,i,r){var a=bt(t,e,n,i,r),o=mt(a.year,0,a.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Ue(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function We(t){return wt(t,this._week.dow,this._week.doy).week}function Qe(){return this._week.dow}function Ke(){return this._week.doy}function Ze(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Je(t){var e=wt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function tn(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function en(t,e){return n(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]}function nn(t){return this._weekdaysShort[t.day()]}function rn(t){return this._weekdaysMin[t.day()]}function an(t,e,n){var i,r,a,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)a=s([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(a,"").toLocaleLowerCase();return n?"dddd"===e?(r=fi.call(this._weekdaysParse,o),r!==-1?r:null):"ddd"===e?(r=fi.call(this._shortWeekdaysParse,o),r!==-1?r:null):(r=fi.call(this._minWeekdaysParse,o),r!==-1?r:null):"dddd"===e?(r=fi.call(this._weekdaysParse,o),r!==-1?r:(r=fi.call(this._shortWeekdaysParse,o),r!==-1?r:(r=fi.call(this._minWeekdaysParse,o),r!==-1?r:null))):"ddd"===e?(r=fi.call(this._shortWeekdaysParse,o),r!==-1?r:(r=fi.call(this._weekdaysParse,o),r!==-1?r:(r=fi.call(this._minWeekdaysParse,o),r!==-1?r:null))):(r=fi.call(this._minWeekdaysParse,o),r!==-1?r:(r=fi.call(this._weekdaysParse,o),r!==-1?r:(r=fi.call(this._shortWeekdaysParse,o),r!==-1?r:null)))}function on(t,e,n){var i,r,a;if(this._weekdaysParseExact)return an.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(r=s([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(r,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(r,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(r,"").replace(".",".?")+"$","i")),this._weekdaysParse[i]||(a="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,""),this._weekdaysParse[i]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}}function sn(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=tn(t,this.localeData()),this.add(t-e,"d")):e}function ln(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function un(t){return this.isValid()?null==t?this.day()||7:this.day(this.day()%7?t:t-7):null!=t?this:NaN}function cn(t){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||fn.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex}function dn(t){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||fn.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex}function hn(t){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||fn.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex}function fn(){function t(t,e){return e.length-t.length}var e,n,i,r,a,o=[],l=[],u=[],c=[];for(e=0;e<7;e++)n=s([2e3,1]).day(e),i=this.weekdaysMin(n,""),r=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(i),l.push(r),u.push(a),c.push(i),c.push(r),c.push(a);for(o.sort(t),l.sort(t),u.sort(t),c.sort(t),e=0;e<7;e++)l[e]=K(l[e]),u[e]=K(u[e]),c[e]=K(c[e]);this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function pn(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function gn(){return this.hours()%12||12}function mn(){return this.hours()||24}function vn(t,e){z(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function yn(t,e){return e._meridiemParse}function xn(t){return"p"===(t+"").toLowerCase().charAt(0)}function _n(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function bn(t,e){e[Bi]=v(1e3*("0."+t))}function wn(){return this._isUTC?"UTC":""}function Sn(){return this._isUTC?"Coordinated Universal Time":""}function Tn(t){return Rt(1e3*t)}function Cn(){return Rt.apply(null,arguments).parseZone()}function An(t,e,n){var i=this._calendar[t];return w(i)?i.call(e,n):i}function kn(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function Pn(){return this._invalidDate}function Mn(t){return this._ordinal.replace("%d",t)}function En(t){return t}function Dn(t,e,n,i){var r=this._relativeTime[n];return w(r)?r(t,e,n,i):r.replace(/%d/i,t)}function On(t,e){var n=this._relativeTime[t>0?"future":"past"];return w(n)?n(e):n.replace(/%s/i,e)}function Ln(t,e,n,i){var r=L(),a=s().set(i,e);return r[n](a,t)}function In(t,e,n){if("number"==typeof t&&(e=t,t=void 0),t=t||"",null!=e)return Ln(t,e,n,"month");var i,r=[];for(i=0;i<12;i++)r[i]=Ln(t,i,n,"month");return r}function Nn(t,e,n,i){"boolean"==typeof t?("number"==typeof e&&(n=e,e=void 0),e=e||""):(e=t,n=e,t=!1,"number"==typeof e&&(n=e,e=void 0),e=e||"");var r=L(),a=t?r._week.dow:0;if(null!=n)return Ln(e,(n+a)%7,i,"day");var o,s=[];for(o=0;o<7;o++)s[o]=Ln(e,(o+a)%7,i,"day");return s}function Rn(t,e){return In(t,e,"months")}function Fn(t,e){return In(t,e,"monthsShort")}function Vn(t,e,n){return Nn(t,e,n,"weekdays")}function jn(t,e,n){return Nn(t,e,n,"weekdaysShort")}function Gn(t,e,n){return Nn(t,e,n,"weekdaysMin")}function Hn(){var t=this._data;return this._milliseconds=Vr(this._milliseconds),this._days=Vr(this._days),this._months=Vr(this._months),t.milliseconds=Vr(t.milliseconds),t.seconds=Vr(t.seconds),t.minutes=Vr(t.minutes),t.hours=Vr(t.hours),t.months=Vr(t.months),t.years=Vr(t.years),this}function $n(t,e,n,i){var r=ie(e,n);return t._milliseconds+=i*r._milliseconds,t._days+=i*r._days,t._months+=i*r._months,t._bubble()}function zn(t,e){return $n(this,t,e,1)}function Yn(t,e){return $n(this,t,e,-1)}function Bn(t){return t<0?Math.floor(t):Math.ceil(t)}function Xn(){var t,e,n,i,r,a=this._milliseconds,o=this._days,s=this._months,l=this._data;return a>=0&&o>=0&&s>=0||a<=0&&o<=0&&s<=0||(a+=864e5*Bn(Un(s)+o),o=0,s=0),l.milliseconds=a%1e3,t=m(a/1e3),l.seconds=t%60,e=m(t/60),l.minutes=e%60,n=m(e/60),l.hours=n%24,o+=m(n/24),r=m(qn(o)),s+=r,o-=Bn(Un(r)),i=m(s/12),s%=12,l.days=o,l.months=s,l.years=i,this}function qn(t){return 4800*t/146097}function Un(t){return 146097*t/4800}function Wn(t){var e,n,i=this._milliseconds;if(t=R(t),"month"===t||"year"===t)return e=this._days+i/864e5,n=this._months+qn(e),"month"===t?n:n/12;switch(e=this._days+Math.round(Un(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}}function Qn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*v(this._months/12)}function Kn(t){return function(){return this.as(t)}}function Zn(t){return t=R(t),this[t+"s"]()}function Jn(t){return function(){return this._data[t]}}function ti(){return m(this.days()/7)}function ei(t,e,n,i,r){return r.relativeTime(e||1,!!n,t,i)}function ni(t,e,n){var i=ie(t).abs(),r=ta(i.as("s")),a=ta(i.as("m")),o=ta(i.as("h")),s=ta(i.as("d")),l=ta(i.as("M")),u=ta(i.as("y")),c=r0,c[4]=n,ei.apply(null,c)}function ii(t,e){return void 0!==ea[t]&&(void 0===e?ea[t]:(ea[t]=e,!0))}function ri(t){var e=this.localeData(),n=ni(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function ai(){var t,e,n,i=na(this._milliseconds)/1e3,r=na(this._days),a=na(this._months);t=m(i/60),e=m(t/60),i%=60,t%=60,n=m(a/12),a%=12;var o=n,s=a,l=r,u=e,c=t,d=i,h=this.asSeconds();return h?(h<0?"-":"")+"P"+(o?o+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||d?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(d?d+"S":""):"P0D"}var oi,si;si=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,i=0;i68?1900:2e3)};var ar=V("FullYear",!0);t.ISO_8601=function(){};var or=_("moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var t=Rt.apply(null,arguments);return this.isValid()&&t.isValid()?tthis?this:t:d()}),lr=function(){return Date.now?Date.now():+new Date};$t("Z",":"),$t("ZZ",""),U("Z",Ii),U("ZZ",Ii),Z(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=zt(Ii,t)});var ur=/([\+\-]|\d\d)/gi;t.updateOffset=function(){};var cr=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/,dr=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;ie.fn=Gt.prototype;var hr=le(1,"add"),fr=le(-1,"subtract");t.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",t.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var pr=_("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});z(0,["gg",2],0,function(){return this.weekYear()%100}),z(0,["GG",2],0,function(){return this.isoWeekYear()%100}),He("gggg","weekYear"),He("ggggg","weekYear"),He("GGGG","isoWeekYear"),He("GGGGG","isoWeekYear"),N("weekYear","gg"),N("isoWeekYear","GG"),U("G",Oi),U("g",Oi),U("GG",Ci,bi),U("gg",Ci,bi),U("GGGG",Mi,Si),U("gggg",Mi,Si),U("GGGGG",Ei,Ti),U("ggggg",Ei,Ti),J(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,i){e[i.substr(0,2)]=v(t)}),J(["gg","GG"],function(e,n,i,r){n[r]=t.parseTwoDigitYear(e)}),z("Q",0,"Qo","quarter"),N("quarter","Q"),U("Q",_i),Z("Q",function(t,e){e[Gi]=3*(v(t)-1)}),z("w",["ww",2],"wo","week"),z("W",["WW",2],"Wo","isoWeek"),N("week","w"),N("isoWeek","W"),U("w",Ci),U("ww",Ci,bi),U("W",Ci),U("WW",Ci,bi),J(["w","ww","W","WW"],function(t,e,n,i){e[i.substr(0,1)]=v(t)});var gr={dow:0,doy:6};z("D",["DD",2],"Do","date"),N("date","D"),U("D",Ci),U("DD",Ci,bi),U("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),Z(["D","DD"],Hi),Z("Do",function(t,e){e[Hi]=v(t.match(Ci)[0],10)});var mr=V("Date",!0);z("d",0,"do","day"),z("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),z("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),z("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),z("e",0,0,"weekday"),z("E",0,0,"isoWeekday"),N("day","d"),N("weekday","e"),N("isoWeekday","E"),U("d",Ci),U("e",Ci),U("E",Ci),U("dd",function(t,e){return e.weekdaysMinRegex(t)}),U("ddd",function(t,e){return e.weekdaysShortRegex(t)}),U("dddd",function(t,e){return e.weekdaysRegex(t)}),J(["dd","ddd","dddd"],function(t,e,n,i){var r=n._locale.weekdaysParse(t,i,n._strict);null!=r?e.d=r:u(n).invalidWeekday=t}),J(["d","e","E"],function(t,e,n,i){e[i]=v(t)});var vr="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),yr="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),xr="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),_r=Ri,br=Ri,wr=Ri;z("DDD",["DDDD",3],"DDDo","dayOfYear"),N("dayOfYear","DDD"),U("DDD",Pi),U("DDDD",wi),Z(["DDD","DDDD"],function(t,e,n){n._dayOfYear=v(t)}),z("H",["HH",2],0,"hour"),z("h",["hh",2],0,gn),z("k",["kk",2],0,mn),z("hmm",0,0,function(){return""+gn.apply(this)+$(this.minutes(),2)}),z("hmmss",0,0,function(){return""+gn.apply(this)+$(this.minutes(),2)+$(this.seconds(),2)}),z("Hmm",0,0,function(){return""+this.hours()+$(this.minutes(),2)}),z("Hmmss",0,0,function(){return""+this.hours()+$(this.minutes(),2)+$(this.seconds(),2)}),vn("a",!0),vn("A",!1),N("hour","h"),U("a",yn),U("A",yn),U("H",Ci),U("h",Ci),U("HH",Ci,bi),U("hh",Ci,bi),U("hmm",Ai),U("hmmss",ki),U("Hmm",Ai),U("Hmmss",ki),Z(["H","HH"],$i),Z(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),Z(["h","hh"],function(t,e,n){e[$i]=v(t),u(n).bigHour=!0}),Z("hmm",function(t,e,n){var i=t.length-2;e[$i]=v(t.substr(0,i)),e[zi]=v(t.substr(i)),u(n).bigHour=!0}),Z("hmmss",function(t,e,n){var i=t.length-4,r=t.length-2;e[$i]=v(t.substr(0,i)),e[zi]=v(t.substr(i,2)),e[Yi]=v(t.substr(r)),u(n).bigHour=!0}),Z("Hmm",function(t,e,n){var i=t.length-2;e[$i]=v(t.substr(0,i)),e[zi]=v(t.substr(i))}),Z("Hmmss",function(t,e,n){var i=t.length-4,r=t.length-2;e[$i]=v(t.substr(0,i)),e[zi]=v(t.substr(i,2)),e[Yi]=v(t.substr(r))});var Sr=/[ap]\.?m?\.?/i,Tr=V("Hours",!0);z("m",["mm",2],0,"minute"),N("minute","m"),U("m",Ci),U("mm",Ci,bi),Z(["m","mm"],zi);var Cr=V("Minutes",!1);z("s",["ss",2],0,"second"),N("second","s"),U("s",Ci),U("ss",Ci,bi),Z(["s","ss"],Yi);var Ar=V("Seconds",!1);z("S",0,0,function(){return~~(this.millisecond()/100)}),z(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),z(0,["SSS",3],0,"millisecond"),z(0,["SSSS",4],0,function(){return 10*this.millisecond()}),z(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),z(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),z(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),z(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),z(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),N("millisecond","ms"),U("S",Pi,_i),U("SS",Pi,bi),U("SSS",Pi,wi);var kr;for(kr="SSSS";kr.length<=9;kr+="S")U(kr,Di);for(kr="S";kr.length<=9;kr+="S")Z(kr,bn);var Pr=V("Milliseconds",!1);z("z",0,0,"zoneAbbr"),z("zz",0,0,"zoneName");var Mr=p.prototype;Mr.add=hr,Mr.calendar=ce,Mr.clone=de,Mr.diff=ye,Mr.endOf=Ee,Mr.format=we,Mr.from=Se,Mr.fromNow=Te,Mr.to=Ce,Mr.toNow=Ae,Mr.get=H,Mr.invalidAt=je,Mr.isAfter=he,Mr.isBefore=fe,Mr.isBetween=pe,Mr.isSame=ge,Mr.isSameOrAfter=me,Mr.isSameOrBefore=ve,Mr.isValid=Fe,Mr.lang=pr,Mr.locale=ke,Mr.localeData=Pe,Mr.max=sr,Mr.min=or,Mr.parsingFlags=Ve,Mr.set=H,Mr.startOf=Me,Mr.subtract=fr,Mr.toArray=Ie,Mr.toObject=Ne,Mr.toDate=Le,Mr.toISOString=be,Mr.toJSON=Re,Mr.toString=_e,Mr.unix=Oe,Mr.valueOf=De,Mr.creationData=Ge,Mr.year=ar,Mr.isLeapYear=xt,Mr.weekYear=$e,Mr.isoWeekYear=ze,Mr.quarter=Mr.quarters=Ue,Mr.month=st,Mr.daysInMonth=lt,Mr.week=Mr.weeks=Ze,Mr.isoWeek=Mr.isoWeeks=Je,Mr.weeksInYear=Be,Mr.isoWeeksInYear=Ye,Mr.date=mr,Mr.day=Mr.days=sn,Mr.weekday=ln,Mr.isoWeekday=un,Mr.dayOfYear=pn,Mr.hour=Mr.hours=Tr,Mr.minute=Mr.minutes=Cr,Mr.second=Mr.seconds=Ar,Mr.millisecond=Mr.milliseconds=Pr,Mr.utcOffset=Xt,Mr.utc=Ut,Mr.local=Wt,Mr.parseZone=Qt,Mr.hasAlignedHourOffset=Kt,Mr.isDST=Zt,Mr.isDSTShifted=Jt,Mr.isLocal=te,Mr.isUtcOffset=ee,Mr.isUtc=ne,Mr.isUTC=ne,Mr.zoneAbbr=wn,Mr.zoneName=Sn,Mr.dates=_("dates accessor is deprecated. Use date instead.",mr),Mr.months=_("months accessor is deprecated. Use month instead",st),Mr.years=_("years accessor is deprecated. Use year instead",ar),Mr.zone=_("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",qt);var Er=Mr,Dr={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Or={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Lr="Invalid date",Ir="%d",Nr=/\d{1,2}/,Rr={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Fr=A.prototype;Fr._calendar=Dr,Fr.calendar=An,Fr._longDateFormat=Or,Fr.longDateFormat=kn,Fr._invalidDate=Lr,Fr.invalidDate=Pn,Fr._ordinal=Ir,Fr.ordinal=Mn,Fr._ordinalParse=Nr,Fr.preparse=En,Fr.postformat=En,Fr._relativeTime=Rr,Fr.relativeTime=Dn,Fr.pastFuture=On,Fr.set=T,Fr.months=nt,Fr._months=Wi,Fr.monthsShort=it,Fr._monthsShort=Qi,Fr.monthsParse=at,Fr._monthsRegex=Zi,Fr.monthsRegex=ct,Fr._monthsShortRegex=Ki,Fr.monthsShortRegex=ut,Fr.week=We,Fr._week=gr,Fr.firstDayOfYear=Ke,Fr.firstDayOfWeek=Qe,Fr.weekdays=en,Fr._weekdays=vr,Fr.weekdaysMin=rn,Fr._weekdaysMin=xr,Fr.weekdaysShort=nn,Fr._weekdaysShort=yr,Fr.weekdaysParse=on,Fr._weekdaysRegex=_r,Fr.weekdaysRegex=cn,Fr._weekdaysShortRegex=br,Fr.weekdaysShortRegex=dn,Fr._weekdaysMinRegex=wr,Fr.weekdaysMinRegex=hn,Fr.isPM=xn,Fr._meridiemParse=Sr,Fr.meridiem=_n,E("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===v(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),t.lang=_("moment.lang is deprecated. Use moment.locale instead.",E),t.langData=_("moment.langData is deprecated. Use moment.localeData instead.",L);var Vr=Math.abs,jr=Kn("ms"),Gr=Kn("s"),Hr=Kn("m"),$r=Kn("h"),zr=Kn("d"),Yr=Kn("w"),Br=Kn("M"),Xr=Kn("y"),qr=Jn("milliseconds"),Ur=Jn("seconds"),Wr=Jn("minutes"),Qr=Jn("hours"),Kr=Jn("days"),Zr=Jn("months"),Jr=Jn("years"),ta=Math.round,ea={s:45,m:45,h:22,d:26,M:11},na=Math.abs,ia=Gt.prototype;ia.abs=Hn,ia.add=zn,ia.subtract=Yn,ia.as=Wn,ia.asMilliseconds=jr,ia.asSeconds=Gr,ia.asMinutes=Hr,ia.asHours=$r,ia.asDays=zr,ia.asWeeks=Yr,ia.asMonths=Br,ia.asYears=Xr,ia.valueOf=Qn,ia._bubble=Xn,ia.get=Zn,ia.milliseconds=qr,ia.seconds=Ur,ia.minutes=Wr,ia.hours=Qr,ia.days=Kr,ia.weeks=ti,ia.months=Zr,ia.years=Jr,ia.humanize=ri,ia.toISOString=ai,ia.toString=ai,ia.toJSON=ai,ia.locale=ke,ia.localeData=Pe,ia.toIsoString=_("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ai),ia.lang=pr,z("X",0,0,"unix"),z("x",0,0,"valueOf"),U("x",Oi),U("X",Ni),Z("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),Z("x",function(t,e,n){n._d=new Date(v(t))}),t.version="2.13.0",e(Rt),t.fn=Er,t.min=Vt,t.max=jt,t.now=lr,t.utc=s,t.unix=Tn,t.months=Rn,t.isDate=i,t.locale=E,t.invalid=d,t.duration=ie,t.isMoment=g,t.weekdays=Vn,t.parseZone=Cn,t.localeData=L,t.isDuration=Ht,t.monthsShort=Fn,t.weekdaysMin=Gn,t.defineLocale=D,t.updateLocale=O,t.locales=I,t.weekdaysShort=jn,t.normalizeUnits=R,t.relativeTimeThreshold=ii,t.prototype=Er;var ra=t;return ra}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}t.fn.emulateTransitionEnd=function(e){var n=!1,i=this;t(this).one("bsTransitionEnd",function(){n=!0});var r=function(){n||t(i).trigger(t.support.transition.end)};return setTimeout(r,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var n=t(this),r=n.data("bs.alert");r||n.data("bs.alert",r=new i(this)),"string"==typeof e&&r[e].call(n)})}var n='[data-dismiss="alert"]',i=function(e){t(e).on("click",n,this.close)};i.VERSION="3.3.6",i.TRANSITION_DURATION=150,i.prototype.close=function(e){function n(){o.detach().trigger("closed.bs.alert").remove()}var r=t(this),a=r.attr("data-target");a||(a=r.attr("href"),a=a&&a.replace(/.*(?=#[^\s]*$)/,""));var o=t(a);e&&e.preventDefault(),o.length||(o=r.closest(".alert")),o.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(o.removeClass("in"),t.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",n).emulateTransitionEnd(i.TRANSITION_DURATION):n())};var r=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=r,this},t(document).on("click.bs.alert.data-api",n,i.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.button"),a="object"==typeof e&&e;r||i.data("bs.button",r=new n(this,a)),"toggle"==e?r.toggle():e&&r.setState(e)})}var n=function(e,i){this.$element=t(e),this.options=t.extend({},n.DEFAULTS,i),this.isLoading=!1};n.VERSION="3.3.6",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(e){var n="disabled",i=this.$element,r=i.is("input")?"val":"html",a=i.data();e+="Text",null==a.resetText&&i.data("resetText",i[r]()),setTimeout(t.proxy(function(){i[r](null==a[e]?this.options[e]:a[e]),"loadingText"==e?(this.isLoading=!0,i.addClass(n).attr(n,n)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),t&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=e,t.fn.button.Constructor=n,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(n){var i=t(n.target);i.hasClass("btn")||(i=i.closest(".btn")),e.call(i,"toggle"),t(n.target).is('input[type="radio"]')||t(n.target).is('input[type="checkbox"]')||n.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.carousel"),a=t.extend({},n.DEFAULTS,i.data(),"object"==typeof e&&e),o="string"==typeof e?e:a.slide;r||i.data("bs.carousel",r=new n(this,a)),"number"==typeof e?r.to(e):o?r[o]():a.interval&&r.pause().cycle()})}var n=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};n.VERSION="3.3.6",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},n.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},n.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},n.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e),i="prev"==t&&0===n||"next"==t&&n==this.$items.length-1;if(i&&!this.options.wrap)return e;var r="prev"==t?-1:1,a=(n+r)%this.$items.length;return this.$items.eq(a)},n.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",this.$items.eq(t))},n.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){if(!this.sliding)return this.slide("next")},n.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},n.prototype.slide=function(e,i){var r=this.$element.find(".item.active"),a=i||this.getItemForDirection(e,r),o=this.interval,s="next"==e?"left":"right",l=this;if(a.hasClass("active"))return this.sliding=!1;var u=a[0],c=t.Event("slide.bs.carousel",{relatedTarget:u,direction:s});if(this.$element.trigger(c),!c.isDefaultPrevented()){if(this.sliding=!0,o&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var d=t(this.$indicators.children()[this.getItemIndex(a)]);d&&d.addClass("active")}var h=t.Event("slid.bs.carousel",{relatedTarget:u,direction:s});return t.support.transition&&this.$element.hasClass("slide")?(a.addClass(e),a[0].offsetWidth,r.addClass(s),a.addClass(s),r.one("bsTransitionEnd",function(){a.removeClass([e,s].join(" ")).addClass("active"),r.removeClass(["active",s].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(h)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(r.removeClass("active"),a.addClass("active"),this.sliding=!1,this.$element.trigger(h)),o&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=n,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this};var r=function(n){var i,r=t(this),a=t(r.attr("data-target")||(i=r.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(a.hasClass("carousel")){var o=t.extend({},a.data(),r.data()),s=r.attr("data-slide-to");s&&(o.interval=!1),e.call(a,o),s&&a.data("bs.carousel").to(s),n.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",r).on("click.bs.carousel.data-api","[data-slide-to]",r),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var n=t(this);e.call(n,n.data())})})}(jQuery),+function(t){"use strict";function e(e){var n,i=e.attr("data-target")||(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return t(i)}function n(e){return this.each(function(){var n=t(this),r=n.data("bs.collapse"),a=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e);!r&&a.toggle&&/show|hide/.test(e)&&(a.toggle=!1),r||n.data("bs.collapse",r=new i(this,a)),"string"==typeof e&&r[e]()})}var i=function(e,n){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,n),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.6",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,r=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(r&&r.length&&(e=r.data("bs.collapse"),e&&e.transitioning))){var a=t.Event("show.bs.collapse");if(this.$element.trigger(a),!a.isDefaultPrevented()){r&&r.length&&(n.call(r,"hide"),e||r.data("bs.collapse",null));var o=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[o](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("collapse in")[o](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return s.call(this);var l=t.camelCase(["scroll",o].join("-"));this.$element.one("bsTransitionEnd",t.proxy(s,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[o](this.$element[0][l])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var r=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[n](0).one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(i.TRANSITION_DURATION):r.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(n,i){var r=t(i);this.addAriaAndCollapsedClass(e(r),r)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass("in");t.attr("aria-expanded",n),e.toggleClass("collapsed",!n).attr("aria-expanded",n)};var r=t.fn.collapse;t.fn.collapse=n,t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=r,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var r=t(this);r.attr("data-target")||i.preventDefault();var a=e(r),o=a.data("bs.collapse"),s=o?"toggle":r.data();n.call(a,s)})}(jQuery),+function(t){"use strict";function e(e){var n=e.attr("data-target");n||(n=e.attr("href"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i=n&&t(n);return i&&i.length?i:e.parent()}function n(n){n&&3===n.which||(t(r).remove(),t(a).each(function(){var i=t(this),r=e(i),a={relatedTarget:this};r.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(r[0],n.target)||(r.trigger(n=t.Event("hide.bs.dropdown",a)),n.isDefaultPrevented()||(i.attr("aria-expanded","false"),r.removeClass("open").trigger(t.Event("hidden.bs.dropdown",a)))))}))}function i(e){return this.each(function(){var n=t(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new o(this)),"string"==typeof e&&i[e].call(n)})}var r=".dropdown-backdrop",a='[data-toggle="dropdown"]',o=function(e){t(e).on("click.bs.dropdown",this.toggle)};o.VERSION="3.3.6",o.prototype.toggle=function(i){var r=t(this);if(!r.is(".disabled, :disabled")){var a=e(r),o=a.hasClass("open");if(n(),!o){"ontouchstart"in document.documentElement&&!a.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",n);var s={relatedTarget:this};if(a.trigger(i=t.Event("show.bs.dropdown",s)),i.isDefaultPrevented())return;r.trigger("focus").attr("aria-expanded","true"),a.toggleClass("open").trigger(t.Event("shown.bs.dropdown",s))}return!1}},o.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var i=t(this);if(n.preventDefault(),n.stopPropagation(),!i.is(".disabled, :disabled")){var r=e(i),o=r.hasClass("open");if(!o&&27!=n.which||o&&27==n.which)return 27==n.which&&r.find(a).trigger("focus"),i.trigger("click");var s=" li:not(.disabled):visible a",l=r.find(".dropdown-menu"+s);if(l.length){var u=l.index(n.target);38==n.which&&u>0&&u--,40==n.which&&udocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},n.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},n.prototype.init=function(e,n,i){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var r=this.options.trigger.split(" "),a=r.length;a--;){var o=r[a];if("click"==o)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=o){var s="hover"==o?"mouseenter":"focusin",l="hover"==o?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{ -trigger:"manual",selector:""}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},n.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,function(t,i){n[t]!=i&&(e[t]=i)}),e},n.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusin"==e.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState?void(n.hoverState="in"):(clearTimeout(n.timeout),n.hoverState="in",n.options.delay&&n.options.delay.show?void(n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)):n.show())},n.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},n.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusout"==e.type?"focus":"hover"]=!1),!n.isInStateTrue())return clearTimeout(n.timeout),n.hoverState="out",n.options.delay&&n.options.delay.hide?void(n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)):n.hide()},n.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var r=this,a=this.tip(),o=this.getUID(this.type);this.setContent(),a.attr("id",o),this.$element.attr("aria-describedby",o),this.options.animation&&a.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,u=l.test(s);u&&(s=s.replace(l,"")||"top"),a.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?a.appendTo(this.options.container):a.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var c=this.getPosition(),d=a[0].offsetWidth,h=a[0].offsetHeight;if(u){var f=s,p=this.getPosition(this.$viewport);s="bottom"==s&&c.bottom+h>p.bottom?"top":"top"==s&&c.top-hp.width?"left":"left"==s&&c.left-do.top+o.height&&(r.top=o.top+o.height-l)}else{var u=e.left-a,c=e.left+a+n;uo.right&&(r.left=o.left+o.width-c)}return r},n.prototype.getTitle=function(){var t,e=this.$element,n=this.options;return t=e.attr("data-original-title")||("function"==typeof n.title?n.title.call(e[0]):n.title)},n.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(e){var n=this;e&&(n=t(e.currentTarget).data("bs."+this.type),n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},n.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null})};var i=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=n,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.popover"),a="object"==typeof e&&e;!r&&/destroy|hide/.test(e)||(r||i.data("bs.popover",r=new n(this,a)),"string"==typeof e&&r[e]())})}var n=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");n.VERSION="3.3.6",n.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),n.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),n.prototype.constructor=n,n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof n?"html":"append":"text"](n),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},n.prototype.hasContent=function(){return this.getTitle()||this.getContent()},n.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=n,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),+function(t){"use strict";function e(n,i){this.$body=t(document.body),this.$scrollElement=t(t(n).is(document.body)?window:n),this.options=t.extend({},e.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var i=t(this),r=i.data("bs.scrollspy"),a="object"==typeof n&&n;r||i.data("bs.scrollspy",r=new e(this,a)),"string"==typeof n&&r[n]()})}e.VERSION="3.3.6",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),r=e.data("target")||e.attr("href"),a=/^#./.test(r)&&t(r);return a&&a.length&&a.is(":visible")&&[[a[n]().top+i,r]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),r=this.offsets,a=this.targets,o=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),e>=i)return o!=(t=a[a.length-1])&&this.activate(t);if(o&&e=r[t]&&(void 0===r[t+1]||e .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),r&&r()}var o=i.find("> .active"),s=r&&t.support.transition&&(o.length&&o.hasClass("fade")||!!i.find("> .fade").length);o.length&&s?o.one("bsTransitionEnd",a).emulateTransitionEnd(n.TRANSITION_DURATION):a(),o.removeClass("in")};var i=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=n,t.fn.tab.noConflict=function(){return t.fn.tab=i,this};var r=function(n){n.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',r).on("click.bs.tab.data-api",'[data-toggle="pill"]',r)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.affix"),a="object"==typeof e&&e;r||i.data("bs.affix",r=new n(this,a)),"string"==typeof e&&r[e]()})}var n=function(e,i){this.options=t.extend({},n.DEFAULTS,i),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.3.6",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(t,e,n,i){var r=this.$target.scrollTop(),a=this.$element.offset(),o=this.$target.height();if(null!=n&&"top"==this.affixed)return r=t-i&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},n.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),i=this.options.offset,r=i.top,a=i.bottom,o=Math.max(t(document).height(),t(document.body).height());"object"!=typeof i&&(a=r=i),"function"==typeof r&&(r=i.top(this.$element)),"function"==typeof a&&(a=i.bottom(this.$element));var s=this.getState(o,e,r,a);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var l="affix"+(s?"-"+s:""),u=t.Event(l+".bs.affix");if(this.$element.trigger(u),u.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:o-e-a})}};var i=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=n,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var n=t(this),i=n.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),e.call(n,i)})})}(jQuery),function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t("undefined"!=typeof jQuery?jQuery:window.Zepto)}(function(t){"use strict";function e(e){var n=e.data;e.isDefaultPrevented()||(e.preventDefault(),t(e.target).ajaxSubmit(n))}function n(e){var n=e.target,i=t(n);if(!i.is("[type=submit],[type=image]")){var r=i.closest("[type=submit]");if(0===r.length)return;n=r[0]}var a=this;if(a.clk=n,"image"==n.type)if(void 0!==e.offsetX)a.clk_x=e.offsetX,a.clk_y=e.offsetY;else if("function"==typeof t.fn.offset){var o=i.offset();a.clk_x=e.pageX-o.left,a.clk_y=e.pageY-o.top}else a.clk_x=e.pageX-n.offsetLeft,a.clk_y=e.pageY-n.offsetTop;setTimeout(function(){a.clk=a.clk_x=a.clk_y=null},100)}function i(){if(t.fn.ajaxSubmit.debug){var e="[jquery.form] "+Array.prototype.join.call(arguments,"");window.console&&window.console.log?window.console.log(e):window.opera&&window.opera.postError&&window.opera.postError(e)}}var r={};r.fileapi=void 0!==t("").get(0).files,r.formdata=void 0!==window.FormData;var a=!!t.fn.prop;t.fn.attr2=function(){if(!a)return this.attr.apply(this,arguments);var t=this.prop.apply(this,arguments);return t&&t.jquery||"string"==typeof t?t:this.attr.apply(this,arguments)},t.fn.ajaxSubmit=function(e){function n(n){var i,r,a=t.param(n,e.traditional).split("&"),o=a.length,s=[];for(i=0;i').val(h.extraData[f].value).appendTo(S)[0]):c.push(t('').val(h.extraData[f]).appendTo(S)[0]));h.iframeTarget||m.appendTo("body"),v.attachEvent?v.attachEvent("onload",s):v.addEventListener("load",s,!1),setTimeout(e,15);try{S.submit()}catch(g){var y=document.createElement("form").submit;y.apply(S)}}finally{S.setAttribute("action",a),S.setAttribute("enctype",u),n?S.setAttribute("target",n):d.removeAttr("target"),t(c).remove()}}function s(e){if(!y.aborted&&!D){if(E=r(v),E||(i("cannot access response document"),e=A),e===C&&y)return y.abort("timeout"),void T.reject(y,"timeout");if(e==A&&y)return y.abort("server abort"),void T.reject(y,"error","server abort");if(E&&E.location.href!=h.iframeSrc||b){v.detachEvent?v.detachEvent("onload",s):v.removeEventListener("load",s,!1);var n,a="success";try{if(b)throw"timeout";var o="xml"==h.dataType||E.XMLDocument||t.isXMLDoc(E);if(i("isXml="+o),!o&&window.opera&&(null===E.body||!E.body.innerHTML)&&--O)return i("requeing onLoad callback, DOM not available"),void setTimeout(s,250);var l=E.body?E.body:E.documentElement;y.responseText=l?l.innerHTML:null,y.responseXML=E.XMLDocument?E.XMLDocument:E,o&&(h.dataType="xml"),y.getResponseHeader=function(t){var e={"content-type":h.dataType};return e[t.toLowerCase()]},l&&(y.status=Number(l.getAttribute("status"))||y.status,y.statusText=l.getAttribute("statusText")||y.statusText);var u=(h.dataType||"").toLowerCase(),c=/(json|script|text)/.test(u);if(c||h.textarea){var d=E.getElementsByTagName("textarea")[0];if(d)y.responseText=d.value,y.status=Number(d.getAttribute("status"))||y.status,y.statusText=d.getAttribute("statusText")||y.statusText;else if(c){var p=E.getElementsByTagName("pre")[0],g=E.getElementsByTagName("body")[0];p?y.responseText=p.textContent?p.textContent:p.innerText:g&&(y.responseText=g.textContent?g.textContent:g.innerText)}}else"xml"==u&&!y.responseXML&&y.responseText&&(y.responseXML=L(y.responseText));try{M=N(y,u,h)}catch(x){a="parsererror",y.error=n=x||a}}catch(x){i("error caught: ",x),a="error",y.error=n=x||a}y.aborted&&(i("upload aborted"),a=null),y.status&&(a=y.status>=200&&y.status<300||304===y.status?"success":"error"),"success"===a?(h.success&&h.success.call(h.context,M,"success",y),T.resolve(y.responseText,"success",y),f&&t.event.trigger("ajaxSuccess",[y,h])):a&&(void 0===n&&(n=y.statusText),h.error&&h.error.call(h.context,y,a,n),T.reject(y,"error",n),f&&t.event.trigger("ajaxError",[y,h,n])),f&&t.event.trigger("ajaxComplete",[y,h]),f&&!--t.active&&t.event.trigger("ajaxStop"),h.complete&&h.complete.call(h.context,y,a),D=!0,h.timeout&&clearTimeout(w),setTimeout(function(){h.iframeTarget?m.attr("src",h.iframeSrc):m.remove(),y.responseXML=null},100)}}}var u,c,h,f,p,m,v,y,x,_,b,w,S=d[0],T=t.Deferred();if(T.abort=function(t){y.abort(t)},n)for(c=0;c'),m.css({position:"absolute",top:"-1000px",left:"-1000px"})),v=m[0],y={aborted:0,responseText:null,responseXML:null,status:0,statusText:"n/a",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(e){var n="timeout"===e?"timeout":"aborted";i("aborting upload... "+n),this.aborted=1;try{v.contentWindow.document.execCommand&&v.contentWindow.document.execCommand("Stop")}catch(r){}m.attr("src",h.iframeSrc),y.error=n,h.error&&h.error.call(h.context,y,n,e),f&&t.event.trigger("ajaxError",[y,h,n]),h.complete&&h.complete.call(h.context,y,n)}},f=h.global,f&&0===t.active++&&t.event.trigger("ajaxStart"),f&&t.event.trigger("ajaxSend",[y,h]),h.beforeSend&&h.beforeSend.call(h.context,y,h)===!1)return h.global&&t.active--,T.reject(),T;if(y.aborted)return T.reject(),T;x=S.clk,x&&(_=x.name,_&&!x.disabled&&(h.extraData=h.extraData||{},h.extraData[_]=x.value,"image"==x.type&&(h.extraData[_+".x"]=S.clk_x,h.extraData[_+".y"]=S.clk_y)));var C=1,A=2,k=t("meta[name=csrf-token]").attr("content"),P=t("meta[name=csrf-param]").attr("content");P&&k&&(h.extraData=h.extraData||{},h.extraData[P]=k),h.forceSync?o():setTimeout(o,10);var M,E,D,O=50,L=t.parseXML||function(t,e){return window.ActiveXObject?(e=new ActiveXObject("Microsoft.XMLDOM"),e.async="false",e.loadXML(t)):e=(new DOMParser).parseFromString(t,"text/xml"),e&&e.documentElement&&"parsererror"!=e.documentElement.nodeName?e:null},I=t.parseJSON||function(t){return window.eval("("+t+")")},N=function(e,n,i){var r=e.getResponseHeader("content-type")||"",a="xml"===n||!n&&r.indexOf("xml")>=0,o=a?e.responseXML:e.responseText;return a&&"parsererror"===o.documentElement.nodeName&&t.error&&t.error("parsererror"),i&&i.dataFilter&&(o=i.dataFilter(o,n)),"string"==typeof o&&("json"===n||!n&&r.indexOf("json")>=0?o=I(o):("script"===n||!n&&r.indexOf("javascript")>=0)&&t.globalEval(o)),o};return T}if(!this.length)return i("ajaxSubmit: skipping submit process - no element selected"),this;var l,u,c,d=this;"function"==typeof e?e={success:e}:void 0===e&&(e={}),l=e.type||this.attr2("method"),u=e.url||this.attr2("action"),c="string"==typeof u?t.trim(u):"",c=c||window.location.href||"",c&&(c=(c.match(/^([^#]+)/)||[])[1]),e=t.extend(!0,{url:c,success:t.ajaxSettings.success,type:l||t.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},e);var h={};if(this.trigger("form-pre-serialize",[this,e,h]),h.veto)return i("ajaxSubmit: submit vetoed via form-pre-serialize trigger"),this;if(e.beforeSerialize&&e.beforeSerialize(this,e)===!1)return i("ajaxSubmit: submit aborted via beforeSerialize callback"),this;var f=e.traditional;void 0===f&&(f=t.ajaxSettings.traditional);var p,g=[],m=this.formToArray(e.semantic,g);if(e.data&&(e.extraData=e.data,p=t.param(e.data,f)),e.beforeSubmit&&e.beforeSubmit(m,this,e)===!1)return i("ajaxSubmit: submit aborted via beforeSubmit callback"),this;if(this.trigger("form-submit-validate",[m,this,e,h]),h.veto)return i("ajaxSubmit: submit vetoed via form-submit-validate trigger"),this;var v=t.param(m,f);p&&(v=v?v+"&"+p:p),"GET"==e.type.toUpperCase()?(e.url+=(e.url.indexOf("?")>=0?"&":"?")+v,e.data=null):e.data=v;var y=[];if(e.resetForm&&y.push(function(){d.resetForm()}),e.clearForm&&y.push(function(){d.clearForm(e.includeHidden)}),!e.dataType&&e.target){var x=e.success||function(){};y.push(function(n){var i=e.replaceTarget?"replaceWith":"html";t(e.target)[i](n).each(x,arguments)})}else e.success&&y.push(e.success);if(e.success=function(t,n,i){for(var r=e.context||this,a=0,o=y.length;a0,T="multipart/form-data",C=d.attr("enctype")==T||d.attr("encoding")==T,A=r.fileapi&&r.formdata;i("fileAPI :"+A);var k,P=(S||C)&&!A;e.iframe!==!1&&(e.iframe||P)?e.closeKeepAlive?t.get(e.closeKeepAlive,function(){k=s(m)}):k=s(m):k=(S||C)&&A?o(m):t.ajax(e),d.removeData("jqxhr").data("jqxhr",k);for(var M=0;M").attr("name",n.submitButton.name).val(t(n.submitButton).val()).appendTo(n.currentForm)),r=n.settings.submitHandler.call(n,n.currentForm,e),n.submitButton&&i.remove(),void 0!==r&&r)}return n.settings.debug&&e.preventDefault(),n.cancelSubmit?(n.cancelSubmit=!1,i()):n.form()?n.pendingRequest?(n.formSubmitted=!0,!1):i():(n.focusInvalid(),!1)})),n)},valid:function(){var e,n,i;return t(this[0]).is("form")?e=this.validate().form():(i=[],e=!0,n=t(this[0].form).validate(),this.each(function(){e=n.element(this)&&e,e||(i=i.concat(n.errorList))}),n.errorList=i),e},rules:function(e,n){if(this.length){var i,r,a,o,s,l,u=this[0];if(e)switch(i=t.data(u.form,"validator").settings,r=i.rules,a=t.validator.staticRules(u),e){case"add":t.extend(a,t.validator.normalizeRule(n)),delete a.messages,r[u.name]=a,n.messages&&(i.messages[u.name]=t.extend(i.messages[u.name],n.messages));break;case"remove": -return n?(l={},t.each(n.split(/\s/),function(e,n){l[n]=a[n],delete a[n],"required"===n&&t(u).removeAttr("aria-required")}),l):(delete r[u.name],a)}return o=t.validator.normalizeRules(t.extend({},t.validator.classRules(u),t.validator.attributeRules(u),t.validator.dataRules(u),t.validator.staticRules(u)),u),o.required&&(s=o.required,delete o.required,o=t.extend({required:s},o),t(u).attr("aria-required","true")),o.remote&&(s=o.remote,delete o.remote,o=t.extend(o,{remote:s})),o}}}),t.extend(t.expr[":"],{blank:function(e){return!t.trim(""+t(e).val())},filled:function(e){var n=t(e).val();return null!==n&&!!t.trim(""+n)},unchecked:function(e){return!t(e).prop("checked")}}),t.validator=function(e,n){this.settings=t.extend(!0,{},t.validator.defaults,e),this.currentForm=n,this.init()},t.validator.format=function(e,n){return 1===arguments.length?function(){var n=t.makeArray(arguments);return n.unshift(e),t.validator.format.apply(this,n)}:void 0===n?e:(arguments.length>2&&n.constructor!==Array&&(n=t.makeArray(arguments).slice(1)),n.constructor!==Array&&(n=[n]),t.each(n,function(t,n){e=e.replace(new RegExp("\\{"+t+"\\}","g"),function(){return n})}),e)},t.extend(t.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:t([]),errorLabelContainer:t([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(t){this.lastActive=t,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,t,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(t)))},onfocusout:function(t){this.checkable(t)||!(t.name in this.submitted)&&this.optional(t)||this.element(t)},onkeyup:function(e,n){var i=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===n.which&&""===this.elementValue(e)||t.inArray(n.keyCode,i)!==-1||(e.name in this.submitted||e.name in this.invalid)&&this.element(e)},onclick:function(t){t.name in this.submitted?this.element(t):t.parentNode.name in this.submitted&&this.element(t.parentNode)},highlight:function(e,n,i){"radio"===e.type?this.findByName(e.name).addClass(n).removeClass(i):t(e).addClass(n).removeClass(i)},unhighlight:function(e,n,i){"radio"===e.type?this.findByName(e.name).removeClass(n).addClass(i):t(e).removeClass(n).addClass(i)}},setDefaults:function(e){t.extend(t.validator.defaults,e)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:t.validator.format("Please enter no more than {0} characters."),minlength:t.validator.format("Please enter at least {0} characters."),rangelength:t.validator.format("Please enter a value between {0} and {1} characters long."),range:t.validator.format("Please enter a value between {0} and {1}."),max:t.validator.format("Please enter a value less than or equal to {0}."),min:t.validator.format("Please enter a value greater than or equal to {0}."),step:t.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function e(e){var n=t.data(this.form,"validator"),i="on"+e.type.replace(/^validate/,""),r=n.settings;r[i]&&!t(this).is(r.ignore)&&r[i].call(n,this,e)}this.labelContainer=t(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||t(this.currentForm),this.containers=t(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var n,i=this.groups={};t.each(this.settings.groups,function(e,n){"string"==typeof n&&(n=n.split(/\s/)),t.each(n,function(t,n){i[n]=e})}),n=this.settings.rules,t.each(n,function(e,i){n[e]=t.validator.normalizeRule(i)}),t(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable]",e).on("click.validate","select, option, [type='radio'], [type='checkbox']",e),this.settings.invalidHandler&&t(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler),t(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),t.extend(this.submitted,this.errorMap),this.invalid=t.extend({},this.errorMap),this.valid()||t(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var t=0,e=this.currentElements=this.elements();e[t];t++)this.check(e[t]);return this.valid()},element:function(e){var n,i,r=this.clean(e),a=this.validationTargetFor(r),o=this,s=!0;return void 0===a?delete this.invalid[r.name]:(this.prepareElement(a),this.currentElements=t(a),i=this.groups[a.name],i&&t.each(this.groups,function(t,e){e===i&&t!==a.name&&(r=o.validationTargetFor(o.clean(o.findByName(t))),r&&r.name in o.invalid&&(o.currentElements.push(r),s=s&&o.check(r)))}),n=this.check(a)!==!1,s=s&&n,n?this.invalid[a.name]=!1:this.invalid[a.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),t(e).attr("aria-invalid",!n)),s},showErrors:function(e){if(e){var n=this;t.extend(this.errorMap,e),this.errorList=t.map(this.errorMap,function(t,e){return{message:t,element:n.findByName(e)[0]}}),this.successList=t.grep(this.successList,function(t){return!(t.name in e)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){t.fn.resetForm&&t(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var e=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(e)},resetElements:function(t){var e;if(this.settings.unhighlight)for(e=0;t[e];e++)this.settings.unhighlight.call(this,t[e],this.settings.errorClass,""),this.findByName(t[e].name).removeClass(this.settings.validClass);else t.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(t){var e,n=0;for(e in t)t[e]&&n++;return n},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(t){t.not(this.containers).text(""),this.addWrapper(t).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{t(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(e){}},findLastActive:function(){var e=this.lastActive;return e&&1===t.grep(this.errorList,function(t){return t.element.name===e.name}).length&&e},elements:function(){var e=this,n={};return t(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var i=this.name||t(this).attr("name");return!i&&e.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=t(this).closest("form")[0]),!(i in n||!e.objectLength(t(this).rules()))&&(n[i]=!0,!0)})},clean:function(e){return t(e)[0]},errors:function(){var e=this.settings.errorClass.split(" ").join(".");return t(this.settings.errorElement+"."+e,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=t([]),this.toHide=t([])},reset:function(){this.resetInternals(),this.currentElements=t([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(t){this.reset(),this.toHide=this.errorsFor(t)},elementValue:function(e){var n,i,r=t(e),a=e.type;return"radio"===a||"checkbox"===a?this.findByName(e.name).filter(":checked").val():"number"===a&&"undefined"!=typeof e.validity?e.validity.badInput?"NaN":r.val():(n=e.hasAttribute("contenteditable")?r.text():r.val(),"file"===a?"C:\\fakepath\\"===n.substr(0,12)?n.substr(12):(i=n.lastIndexOf("/"),i>=0?n.substr(i+1):(i=n.lastIndexOf("\\"),i>=0?n.substr(i+1):n)):"string"==typeof n?n.replace(/\r/g,""):n)},check:function(e){e=this.validationTargetFor(this.clean(e));var n,i,r,a=t(e).rules(),o=t.map(a,function(t,e){return e}).length,s=!1,l=this.elementValue(e);if("function"==typeof a.normalizer){if(l=a.normalizer.call(e,l),"string"!=typeof l)throw new TypeError("The normalizer should return a string value.");delete a.normalizer}for(i in a){r={method:i,parameters:a[i]};try{if(n=t.validator.methods[i].call(this,l,e,r.parameters),"dependency-mismatch"===n&&1===o){s=!0;continue}if(s=!1,"pending"===n)return void(this.toHide=this.toHide.not(this.errorsFor(e)));if(!n)return this.formatAndAdd(e,r),!1}catch(u){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+e.id+", check the '"+r.method+"' method.",u),u instanceof TypeError&&(u.message+=". Exception occurred when checking element "+e.id+", check the '"+r.method+"' method."),u}}if(!s)return this.objectLength(a)&&this.successList.push(e),!0},customDataMessage:function(e,n){return t(e).data("msg"+n.charAt(0).toUpperCase()+n.substring(1).toLowerCase())||t(e).data("msg")},customMessage:function(t,e){var n=this.settings.messages[t];return n&&(n.constructor===String?n:n[e])},findDefined:function(){for(var t=0;tWarning: No message defined for "+e.name+""),r=/\$?\{(\d+)\}/g;return"function"==typeof i?i=i.call(this,n.parameters,e):r.test(i)&&(i=t.validator.format(i.replace(r,"{$1}"),n.parameters)),i},formatAndAdd:function(t,e){var n=this.defaultMessage(t,e);this.errorList.push({message:n,element:t,method:e.method}),this.errorMap[t.name]=n,this.submitted[t.name]=n},addWrapper:function(t){return this.settings.wrapper&&(t=t.add(t.parent(this.settings.wrapper))),t},defaultShowErrors:function(){var t,e,n;for(t=0;this.errorList[t];t++)n=this.errorList[t],this.settings.highlight&&this.settings.highlight.call(this,n.element,this.settings.errorClass,this.settings.validClass),this.showLabel(n.element,n.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(t=0;this.successList[t];t++)this.showLabel(this.successList[t]);if(this.settings.unhighlight)for(t=0,e=this.validElements();e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return t(this.errorList).map(function(){return this.element})},showLabel:function(e,n){var i,r,a,o,s=this.errorsFor(e),l=this.idOrName(e),u=t(e).attr("aria-describedby");s.length?(s.removeClass(this.settings.validClass).addClass(this.settings.errorClass),s.html(n)):(s=t("<"+this.settings.errorElement+">").attr("id",l+"-error").addClass(this.settings.errorClass).html(n||""),i=s,this.settings.wrapper&&(i=s.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(i):this.settings.errorPlacement?this.settings.errorPlacement(i,t(e)):i.insertAfter(e),s.is("label")?s.attr("for",l):0===s.parents("label[for='"+this.escapeCssMeta(l)+"']").length&&(a=s.attr("id"),u?u.match(new RegExp("\\b"+this.escapeCssMeta(a)+"\\b"))||(u+=" "+a):u=a,t(e).attr("aria-describedby",u),r=this.groups[e.name],r&&(o=this,t.each(o.groups,function(e,n){n===r&&t("[name='"+o.escapeCssMeta(e)+"']",o.currentForm).attr("aria-describedby",s.attr("id"))})))),!n&&this.settings.success&&(s.text(""),"string"==typeof this.settings.success?s.addClass(this.settings.success):this.settings.success(s,e)),this.toShow=this.toShow.add(s)},errorsFor:function(e){var n=this.escapeCssMeta(this.idOrName(e)),i=t(e).attr("aria-describedby"),r="label[for='"+n+"'], label[for='"+n+"'] *";return i&&(r=r+", #"+this.escapeCssMeta(i).replace(/\s+/g,", #")),this.errors().filter(r)},escapeCssMeta:function(t){return t.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(t){return this.groups[t.name]||(this.checkable(t)?t.name:t.id||t.name)},validationTargetFor:function(e){return this.checkable(e)&&(e=this.findByName(e.name)),t(e).not(this.settings.ignore)[0]},checkable:function(t){return/radio|checkbox/i.test(t.type)},findByName:function(e){return t(this.currentForm).find("[name='"+this.escapeCssMeta(e)+"']")},getLength:function(e,n){switch(n.nodeName.toLowerCase()){case"select":return t("option:selected",n).length;case"input":if(this.checkable(n))return this.findByName(n.name).filter(":checked").length}return e.length},depend:function(t,e){return!this.dependTypes[typeof t]||this.dependTypes[typeof t](t,e)},dependTypes:{"boolean":function(t){return t},string:function(e,n){return!!t(e,n.form).length},"function":function(t,e){return t(e)}},optional:function(e){var n=this.elementValue(e);return!t.validator.methods.required.call(this,n,e)&&"dependency-mismatch"},startRequest:function(e){this.pending[e.name]||(this.pendingRequest++,t(e).addClass(this.settings.pendingClass),this.pending[e.name]=!0)},stopRequest:function(e,n){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[e.name],t(e).removeClass(this.settings.pendingClass),n&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(t(this.currentForm).submit(),this.formSubmitted=!1):!n&&0===this.pendingRequest&&this.formSubmitted&&(t(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(e,n){return t.data(e,"previousValue")||t.data(e,"previousValue",{old:null,valid:!0,message:this.defaultMessage(e,{method:n})})},destroy:function(){this.resetForm(),t(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(e,n){e.constructor===String?this.classRuleSettings[e]=n:t.extend(this.classRuleSettings,e)},classRules:function(e){var n={},i=t(e).attr("class");return i&&t.each(i.split(" "),function(){this in t.validator.classRuleSettings&&t.extend(n,t.validator.classRuleSettings[this])}),n},normalizeAttributeRule:function(t,e,n,i){/min|max|step/.test(n)&&(null===e||/number|range|text/.test(e))&&(i=Number(i),isNaN(i)&&(i=void 0)),i||0===i?t[n]=i:e===n&&"range"!==e&&(t[n]=!0)},attributeRules:function(e){var n,i,r={},a=t(e),o=e.getAttribute("type");for(n in t.validator.methods)"required"===n?(i=e.getAttribute(n),""===i&&(i=!0),i=!!i):i=a.attr(n),this.normalizeAttributeRule(r,o,n,i);return r.maxlength&&/-1|2147483647|524288/.test(r.maxlength)&&delete r.maxlength,r},dataRules:function(e){var n,i,r={},a=t(e),o=e.getAttribute("type");for(n in t.validator.methods)i=a.data("rule"+n.charAt(0).toUpperCase()+n.substring(1).toLowerCase()),this.normalizeAttributeRule(r,o,n,i);return r},staticRules:function(e){var n={},i=t.data(e.form,"validator");return i.settings.rules&&(n=t.validator.normalizeRule(i.settings.rules[e.name])||{}),n},normalizeRules:function(e,n){return t.each(e,function(i,r){if(r===!1)return void delete e[i];if(r.param||r.depends){var a=!0;switch(typeof r.depends){case"string":a=!!t(r.depends,n.form).length;break;case"function":a=r.depends.call(n,n)}a?e[i]=void 0===r.param||r.param:(t.data(n.form,"validator").resetElements(t(n)),delete e[i])}}),t.each(e,function(i,r){e[i]=t.isFunction(r)&&"normalizer"!==i?r(n):r}),t.each(["minlength","maxlength"],function(){e[this]&&(e[this]=Number(e[this]))}),t.each(["rangelength","range"],function(){var n;e[this]&&(t.isArray(e[this])?e[this]=[Number(e[this][0]),Number(e[this][1])]:"string"==typeof e[this]&&(n=e[this].replace(/[\[\]]/g,"").split(/[\s,]+/),e[this]=[Number(n[0]),Number(n[1])]))}),t.validator.autoCreateRanges&&(null!=e.min&&null!=e.max&&(e.range=[e.min,e.max],delete e.min,delete e.max),null!=e.minlength&&null!=e.maxlength&&(e.rangelength=[e.minlength,e.maxlength],delete e.minlength,delete e.maxlength)),e},normalizeRule:function(e){if("string"==typeof e){var n={};t.each(e.split(/\s/),function(){n[this]=!0}),e=n}return e},addMethod:function(e,n,i){t.validator.methods[e]=n,t.validator.messages[e]=void 0!==i?i:t.validator.messages[e],n.length<3&&t.validator.addClassRules(e,t.validator.normalizeRule(e))},methods:{required:function(e,n,i){if(!this.depend(i,n))return"dependency-mismatch";if("select"===n.nodeName.toLowerCase()){var r=t(n).val();return r&&r.length>0}return this.checkable(n)?this.getLength(e,n)>0:e.length>0},email:function(t,e){return this.optional(e)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(t)},url:function(t,e){return this.optional(e)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(t)},date:function(t,e){return this.optional(e)||!/Invalid|NaN/.test(new Date(t).toString())},dateISO:function(t,e){return this.optional(e)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(t)},number:function(t,e){return this.optional(e)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t)},digits:function(t,e){return this.optional(e)||/^\d+$/.test(t)},minlength:function(e,n,i){var r=t.isArray(e)?e.length:this.getLength(e,n);return this.optional(n)||r>=i},maxlength:function(e,n,i){var r=t.isArray(e)?e.length:this.getLength(e,n);return this.optional(n)||r<=i},rangelength:function(e,n,i){var r=t.isArray(e)?e.length:this.getLength(e,n);return this.optional(n)||r>=i[0]&&r<=i[1]},min:function(t,e,n){return this.optional(e)||t>=n},max:function(t,e,n){return this.optional(e)||t<=n},range:function(t,e,n){return this.optional(e)||t>=n[0]&&t<=n[1]},step:function(e,n,i){var r=t(n).attr("type"),a="Step attribute on input type "+r+" is not supported.",o=["text","number","range"],s=new RegExp("\\b"+r+"\\b"),l=r&&!s.test(o.join());if(l)throw new Error(a);return this.optional(n)||e%i===0},equalTo:function(e,n,i){var r=t(i);return this.settings.onfocusout&&r.not(".validate-equalTo-blur").length&&r.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){t(n).valid()}),e===r.val()},remote:function(e,n,i,r){if(this.optional(n))return"dependency-mismatch";r="string"==typeof r&&r||"remote";var a,o,s,l=this.previousValue(n,r);return this.settings.messages[n.name]||(this.settings.messages[n.name]={}),l.originalMessage=l.originalMessage||this.settings.messages[n.name][r],this.settings.messages[n.name][r]=l.message,i="string"==typeof i&&{url:i}||i,s=t.param(t.extend({data:e},i.data)),l.old===s?l.valid:(l.old=s,a=this,this.startRequest(n),o={},o[n.name]=e,t.ajax(t.extend(!0,{mode:"abort",port:"validate"+n.name,dataType:"json",data:o,context:a.currentForm,success:function(t){var i,o,s,u=t===!0||"true"===t;a.settings.messages[n.name][r]=l.originalMessage,u?(s=a.formSubmitted,a.resetInternals(),a.toHide=a.errorsFor(n),a.formSubmitted=s,a.successList.push(n),a.invalid[n.name]=!1,a.showErrors()):(i={},o=t||a.defaultMessage(n,{method:r,parameters:e}),i[n.name]=l.message=o,a.invalid[n.name]=!0,a.showErrors(i)),l.valid=u,a.stopRequest(n,u)}},i)),"pending")}}});var e,n={};t.ajaxPrefilter?t.ajaxPrefilter(function(t,e,i){var r=t.port;"abort"===t.mode&&(n[r]&&n[r].abort(),n[r]=i)}):(e=t.ajax,t.ajax=function(i){var r=("mode"in i?i:t.ajaxSettings).mode,a=("port"in i?i:t.ajaxSettings).port;return"abort"===r?(n[a]&&n[a].abort(),n[a]=e.apply(this,arguments),n[a]):e.apply(this,arguments)})}),function(t){"use strict";if("function"==typeof define&&define.amd)define(["jquery","moment"],t);else if("object"==typeof exports)t(require("jquery"),require("moment"));else{if("undefined"==typeof jQuery)throw"bootstrap-datetimepicker requires jQuery to be loaded first";if("undefined"==typeof moment)throw"bootstrap-datetimepicker requires Moment.js to be loaded first";t(jQuery,moment)}}(function(t,e){"use strict";if(!e)throw new Error("bootstrap-datetimepicker requires Moment.js to be loaded first");var n=function(n,i){var r,a,o,s,l,u={},c=e().startOf("d"),d=c.clone(),h=!0,f=!1,p=!1,g=0,m=[{clsName:"days",navFnc:"M",navStep:1},{clsName:"months",navFnc:"y",navStep:1},{clsName:"years",navFnc:"y",navStep:10},{clsName:"decades",navFnc:"y",navStep:100}],v=["days","months","years","decades"],y=["top","bottom","auto"],x=["left","right","auto"],_=["default","top","bottom"],b={up:38,38:"up",down:40,40:"down",left:37,37:"left",right:39,39:"right",tab:9,9:"tab",escape:27,27:"escape",enter:13,13:"enter",pageUp:33,33:"pageUp",pageDown:34,34:"pageDown",shift:16,16:"shift",control:17,17:"control",space:32,32:"space",t:84,84:"t","delete":46,46:"delete"},w={},S=function(t){if("string"!=typeof t||t.length>1)throw new TypeError("isEnabled expects a single character string parameter");switch(t){case"y":return o.indexOf("Y")!==-1;case"M":return o.indexOf("M")!==-1;case"d":return o.toLowerCase().indexOf("d")!==-1;case"h":case"H":return o.toLowerCase().indexOf("h")!==-1;case"m":return o.indexOf("m")!==-1;case"s":return o.indexOf("s")!==-1;default:return!1}},T=function(){return S("h")||S("m")||S("s")},C=function(){return S("y")||S("M")||S("d")},A=function(){var e=t("
    ").append(t("").append(t("").append(t("").append(t("\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\t\toption: [ 1, \"\" ],\n\t\tlegend: [ 1, \"
    \", \"
    \" ],\n\t\tarea: [ 1, \"\", \"\" ],\n\t\tparam: [ 1, \"\", \"\" ],\n\t\tthead: [ 1, \"
    ").addClass("prev").attr("data-action","previous").append(t("").addClass(i.icons.previous))).append(t("").addClass("picker-switch").attr("data-action","pickerSwitch").attr("colspan",i.calendarWeeks?"6":"5")).append(t("").addClass("next").attr("data-action","next").append(t("").addClass(i.icons.next)))),n=t("
    ").attr("colspan",i.calendarWeeks?"8":"7")));return[t("
    ").addClass("datepicker-days").append(t("").addClass("table-condensed").append(e).append(t(""))),t("
    ").addClass("datepicker-months").append(t("
    ").addClass("table-condensed").append(e.clone()).append(n.clone())),t("
    ").addClass("datepicker-years").append(t("
    ").addClass("table-condensed").append(e.clone()).append(n.clone())),t("
    ").addClass("datepicker-decades").append(t("
    ").addClass("table-condensed").append(e.clone()).append(n.clone()))]},k=function(){var e=t(""),n=t(""),r=t("");return S("h")&&(e.append(t(" from table fragments - if ( !jQuery.support.tbody ) { - - // String was a
    ").append(t("").attr({href:"#",tabindex:"-1",title:"Increment Hour"}).addClass("btn").attr("data-action","incrementHours").append(t("").addClass(i.icons.up)))),n.append(t("").append(t("").addClass("timepicker-hour").attr({"data-time-component":"hours",title:"Pick Hour"}).attr("data-action","showHours"))),r.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:"Decrement Hour"}).addClass("btn").attr("data-action","decrementHours").append(t("").addClass(i.icons.down))))),S("m")&&(S("h")&&(e.append(t("").addClass("separator")),n.append(t("").addClass("separator").html(":")),r.append(t("").addClass("separator"))),e.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:"Increment Minute"}).addClass("btn").attr("data-action","incrementMinutes").append(t("").addClass(i.icons.up)))),n.append(t("").append(t("").addClass("timepicker-minute").attr({"data-time-component":"minutes",title:"Pick Minute"}).attr("data-action","showMinutes"))),r.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:"Decrement Minute"}).addClass("btn").attr("data-action","decrementMinutes").append(t("").addClass(i.icons.down))))),S("s")&&(S("m")&&(e.append(t("").addClass("separator")),n.append(t("").addClass("separator").html(":")),r.append(t("").addClass("separator"))),e.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:"Increment Second"}).addClass("btn").attr("data-action","incrementSeconds").append(t("").addClass(i.icons.up)))),n.append(t("").append(t("").addClass("timepicker-second").attr({"data-time-component":"seconds",title:"Pick Second"}).attr("data-action","showSeconds"))),r.append(t("").append(t("").attr({href:"#",tabindex:"-1",title:"Decrement Second"}).addClass("btn").attr("data-action","decrementSeconds").append(t("").addClass(i.icons.down))))),a||(e.append(t("").addClass("separator")),n.append(t("").append(t("").addClass("separator"))),t("
    ").addClass("timepicker-picker").append(t("").addClass("table-condensed").append([e,n,r]))},P=function(){var e=t("
    ").addClass("timepicker-hours").append(t("
    ").addClass("table-condensed")),n=t("
    ").addClass("timepicker-minutes").append(t("
    ").addClass("table-condensed")),i=t("
    ").addClass("timepicker-seconds").append(t("
    ").addClass("table-condensed")),r=[k()];return S("h")&&r.push(e),S("m")&&r.push(n),S("s")&&r.push(i),r},M=function(){var e=[];return i.showTodayButton&&e.push(t("\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
    ", "
    " ], - area: [ 1, "", "" ], - param: [ 1, "", "" ], - thead: [ 1, "
    ").append(t("").attr({"data-action":"today",title:i.tooltips.today}).append(t("").addClass(i.icons.today)))),!i.sideBySide&&C()&&T()&&e.push(t("").append(t("").attr({"data-action":"togglePicker",title:"Select Time"}).append(t("").addClass(i.icons.time)))),i.showClear&&e.push(t("").append(t("").attr({"data-action":"clear",title:i.tooltips.clear}).append(t("").addClass(i.icons.clear)))),i.showClose&&e.push(t("").append(t("").attr({"data-action":"close",title:i.tooltips.close}).append(t("").addClass(i.icons.close)))),t("").addClass("table-condensed").append(t("").append(t("").append(e)))},E=function(){var e=t("
    ").addClass("bootstrap-datetimepicker-widget dropdown-menu"),n=t("
    ").addClass("datepicker").append(A()),r=t("
    ").addClass("timepicker").append(P()),o=t("
      ").addClass("list-unstyled"),s=t("
    • ").addClass("picker-switch"+(i.collapse?" accordion-toggle":"")).append(M());return i.inline&&e.removeClass("dropdown-menu"),a&&e.addClass("usetwentyfour"),S("s")&&!a&&e.addClass("wider"),i.sideBySide&&C()&&T()?(e.addClass("timepicker-sbs"),"top"===i.toolbarPlacement&&e.append(s),e.append(t("
      ").addClass("row").append(n.addClass("col-md-6")).append(r.addClass("col-md-6"))),"bottom"===i.toolbarPlacement&&e.append(s),e):("top"===i.toolbarPlacement&&o.append(s),C()&&o.append(t("
    • ").addClass(i.collapse&&T()?"collapse in":"").append(n)),"default"===i.toolbarPlacement&&o.append(s),T()&&o.append(t("
    • ").addClass(i.collapse&&C()?"collapse":"").append(r)),"bottom"===i.toolbarPlacement&&o.append(s),e.append(o))},D=function(){var e,r={};return e=n.is("input")||i.inline?n.data():n.find("input").data(),e.dateOptions&&e.dateOptions instanceof Object&&(r=t.extend(!0,r,e.dateOptions)),t.each(i,function(t){var n="date"+t.charAt(0).toUpperCase()+t.slice(1);void 0!==e[n]&&(r[t]=e[n])}),r},O=function(){var e,r=(f||n).position(),a=(f||n).offset(),o=i.widgetPositioning.vertical,s=i.widgetPositioning.horizontal;if(i.widgetParent)e=i.widgetParent.append(p);else if(n.is("input"))e=n.after(p).parent();else{if(i.inline)return void(e=n.append(p));e=n,n.children().first().after(p)}if("auto"===o&&(o=a.top+1.5*p.height()>=t(window).height()+t(window).scrollTop()&&p.height()+n.outerHeight()t(window).width()?"right":"left"),"top"===o?p.addClass("top").removeClass("bottom"):p.addClass("bottom").removeClass("top"),"right"===s?p.addClass("pull-right"):p.removeClass("pull-right"),"relative"!==e.css("position")&&(e=e.parents().filter(function(){return"relative"===t(this).css("position")}).first()),0===e.length)throw new Error("datetimepicker component should be placed within a relative positioned container");p.css({top:"top"===o?"auto":r.top+n.outerHeight(),bottom:"top"===o?r.top+n.outerHeight():"auto",left:"left"===s?e===n?0:r.left:"auto",right:"left"===s?"auto":e.outerWidth()-n.outerWidth()-(e===n?0:r.left)})},L=function(t){"dp.change"===t.type&&(t.date&&t.date.isSame(t.oldDate)||!t.date&&!t.oldDate)||n.trigger(t)},I=function(t){"y"===t&&(t="YYYY"),L({type:"dp.update",change:t,viewDate:d.clone()})},N=function(t){p&&(t&&(l=Math.max(g,Math.min(3,l+t))),p.find(".datepicker > div").hide().filter(".datepicker-"+m[l].clsName).show())},R=function(){var e=t("
    "),n=d.clone().startOf("w").startOf("d");for(i.calendarWeeks===!0&&e.append(t(""),i.calendarWeeks&&r.append('"),u.push(r)),a="",n.isBefore(d,"M")&&(a+=" old"),n.isAfter(d,"M")&&(a+=" new"),n.isSame(c,"d")&&!h&&(a+=" active"),H(n,"d")||(a+=" disabled"),n.isSame(e(),"d")&&(a+=" today"),0!==n.day()&&6!==n.day()||(a+=" weekend"),r.append('"),n.add(1,"d");s.find("tbody").empty().append(u),z(),Y(),B()}},q=function(){var e=p.find(".timepicker-hours table"),n=d.clone().startOf("d"),i=[],r=t("");for(d.hour()>11&&!a&&n.hour(12);n.isSame(d,"d")&&(a||d.hour()<12&&n.hour()<12||d.hour()>11);)n.hour()%4===0&&(r=t(""),i.push(r)),r.append('"),n.add(1,"h");e.empty().append(i)},U=function(){for(var e=p.find(".timepicker-minutes table"),n=d.clone().startOf("h"),r=[],a=t(""),o=1===i.stepping?5:i.stepping;d.isSame(n,"h");)n.minute()%(4*o)===0&&(a=t(""),r.push(a)),a.append('"),n.add(o,"m");e.empty().append(r)},W=function(){for(var e=p.find(".timepicker-seconds table"),n=d.clone().startOf("m"),i=[],r=t("");d.isSame(n,"m");)n.second()%20===0&&(r=t(""),i.push(r)),r.append('"),n.add(5,"s");e.empty().append(i)},Q=function(){var t,e,n=p.find(".timepicker span[data-time-component]");a||(t=p.find(".timepicker [data-action=togglePeriod]"),e=c.clone().add(c.hours()>=12?-12:12,"h"),t.text(c.format("A")),H(e,"h")?t.removeClass("disabled"):t.addClass("disabled")),n.filter("[data-time-component=hours]").text(c.format(a?"HH":"hh")),n.filter("[data-time-component=minutes]").text(c.format("mm")),n.filter("[data-time-component=seconds]").text(c.format("ss")),q(),U(),W()},K=function(){p&&(X(),Q())},Z=function(t){var e=h?null:c;return t?(t=t.clone().locale(i.locale),1!==i.stepping&&t.minutes(Math.round(t.minutes()/i.stepping)*i.stepping%60).seconds(0),void(H(t)?(c=t,d=c.clone(),r.val(c.format(o)),n.data("date",c.format(o)),h=!1,K(),L({type:"dp.change",date:c.clone(),oldDate:e})):(i.keepInvalid||r.val(h?"":c.format(o)),L({type:"dp.error",date:t})))):(h=!0,r.val(""),n.data("date",""),L({type:"dp.change",date:!1,oldDate:e}),void K())},J=function(){var e=!1;return p?(p.find(".collapse").each(function(){var n=t(this).data("collapse");return!n||!n.transitioning||(e=!0,!1)}),e?u:(f&&f.hasClass("btn")&&f.toggleClass("active"),p.hide(),t(window).off("resize",O),p.off("click","[data-action]"),p.off("mousedown",!1),p.remove(),p=!1,L({type:"dp.hide",date:c.clone()}),r.blur(),u)):u},tt=function(){Z(null)},et={next:function(){var t=m[l].navFnc;d.add(m[l].navStep,t),X(),I(t)},previous:function(){var t=m[l].navFnc;d.subtract(m[l].navStep,t),X(),I(t)},pickerSwitch:function(){N(1)},selectMonth:function(e){var n=t(e.target).closest("tbody").find("span").index(t(e.target));d.month(n),l===g?(Z(c.clone().year(d.year()).month(d.month())),i.inline||J()):(N(-1),X()),I("M")},selectYear:function(e){var n=parseInt(t(e.target).text(),10)||0;d.year(n),l===g?(Z(c.clone().year(d.year())),i.inline||J()):(N(-1),X()),I("YYYY")},selectDecade:function(e){var n=parseInt(t(e.target).data("selection"),10)||0;d.year(n),l===g?(Z(c.clone().year(d.year())),i.inline||J()):(N(-1),X()),I("YYYY")},selectDay:function(e){var n=d.clone();t(e.target).is(".old")&&n.subtract(1,"M"),t(e.target).is(".new")&&n.add(1,"M"),Z(n.date(parseInt(t(e.target).text(),10))),T()||i.keepOpen||i.inline||J()},incrementHours:function(){var t=c.clone().add(1,"h");H(t,"h")&&Z(t)},incrementMinutes:function(){var t=c.clone().add(i.stepping,"m");H(t,"m")&&Z(t)},incrementSeconds:function(){var t=c.clone().add(1,"s");H(t,"s")&&Z(t)},decrementHours:function(){var t=c.clone().subtract(1,"h");H(t,"h")&&Z(t)},decrementMinutes:function(){var t=c.clone().subtract(i.stepping,"m");H(t,"m")&&Z(t)},decrementSeconds:function(){var t=c.clone().subtract(1,"s");H(t,"s")&&Z(t)},togglePeriod:function(){Z(c.clone().add(c.hours()>=12?-12:12,"h"))},togglePicker:function(e){var n,r=t(e.target),a=r.closest("ul"),o=a.find(".in"),s=a.find(".collapse:not(.in)");if(o&&o.length){if(n=o.data("collapse"),n&&n.transitioning)return;o.collapse?(o.collapse("hide"),s.collapse("show")):(o.removeClass("in"),s.addClass("in")),r.is("span")?r.toggleClass(i.icons.time+" "+i.icons.date):r.find("span").toggleClass(i.icons.time+" "+i.icons.date)}},showPicker:function(){p.find(".timepicker > div:not(.timepicker-picker)").hide(),p.find(".timepicker .timepicker-picker").show()},showHours:function(){p.find(".timepicker .timepicker-picker").hide(),p.find(".timepicker .timepicker-hours").show()},showMinutes:function(){p.find(".timepicker .timepicker-picker").hide(),p.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){p.find(".timepicker .timepicker-picker").hide(),p.find(".timepicker .timepicker-seconds").show()},selectHour:function(e){var n=parseInt(t(e.target).text(),10);a||(c.hours()>=12?12!==n&&(n+=12):12===n&&(n=0)),Z(c.clone().hours(n)),et.showPicker.call(u)},selectMinute:function(e){Z(c.clone().minutes(parseInt(t(e.target).text(),10))),et.showPicker.call(u)},selectSecond:function(e){Z(c.clone().seconds(parseInt(t(e.target).text(),10))),et.showPicker.call(u)},clear:tt,today:function(){H(e(),"d")&&Z(e())},close:J},nt=function(e){return!t(e.currentTarget).is(".disabled")&&(et[t(e.currentTarget).data("action")].apply(u,arguments),!1)},it=function(){var n,a={year:function(t){return t.month(0).date(1).hours(0).seconds(0).minutes(0)},month:function(t){return t.date(1).hours(0).seconds(0).minutes(0)},day:function(t){return t.hours(0).seconds(0).minutes(0)},hour:function(t){return t.seconds(0).minutes(0)},minute:function(t){return t.seconds(0)}};return r.prop("disabled")||!i.ignoreReadonly&&r.prop("readonly")||p?u:(void 0!==r.val()&&0!==r.val().trim().length?Z(at(r.val().trim())):i.useCurrent&&h&&(r.is("input")&&0===r.val().trim().length||i.inline)&&(n=e(),"string"==typeof i.useCurrent&&(n=a[i.useCurrent](n)),Z(n)),p=E(),R(),$(),p.find(".timepicker-hours").hide(),p.find(".timepicker-minutes").hide(),p.find(".timepicker-seconds").hide(),K(),N(),t(window).on("resize",O),p.on("click","[data-action]",nt),p.on("mousedown",!1),f&&f.hasClass("btn")&&f.toggleClass("active"),p.show(),O(),i.focusOnShow&&!r.is(":focus")&&r.focus(),L({type:"dp.show"}),u)},rt=function(){return p?J():it()},at=function(t){return t=void 0===i.parseInputDate?e.isMoment(t)||t instanceof Date?e(t):e(t,s,i.useStrict):i.parseInputDate(t),t.locale(i.locale),t},ot=function(t){var e,n,r,a,o=null,s=[],l={},c=t.which,d="p";w[c]=d;for(e in w)w.hasOwnProperty(e)&&w[e]===d&&(s.push(e),parseInt(e,10)!==c&&(l[e]=!0));for(e in i.keyBinds)if(i.keyBinds.hasOwnProperty(e)&&"function"==typeof i.keyBinds[e]&&(r=e.split(" "),r.length===s.length&&b[c]===r[r.length-1])){for(a=!0,n=r.length-2;n>=0;n--)if(!(b[r[n]]in l)){a=!1;break}if(a){o=i.keyBinds[e];break}}o&&(o.call(u,p),t.stopPropagation(),t.preventDefault())},st=function(t){w[t.which]="r",t.stopPropagation(),t.preventDefault()},lt=function(e){var n=t(e.target).val().trim(),i=n?at(n):null;return Z(i),e.stopImmediatePropagation(),!1},ut=function(){r.on({change:lt,blur:i.debug?"":J,keydown:ot,keyup:st,focus:i.allowInputToggle?it:""}),n.is("input")?r.on({focus:it}):f&&(f.on("click",rt),f.on("mousedown",!1))},ct=function(){r.off({change:lt,blur:blur,keydown:ot,keyup:st,focus:i.allowInputToggle?J:""}),n.is("input")?r.off({focus:it}):f&&(f.off("click",rt),f.off("mousedown",!1))},dt=function(e){var n={};return t.each(e,function(){var t=at(this);t.isValid()&&(n[t.format("YYYY-MM-DD")]=!0)}),!!Object.keys(n).length&&n},ht=function(e){var n={};return t.each(e,function(){n[this]=!0}),!!Object.keys(n).length&&n},ft=function(){var t=i.format||"L LT";o=t.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(t){var e=c.localeData().longDateFormat(t)||t;return e.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(t){return c.localeData().longDateFormat(t)||t})}),s=i.extraFormats?i.extraFormats.slice():[],s.indexOf(t)<0&&s.indexOf(o)<0&&s.push(o),a=o.toLowerCase().indexOf("a")<1&&o.replace(/\[.*?\]/g,"").indexOf("h")<1,S("y")&&(g=2),S("M")&&(g=1),S("d")&&(g=0),l=Math.max(g,l),h||Z(c)};if(u.destroy=function(){J(),ct(),n.removeData("DateTimePicker"),n.removeData("date")},u.toggle=rt,u.show=it,u.hide=J,u.disable=function(){return J(),f&&f.hasClass("btn")&&f.addClass("disabled"),r.prop("disabled",!0),u},u.enable=function(){return f&&f.hasClass("btn")&&f.removeClass("disabled"),r.prop("disabled",!1),u},u.ignoreReadonly=function(t){if(0===arguments.length)return i.ignoreReadonly;if("boolean"!=typeof t)throw new TypeError("ignoreReadonly () expects a boolean parameter");return i.ignoreReadonly=t,u},u.options=function(e){if(0===arguments.length)return t.extend(!0,{},i);if(!(e instanceof Object))throw new TypeError("options() options parameter should be an object");return t.extend(!0,i,e),t.each(i,function(t,e){if(void 0===u[t])throw new TypeError("option "+t+" is not recognized!");u[t](e)}),u},u.date=function(t){if(0===arguments.length)return h?null:c.clone();if(!(null===t||"string"==typeof t||e.isMoment(t)||t instanceof Date))throw new TypeError("date() parameter must be one of [null, string, moment or Date]");return Z(null===t?null:at(t)),u},u.format=function(t){if(0===arguments.length)return i.format;if("string"!=typeof t&&("boolean"!=typeof t||t!==!1))throw new TypeError("format() expects a sting or boolean:false parameter "+t);return i.format=t,o&&ft(),u},u.dayViewHeaderFormat=function(t){if(0===arguments.length)return i.dayViewHeaderFormat;if("string"!=typeof t)throw new TypeError("dayViewHeaderFormat() expects a string parameter");return i.dayViewHeaderFormat=t,u},u.extraFormats=function(t){if(0===arguments.length)return i.extraFormats;if(t!==!1&&!(t instanceof Array))throw new TypeError("extraFormats() expects an array or false parameter");return i.extraFormats=t,s&&ft(),u},u.disabledDates=function(e){if(0===arguments.length)return i.disabledDates?t.extend({},i.disabledDates):i.disabledDates;if(!e)return i.disabledDates=!1,K(),u;if(!(e instanceof Array))throw new TypeError("disabledDates() expects an array parameter");return i.disabledDates=dt(e),i.enabledDates=!1,K(),u},u.enabledDates=function(e){if(0===arguments.length)return i.enabledDates?t.extend({},i.enabledDates):i.enabledDates;if(!e)return i.enabledDates=!1,K(),u;if(!(e instanceof Array))throw new TypeError("enabledDates() expects an array parameter");return i.enabledDates=dt(e),i.disabledDates=!1,K(),u},u.daysOfWeekDisabled=function(t){if(0===arguments.length)return i.daysOfWeekDisabled.splice(0);if("boolean"==typeof t&&!t)return i.daysOfWeekDisabled=!1,K(),u;if(!(t instanceof Array))throw new TypeError("daysOfWeekDisabled() expects an array parameter");if(i.daysOfWeekDisabled=t.reduce(function(t,e){return e=parseInt(e,10),e>6||e<0||isNaN(e)?t:(t.indexOf(e)===-1&&t.push(e),t)},[]).sort(),i.useCurrent&&!i.keepInvalid){for(var e=0;!H(c,"d");){if(c.add(1,"d"),7===e)throw"Tried 7 times to find a valid date";e++}Z(c)}return K(),u},u.maxDate=function(t){if(0===arguments.length)return i.maxDate?i.maxDate.clone():i.maxDate;if("boolean"==typeof t&&t===!1)return i.maxDate=!1,K(),u;"string"==typeof t&&("now"!==t&&"moment"!==t||(t=e()));var n=at(t);if(!n.isValid())throw new TypeError("maxDate() Could not parse date parameter: "+t);if(i.minDate&&n.isBefore(i.minDate))throw new TypeError("maxDate() date parameter is before options.minDate: "+n.format(o));return i.maxDate=n,i.useCurrent&&!i.keepInvalid&&c.isAfter(t)&&Z(i.maxDate),d.isAfter(n)&&(d=n.clone().subtract(i.stepping,"m")),K(),u},u.minDate=function(t){if(0===arguments.length)return i.minDate?i.minDate.clone():i.minDate;if("boolean"==typeof t&&t===!1)return i.minDate=!1,K(),u;"string"==typeof t&&("now"!==t&&"moment"!==t||(t=e()));var n=at(t);if(!n.isValid())throw new TypeError("minDate() Could not parse date parameter: "+t);if(i.maxDate&&n.isAfter(i.maxDate))throw new TypeError("minDate() date parameter is after options.maxDate: "+n.format(o));return i.minDate=n,i.useCurrent&&!i.keepInvalid&&c.isBefore(t)&&Z(i.minDate),d.isBefore(n)&&(d=n.clone().add(i.stepping,"m")),K(),u},u.defaultDate=function(t){if(0===arguments.length)return i.defaultDate?i.defaultDate.clone():i.defaultDate;if(!t)return i.defaultDate=!1,u;"string"==typeof t&&("now"!==t&&"moment"!==t||(t=e()));var n=at(t);if(!n.isValid())throw new TypeError("defaultDate() Could not parse date parameter: "+t);if(!H(n))throw new TypeError("defaultDate() date passed is invalid according to component setup validations");return i.defaultDate=n,(i.defaultDate&&i.inline||""===r.val().trim()&&void 0===r.attr("placeholder"))&&Z(i.defaultDate),u},u.locale=function(t){if(0===arguments.length)return i.locale;if(!e.localeData(t))throw new TypeError("locale() locale "+t+" is not loaded from moment locales!");return i.locale=t,c.locale(i.locale),d.locale(i.locale),o&&ft(),p&&(J(),it()),u},u.stepping=function(t){return 0===arguments.length?i.stepping:(t=parseInt(t,10),(isNaN(t)||t<1)&&(t=1),i.stepping=t,u)},u.useCurrent=function(t){var e=["year","month","day","hour","minute"];if(0===arguments.length)return i.useCurrent;if("boolean"!=typeof t&&"string"!=typeof t)throw new TypeError("useCurrent() expects a boolean or string parameter");if("string"==typeof t&&e.indexOf(t.toLowerCase())===-1)throw new TypeError("useCurrent() expects a string parameter of "+e.join(", "));return i.useCurrent=t,u},u.collapse=function(t){if(0===arguments.length)return i.collapse;if("boolean"!=typeof t)throw new TypeError("collapse() expects a boolean parameter");return i.collapse===t?u:(i.collapse=t,p&&(J(),it()),u)},u.icons=function(e){if(0===arguments.length)return t.extend({},i.icons);if(!(e instanceof Object))throw new TypeError("icons() expects parameter to be an Object");return t.extend(i.icons,e),p&&(J(),it()),u},u.tooltips=function(e){if(0===arguments.length)return t.extend({},i.tooltips);if(!(e instanceof Object))throw new TypeError("tooltips() expects parameter to be an Object");return t.extend(i.tooltips,e),p&&(J(),it()),u},u.useStrict=function(t){if(0===arguments.length)return i.useStrict;if("boolean"!=typeof t)throw new TypeError("useStrict() expects a boolean parameter");return i.useStrict=t,u},u.sideBySide=function(t){if(0===arguments.length)return i.sideBySide;if("boolean"!=typeof t)throw new TypeError("sideBySide() expects a boolean parameter");return i.sideBySide=t,p&&(J(),it()),u},u.viewMode=function(t){if(0===arguments.length)return i.viewMode;if("string"!=typeof t)throw new TypeError("viewMode() expects a string parameter");if(v.indexOf(t)===-1)throw new TypeError("viewMode() parameter must be one of ("+v.join(", ")+") value");return i.viewMode=t,l=Math.max(v.indexOf(t),g),N(),u},u.toolbarPlacement=function(t){if(0===arguments.length)return i.toolbarPlacement;if("string"!=typeof t)throw new TypeError("toolbarPlacement() expects a string parameter");if(_.indexOf(t)===-1)throw new TypeError("toolbarPlacement() parameter must be one of ("+_.join(", ")+") value");return i.toolbarPlacement=t,p&&(J(),it()),u},u.widgetPositioning=function(e){if(0===arguments.length)return t.extend({},i.widgetPositioning);if("[object Object]"!=={}.toString.call(e))throw new TypeError("widgetPositioning() expects an object variable");if(e.horizontal){if("string"!=typeof e.horizontal)throw new TypeError("widgetPositioning() horizontal variable must be a string");if(e.horizontal=e.horizontal.toLowerCase(),x.indexOf(e.horizontal)===-1)throw new TypeError("widgetPositioning() expects horizontal parameter to be one of ("+x.join(", ")+")");i.widgetPositioning.horizontal=e.horizontal}if(e.vertical){if("string"!=typeof e.vertical)throw new TypeError("widgetPositioning() vertical variable must be a string");if(e.vertical=e.vertical.toLowerCase(),y.indexOf(e.vertical)===-1)throw new TypeError("widgetPositioning() expects vertical parameter to be one of ("+y.join(", ")+")");i.widgetPositioning.vertical=e.vertical}return K(),u},u.calendarWeeks=function(t){if(0===arguments.length)return i.calendarWeeks;if("boolean"!=typeof t)throw new TypeError("calendarWeeks() expects parameter to be a boolean value");return i.calendarWeeks=t,K(),u},u.showTodayButton=function(t){if(0===arguments.length)return i.showTodayButton;if("boolean"!=typeof t)throw new TypeError("showTodayButton() expects a boolean parameter");return i.showTodayButton=t,p&&(J(),it()),u},u.showClear=function(t){if(0===arguments.length)return i.showClear;if("boolean"!=typeof t)throw new TypeError("showClear() expects a boolean parameter");return i.showClear=t,p&&(J(),it()),u},u.widgetParent=function(e){if(0===arguments.length)return i.widgetParent;if("string"==typeof e&&(e=t(e)),null!==e&&"string"!=typeof e&&!(e instanceof t))throw new TypeError("widgetParent() expects a string or a jQuery object parameter");return i.widgetParent=e,p&&(J(),it()),u},u.keepOpen=function(t){if(0===arguments.length)return i.keepOpen;if("boolean"!=typeof t)throw new TypeError("keepOpen() expects a boolean parameter");return i.keepOpen=t,u},u.focusOnShow=function(t){if(0===arguments.length)return i.focusOnShow;if("boolean"!=typeof t)throw new TypeError("focusOnShow() expects a boolean parameter");return i.focusOnShow=t,u},u.inline=function(t){if(0===arguments.length)return i.inline;if("boolean"!=typeof t)throw new TypeError("inline() expects a boolean parameter");return i.inline=t,u},u.clear=function(){return tt(),u},u.keyBinds=function(t){return i.keyBinds=t,u},u.debug=function(t){if("boolean"!=typeof t)throw new TypeError("debug() expects a boolean parameter");return i.debug=t,u},u.allowInputToggle=function(t){if(0===arguments.length)return i.allowInputToggle;if("boolean"!=typeof t)throw new TypeError("allowInputToggle() expects a boolean parameter");return i.allowInputToggle=t,u},u.showClose=function(t){if(0===arguments.length)return i.showClose;if("boolean"!=typeof t)throw new TypeError("showClose() expects a boolean parameter");return i.showClose=t,u},u.keepInvalid=function(t){if(0===arguments.length)return i.keepInvalid;if("boolean"!=typeof t)throw new TypeError("keepInvalid() expects a boolean parameter");return i.keepInvalid=t,u},u.datepickerInput=function(t){if(0===arguments.length)return i.datepickerInput;if("string"!=typeof t)throw new TypeError("datepickerInput() expects a string parameter");return i.datepickerInput=t,u},u.parseInputDate=function(t){if(0===arguments.length)return i.parseInputDate;if("function"!=typeof t)throw new TypeError("parseInputDate() sholud be as function");return i.parseInputDate=t,u},u.disabledTimeIntervals=function(e){if(0===arguments.length)return i.disabledTimeIntervals?t.extend({},i.disabledTimeIntervals):i.disabledTimeIntervals;if(!e)return i.disabledTimeIntervals=!1,K(),u;if(!(e instanceof Array))throw new TypeError("disabledTimeIntervals() expects an array parameter");return i.disabledTimeIntervals=e,K(),u},u.disabledHours=function(e){if(0===arguments.length)return i.disabledHours?t.extend({},i.disabledHours):i.disabledHours;if(!e)return i.disabledHours=!1,K(),u;if(!(e instanceof Array))throw new TypeError("disabledHours() expects an array parameter");if(i.disabledHours=ht(e),i.enabledHours=!1,i.useCurrent&&!i.keepInvalid){for(var n=0;!H(c,"h");){if(c.add(1,"h"),24===n)throw"Tried 24 times to find a valid date";n++}Z(c)}return K(),u},u.enabledHours=function(e){if(0===arguments.length)return i.enabledHours?t.extend({},i.enabledHours):i.enabledHours;if(!e)return i.enabledHours=!1,K(),u;if(!(e instanceof Array))throw new TypeError("enabledHours() expects an array parameter");if(i.enabledHours=ht(e),i.disabledHours=!1,i.useCurrent&&!i.keepInvalid){for(var n=0;!H(c,"h");){if(c.add(1,"h"),24===n)throw"Tried 24 times to find a valid date";n++}Z(c)}return K(),u},u.viewDate=function(t){if(0===arguments.length)return d.clone();if(!t)return d=c.clone(),u;if(!("string"==typeof t||e.isMoment(t)||t instanceof Date))throw new TypeError("viewDate() parameter must be one of [string, moment or Date]");return d=at(t),I(),u},n.is("input"))r=n;else if(r=n.find(i.datepickerInput),0===r.size())r=n.find("input");else if(!r.is("input"))throw new Error('CSS class "'+i.datepickerInput+'" cannot be applied to non input element');if(n.hasClass("input-group")&&(f=0===n.find(".datepickerbutton").size()?n.find(".input-group-addon"):n.find(".datepickerbutton")),!i.inline&&!r.is("input"))throw new Error("Could not initialize DateTimePicker without an input element");return t.extend(!0,i,D()),u.options(i),ft(),ut(),r.prop("disabled")&&u.disable(),r.is("input")&&0!==r.val().trim().length?Z(at(r.val().trim())):i.defaultDate&&void 0===r.attr("placeholder")&&Z(i.defaultDate),i.inline&&it(),u};t.fn.datetimepicker=function(e){return this.each(function(){var i=t(this);i.data("DateTimePicker")||(e=t.extend(!0,{},t.fn.datetimepicker.defaults,e),i.data("DateTimePicker",n(i,e)))})},t.fn.datetimepicker.defaults={format:!1,dayViewHeaderFormat:"MMMM YYYY",extraFormats:!1,stepping:1,minDate:!1,maxDate:!1,useCurrent:!0,collapse:!0,locale:e.locale(),defaultDate:!1,disabledDates:!1,enabledDates:!1,icons:{time:"glyphicon glyphicon-time",date:"glyphicon glyphicon-calendar",up:"glyphicon glyphicon-chevron-up",down:"glyphicon glyphicon-chevron-down",previous:"glyphicon glyphicon-chevron-left",next:"glyphicon glyphicon-chevron-right",today:"glyphicon glyphicon-screenshot",clear:"glyphicon glyphicon-trash",close:"glyphicon glyphicon-remove"},tooltips:{today:"Go to today",clear:"Clear selection",close:"Close the picker",selectMonth:"Select Month",prevMonth:"Previous Month",nextMonth:"Next Month",selectYear:"Select Year",prevYear:"Previous Year",nextYear:"Next Year",selectDecade:"Select Decade",prevDecade:"Previous Decade",nextDecade:"Next Decade",prevCentury:"Previous Century",nextCentury:"Next Century"},useStrict:!1,sideBySide:!1,daysOfWeekDisabled:!1,calendarWeeks:!1,viewMode:"days",toolbarPlacement:"default",showTodayButton:!1,showClear:!1,showClose:!1,widgetPositioning:{horizontal:"auto",vertical:"auto"},widgetParent:null,ignoreReadonly:!1,keepOpen:!1,focusOnShow:!0,inline:!1,keepInvalid:!1,datepickerInput:".datepickerinput",keyBinds:{up:function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")?this.date(n.clone().subtract(7,"d")):this.date(n.clone().add(this.stepping(),"m"))}},down:function(t){if(!t)return void this.show();var n=this.date()||e();t.find(".datepicker").is(":visible")?this.date(n.clone().add(7,"d")):this.date(n.clone().subtract(this.stepping(),"m"))},"control up":function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")?this.date(n.clone().subtract(1,"y")):this.date(n.clone().add(1,"h"))}},"control down":function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")?this.date(n.clone().add(1,"y")):this.date(n.clone().subtract(1,"h"))}},left:function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")&&this.date(n.clone().subtract(1,"d"))}},right:function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")&&this.date(n.clone().add(1,"d"))}},pageUp:function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")&&this.date(n.clone().subtract(1,"M"))}},pageDown:function(t){if(t){var n=this.date()||e();t.find(".datepicker").is(":visible")&&this.date(n.clone().add(1,"M"))}},enter:function(){this.hide()},escape:function(){this.hide()},"control space":function(t){t.find(".timepicker").is(":visible")&&t.find('.btn[data-action="togglePeriod"]').click()},t:function(){this.date(e())},"delete":function(){this.clear()}},debug:!1,allowInputToggle:!1,disabledTimeIntervals:!1,disabledHours:!1,enabledHours:!1,viewDate:!1}}),function(t,e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e(require("jquery")):t.bootbox=e(t.jQuery)}(this,function t(e,n){"use strict";function i(t){var e=m[p.locale];return e?e[t]:m.en[t]}function r(t,n,i){t.stopPropagation(),t.preventDefault();var r=e.isFunction(i)&&i.call(n,t)===!1;r||n.modal("hide")}function a(t){var e,n=0;for(e in t)n++;return n}function o(t,n){var i=0;e.each(t,function(t,e){n(t,e,i++)})}function s(t){var n,i;if("object"!=typeof t)throw new Error("Please supply an object of options");if(!t.message)throw new Error("Please specify a message");return t=e.extend({},p,t),t.buttons||(t.buttons={}),n=t.buttons,i=a(n),o(n,function(t,r,a){if(e.isFunction(r)&&(r=n[t]={callback:r}),"object"!==e.type(r))throw new Error("button with key "+t+" must be an object");r.label||(r.label=t),r.className||(i<=2&&a===i-1?r.className="btn-primary":r.className="btn-default")}),t}function l(t,e){var n=t.length,i={};if(n<1||n>2)throw new Error("Invalid argument length");return 2===n||"string"==typeof t[0]?(i[e[0]]=t[0],i[e[1]]=t[1]):i=t[0],i}function u(t,n,i){return e.extend(!0,{},t,l(n,i))}function c(t,e,n,i){var r={className:"bootbox-"+t,buttons:d.apply(null,e)};return h(u(r,i,n),e)}function d(){for(var t={},e=0,n=arguments.length;e",header:"",footer:"",closeButton:"",form:"
    ",inputs:{text:"",textarea:"",email:"",select:"",checkbox:"
    ",date:"",time:"",number:"",password:""}},p={locale:"en",backdrop:"static",animate:!0,className:null,closeButton:!0,show:!0,container:"body"},g={};g.alert=function(){var t;if(t=c("alert",["ok"],["message","callback"],arguments),t.callback&&!e.isFunction(t.callback))throw new Error("alert requires callback property to be a function when provided");return t.buttons.ok.callback=t.onEscape=function(){return!e.isFunction(t.callback)||t.callback.call(this)},g.dialog(t)},g.confirm=function(){var t;if(t=c("confirm",["cancel","confirm"],["message","callback"],arguments),t.buttons.cancel.callback=t.onEscape=function(){return t.callback.call(this,!1)},t.buttons.confirm.callback=function(){return t.callback.call(this,!0)},!e.isFunction(t.callback))throw new Error("confirm requires a callback");return g.dialog(t)},g.prompt=function(){var t,i,r,a,s,l,c;if(a=e(f.form),i={className:"bootbox-prompt",buttons:d("cancel","confirm"),value:"",inputType:"text"},t=h(u(i,arguments,["title","callback"]),["cancel","confirm"]),l=t.show===n||t.show,t.message=a,t.buttons.cancel.callback=t.onEscape=function(){return t.callback.call(this,null)},t.buttons.confirm.callback=function(){var n;switch(t.inputType){case"text":case"textarea":case"email":case"select":case"date":case"time":case"number":case"password":n=s.val();break;case"checkbox":var i=s.find("input:checked");n=[],o(i,function(t,i){n.push(e(i).val())})}return t.callback.call(this,n)},t.show=!1,!t.title)throw new Error("prompt requires a title");if(!e.isFunction(t.callback))throw new Error("prompt requires a callback");if(!f.inputs[t.inputType])throw new Error("invalid prompt type");switch(s=e(f.inputs[t.inputType]),t.inputType){case"text":case"textarea":case"email":case"date":case"time":case"number":case"password":s.val(t.value);break;case"select":var p={};if(c=t.inputOptions||[],!e.isArray(c))throw new Error("Please pass an array of input options");if(!c.length)throw new Error("prompt with select requires options");o(c,function(t,i){var r=s;if(i.value===n||i.text===n)throw new Error("given options in wrong format");i.group&&(p[i.group]||(p[i.group]=e("").attr("label",i.group)),r=p[i.group]),r.append("")}),o(p,function(t,e){s.append(e)}),s.val(t.value);break;case"checkbox":var m=e.isArray(t.value)?t.value:[t.value];if(c=t.inputOptions||[],!c.length)throw new Error("prompt with checkbox requires options");if(!c[0].value||!c[0].text)throw new Error("given options in wrong format");s=e("
    "),o(c,function(n,i){var r=e(f.inputs[t.inputType]);r.find("input").attr("value",i.value),r.find("label").append(i.text),o(m,function(t,e){e===i.value&&r.find("input").prop("checked",!0)}),s.append(r)})}return t.placeholder&&s.attr("placeholder",t.placeholder),t.pattern&&s.attr("pattern",t.pattern),t.maxlength&&s.attr("maxlength",t.maxlength),a.append(s),a.on("submit",function(t){t.preventDefault(),t.stopPropagation(),r.find(".btn-primary").click()}),r=g.dialog(t),r.off("shown.bs.modal"),r.on("shown.bs.modal",function(){s.focus()}),l===!0&&r.modal("show"),r},g.dialog=function(t){t=s(t);var i=e(f.dialog),a=i.find(".modal-dialog"),l=i.find(".modal-body"),u=t.buttons,c="",d={onEscape:t.onEscape};if(e.fn.modal===n)throw new Error("$.fn.modal is not defined; please double check you have included the Bootstrap JavaScript library. See http://getbootstrap.com/javascript/ for more details.");if(o(u,function(t,e){c+="",d[t]=e.callback}),l.find(".bootbox-body").html(t.message),t.animate===!0&&i.addClass("fade"),t.className&&i.addClass(t.className),"large"===t.size?a.addClass("modal-lg"):"small"===t.size&&a.addClass("modal-sm"),t.title&&l.before(f.header),t.closeButton){var h=e(f.closeButton);t.title?i.find(".modal-header").prepend(h):h.css("margin-top","-10px").prependTo(l); -}return t.title&&i.find(".modal-title").html(t.title),c.length&&(l.after(f.footer),i.find(".modal-footer").html(c)),i.on("hidden.bs.modal",function(t){t.target===this&&i.remove()}),i.on("shown.bs.modal",function(){i.find(".btn-primary:first").focus()}),"static"!==t.backdrop&&i.on("click.dismiss.bs.modal",function(t){i.children(".modal-backdrop").length&&(t.currentTarget=i.children(".modal-backdrop").get(0)),t.target===t.currentTarget&&i.trigger("escape.close.bb")}),i.on("escape.close.bb",function(t){d.onEscape&&r(t,i,d.onEscape)}),i.on("click",".modal-footer button",function(t){var n=e(this).data("bb-handler");r(t,i,d[n])}),i.on("click",".bootbox-close-button",function(t){r(t,i,d.onEscape)}),i.on("keyup",function(t){27===t.which&&i.trigger("escape.close.bb")}),e(t.container).append(i),i.modal({backdrop:!!t.backdrop&&"static",keyboard:!1,show:!1}),t.show&&i.modal("show"),i},g.setDefaults=function(){var t={};2===arguments.length?t[arguments[0]]=arguments[1]:t=arguments[0],e.extend(p,t)},g.hideAll=function(){return e(".bootbox").modal("hide"),g};var m={bg_BG:{OK:"Ок",CANCEL:"Отказ",CONFIRM:"Потвърждавам"},br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},cs:{OK:"OK",CANCEL:"Zrušit",CONFIRM:"Potvrdit"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},el:{OK:"Εντάξει",CANCEL:"Ακύρωση",CONFIRM:"Επιβεβαίωση"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},et:{OK:"OK",CANCEL:"Katkesta",CONFIRM:"OK"},fa:{OK:"قبول",CANCEL:"لغو",CONFIRM:"تایید"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},he:{OK:"אישור",CANCEL:"ביטול",CONFIRM:"אישור"},hu:{OK:"OK",CANCEL:"Mégsem",CONFIRM:"Megerősít"},hr:{OK:"OK",CANCEL:"Odustani",CONFIRM:"Potvrdi"},id:{OK:"OK",CANCEL:"Batal",CONFIRM:"OK"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},ja:{OK:"OK",CANCEL:"キャンセル",CONFIRM:"確認"},lt:{OK:"Gerai",CANCEL:"Atšaukti",CONFIRM:"Patvirtinti"},lv:{OK:"Labi",CANCEL:"Atcelt",CONFIRM:"Apstiprināt"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},no:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},pt:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Confirmar"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},sq:{OK:"OK",CANCEL:"Anulo",CONFIRM:"Prano"},sv:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},th:{OK:"ตกลง",CANCEL:"ยกเลิก",CONFIRM:"ยืนยัน"},tr:{OK:"Tamam",CANCEL:"İptal",CONFIRM:"Onayla"},zh_CN:{OK:"OK",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return g.addLocale=function(t,n){return e.each(["OK","CANCEL","CONFIRM"],function(t,e){if(!n[e])throw new Error("Please supply a translation for '"+e+"'")}),m[t]={OK:n.OK,CANCEL:n.CANCEL,CONFIRM:n.CONFIRM},g},g.removeLocale=function(t){return delete m[t],g},g.setLocale=function(t){return g.setDefaults("locale",t)},g.init=function(n){return t(n||e)},g}),!function(){function t(t){return t&&(t.ownerDocument||t.document||t).documentElement}function e(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}function n(t,e){return te?1:t>=e?0:NaN}function i(t){return null===t?NaN:+t}function r(t){return!isNaN(t)}function a(t){return{left:function(e,n,i,r){for(arguments.length<3&&(i=0),arguments.length<4&&(r=e.length);i>>1;t(e[a],n)<0?i=a+1:r=a}return i},right:function(e,n,i,r){for(arguments.length<3&&(i=0),arguments.length<4&&(r=e.length);i>>1;t(e[a],n)>0?r=a:i=a+1}return i}}}function o(t){return t.length}function s(t){for(var e=1;t*e%1;)e*=10;return e}function l(t,e){for(var n in e)Object.defineProperty(t.prototype,n,{value:e[n],enumerable:!1})}function u(){this._=Object.create(null)}function c(t){return(t+="")===bo||t[0]===wo?wo+t:t}function d(t){return(t+="")[0]===wo?t.slice(1):t}function h(t){return c(t)in this._}function f(t){return(t=c(t))in this._&&delete this._[t]}function p(){var t=[];for(var e in this._)t.push(d(e));return t}function g(){var t=0;for(var e in this._)++t;return t}function m(){for(var t in this._)return!1;return!0}function v(){this._=Object.create(null)}function y(t){return t}function x(t,e,n){return function(){var i=n.apply(e,arguments);return i===e?t:i}}function _(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var n=0,i=So.length;n=e&&(e=r+1);!(o=s[e])&&++e0&&(t=t.slice(0,s));var u=Lo.get(t);return u&&(t=u,l=U),s?e?r:i:e?b:a}function q(t,e){return function(n){var i=so.event;so.event=n,e[0]=this.__data__;try{t.apply(this,e)}finally{so.event=i}}}function U(t,e){var n=q(t,e);return function(t){var e=this,i=t.relatedTarget;i&&(i===e||8&i.compareDocumentPosition(e))||n.call(e,t)}}function W(n){var i=".dragsuppress-"+ ++No,r="click"+i,a=so.select(e(n)).on("touchmove"+i,T).on("dragstart"+i,T).on("selectstart"+i,T);if(null==Io&&(Io=!("onselectstart"in n)&&_(n.style,"userSelect")),Io){var o=t(n).style,s=o[Io];o[Io]="none"}return function(t){if(a.on(i,null),Io&&(o[Io]=s),t){var e=function(){a.on(r,null)};a.on(r,function(){T(),e()},!0),setTimeout(e,0)}}}function Q(t,n){n.changedTouches&&(n=n.changedTouches[0]);var i=t.ownerSVGElement||t;if(i.createSVGPoint){var r=i.createSVGPoint();if(Ro<0){var a=e(t);if(a.scrollX||a.scrollY){i=so.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=i[0][0].getScreenCTM();Ro=!(o.f||o.e),i.remove()}}return Ro?(r.x=n.pageX,r.y=n.pageY):(r.x=n.clientX,r.y=n.clientY),r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var s=t.getBoundingClientRect();return[n.clientX-s.left-t.clientLeft,n.clientY-s.top-t.clientTop]}function K(){return so.event.changedTouches[0].identifier}function Z(t){return t>0?1:t<0?-1:0}function J(t,e,n){return(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0])}function tt(t){return t>1?0:t<-1?jo:Math.acos(t)}function et(t){return t>1?$o:t<-1?-$o:Math.asin(t)}function nt(t){return((t=Math.exp(t))-1/t)/2}function it(t){return((t=Math.exp(t))+1/t)/2}function rt(t){return((t=Math.exp(2*t))-1)/(t+1)}function at(t){return(t=Math.sin(t/2))*t}function ot(){}function st(t,e,n){return this instanceof st?(this.h=+t,this.s=+e,void(this.l=+n)):arguments.length<2?t instanceof st?new st(t.h,t.s,t.l):bt(""+t,wt,st):new st(t,e,n)}function lt(t,e,n){function i(t){return t>360?t-=360:t<0&&(t+=360),t<60?a+(o-a)*t/60:t<180?o:t<240?a+(o-a)*(240-t)/60:a}function r(t){return Math.round(255*i(t))}var a,o;return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)?0:e<0?0:e>1?1:e,n=n<0?0:n>1?1:n,o=n<=.5?n*(1+e):n+e-n*e,a=2*n-o,new vt(r(t+120),r(t),r(t-120))}function ut(t,e,n){return this instanceof ut?(this.h=+t,this.c=+e,void(this.l=+n)):arguments.length<2?t instanceof ut?new ut(t.h,t.c,t.l):t instanceof dt?ft(t.l,t.a,t.b):ft((t=St((t=so.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new ut(t,e,n)}function ct(t,e,n){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new dt(n,Math.cos(t*=zo)*e,Math.sin(t)*e)}function dt(t,e,n){return this instanceof dt?(this.l=+t,this.a=+e,void(this.b=+n)):arguments.length<2?t instanceof dt?new dt(t.l,t.a,t.b):t instanceof ut?ct(t.h,t.c,t.l):St((t=vt(t)).r,t.g,t.b):new dt(t,e,n)}function ht(t,e,n){var i=(t+16)/116,r=i+e/500,a=i-n/200;return r=pt(r)*ts,i=pt(i)*es,a=pt(a)*ns,new vt(mt(3.2404542*r-1.5371385*i-.4985314*a),mt(-.969266*r+1.8760108*i+.041556*a),mt(.0556434*r-.2040259*i+1.0572252*a))}function ft(t,e,n){return t>0?new ut(Math.atan2(n,e)*Yo,Math.sqrt(e*e+n*n),t):new ut(NaN,NaN,t)}function pt(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function gt(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function mt(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function vt(t,e,n){return this instanceof vt?(this.r=~~t,this.g=~~e,void(this.b=~~n)):arguments.length<2?t instanceof vt?new vt(t.r,t.g,t.b):bt(""+t,vt,lt):new vt(t,e,n)}function yt(t){return new vt(t>>16,t>>8&255,255&t)}function xt(t){return yt(t)+""}function _t(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function bt(t,e,n){var i,r,a,o=0,s=0,l=0;if(i=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(r=i[2].split(","),i[1]){case"hsl":return n(parseFloat(r[0]),parseFloat(r[1])/100,parseFloat(r[2])/100);case"rgb":return e(Ct(r[0]),Ct(r[1]),Ct(r[2]))}return(a=as.get(t))?e(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&a)>>4,o=o>>4|o,s=240&a,s=s>>4|s,l=15&a,l=l<<4|l):7===t.length&&(o=(16711680&a)>>16,s=(65280&a)>>8,l=255&a)),e(o,s,l))}function wt(t,e,n){var i,r,a=Math.min(t/=255,e/=255,n/=255),o=Math.max(t,e,n),s=o-a,l=(o+a)/2;return s?(r=l<.5?s/(o+a):s/(2-o-a),i=t==o?(e-n)/s+(e0&&l<1?0:i),new st(i,r,l)}function St(t,e,n){t=Tt(t),e=Tt(e),n=Tt(n);var i=gt((.4124564*t+.3575761*e+.1804375*n)/ts),r=gt((.2126729*t+.7151522*e+.072175*n)/es),a=gt((.0193339*t+.119192*e+.9503041*n)/ns);return dt(116*r-16,500*(i-r),200*(r-a))}function Tt(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Ct(t){var e=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*e):e}function At(t){return"function"==typeof t?t:function(){return t}}function kt(t){return function(e,n,i){return 2===arguments.length&&"function"==typeof n&&(i=n,n=null),Pt(e,n,t,i)}}function Pt(t,e,n,i){function r(){var t,e=l.status;if(!e&&Et(l)||e>=200&&e<300||304===e){try{t=n.call(a,l)}catch(i){return void o.error.call(a,i)}o.load.call(a,t)}else o.error.call(a,l)}var a={},o=so.dispatch("beforesend","progress","load","error"),s={},l=new XMLHttpRequest,u=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(t)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=r:l.onreadystatechange=function(){l.readyState>3&&r()},l.onprogress=function(t){var e=so.event;so.event=t;try{o.progress.call(a,l)}finally{so.event=e}},a.header=function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?s[t]:(null==e?delete s[t]:s[t]=e+"",a)},a.mimeType=function(t){return arguments.length?(e=null==t?null:t+"",a):e},a.responseType=function(t){return arguments.length?(u=t,a):u},a.response=function(t){return n=t,a},["get","post"].forEach(function(t){a[t]=function(){return a.send.apply(a,[t].concat(uo(arguments)))}}),a.send=function(n,i,r){if(2===arguments.length&&"function"==typeof i&&(r=i,i=null),l.open(n,t,!0),null==e||"accept"in s||(s.accept=e+",*/*"),l.setRequestHeader)for(var c in s)l.setRequestHeader(c,s[c]);return null!=e&&l.overrideMimeType&&l.overrideMimeType(e),null!=u&&(l.responseType=u),null!=r&&a.on("error",r).on("load",function(t){r(null,t)}),o.beforesend.call(a,l),l.send(null==i?null:i),a},a.abort=function(){return l.abort(),a},so.rebind(a,o,"on"),null==i?a:a.get(Mt(i))}function Mt(t){return 1===t.length?function(e,n){t(null==e?n:null)}:t}function Et(t){var e=t.responseType;return e&&"text"!==e?t.response:t.responseText}function Dt(t,e,n){var i=arguments.length;i<2&&(e=0),i<3&&(n=Date.now());var r=n+e,a={c:t,t:r,n:null};return ss?ss.n=a:os=a,ss=a,ls||(us=clearTimeout(us),ls=1,cs(Ot)),a}function Ot(){var t=Lt(),e=It()-t;e>24?(isFinite(e)&&(clearTimeout(us),us=setTimeout(Ot,e)),ls=0):(ls=1,cs(Ot))}function Lt(){for(var t=Date.now(),e=os;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function It(){for(var t,e=os,n=1/0;e;)e.c?(e.t8?function(t){return t/n}:function(t){return t*n},symbol:t}}function Ft(t){var e=t.decimal,n=t.thousands,i=t.grouping,r=t.currency,a=i&&n?function(t,e){for(var r=t.length,a=[],o=0,s=i[0],l=0;r>0&&s>0&&(l+s+1>e&&(s=Math.max(1,e-l)),a.push(t.substring(r-=s,r+s)),!((l+=s+1)>e));)s=i[o=(o+1)%i.length];return a.reverse().join(n)}:y;return function(t){var n=hs.exec(t),i=n[1]||" ",o=n[2]||">",s=n[3]||"-",l=n[4]||"",u=n[5],c=+n[6],d=n[7],h=n[8],f=n[9],p=1,g="",m="",v=!1,y=!0;switch(h&&(h=+h.substring(1)),(u||"0"===i&&"="===o)&&(u=i="0",o="="),f){case"n":d=!0,f="g";break;case"%":p=100,m="%",f="f";break;case"p":p=100,m="%",f="r";break;case"b":case"o":case"x":case"X":"#"===l&&(g="0"+f.toLowerCase());case"c":y=!1;case"d":v=!0,h=0;break;case"s":p=-1,f="r"}"$"===l&&(g=r[0],m=r[1]),"r"!=f||h||(f="g"),null!=h&&("g"==f?h=Math.max(1,Math.min(21,h)):"e"!=f&&"f"!=f||(h=Math.max(0,Math.min(20,h)))),f=fs.get(f)||Vt;var x=u&&d;return function(t){var n=m;if(v&&t%1)return"";var r=t<0||0===t&&1/t<0?(t=-t,"-"):"-"===s?"":s;if(p<0){var l=so.formatPrefix(t,h);t=l.scale(t),n=l.symbol+m}else t*=p;t=f(t,h);var _,b,w=t.lastIndexOf(".");if(w<0){var S=y?t.lastIndexOf("e"):-1;S<0?(_=t,b=""):(_=t.substring(0,S),b=t.substring(S))}else _=t.substring(0,w),b=e+t.substring(w+1);!u&&d&&(_=a(_,1/0));var T=g.length+_.length+b.length+(x?0:r.length),C=T"===o?C+r+t:"^"===o?C.substring(0,T>>=1)+r+t+C.substring(T):r+(x?t:C+t))+n}}}function Vt(t){return t+""}function jt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Gt(t,e,n){function i(e){var n=t(e),i=a(n,1);return e-n1)for(;o=u)return-1;if(r=e.charCodeAt(s++),37===r){if(o=e.charAt(s++),a=M[o in vs?e.charAt(s++):o],!a||(i=a(t,n,i))<0)return-1}else if(r!=n.charCodeAt(i++))return-1}return i}function i(t,e,n){w.lastIndex=0;var i=w.exec(e.slice(n));return i?(t.w=S.get(i[0].toLowerCase()),n+i[0].length):-1}function r(t,e,n){_.lastIndex=0;var i=_.exec(e.slice(n));return i?(t.w=b.get(i[0].toLowerCase()),n+i[0].length):-1}function a(t,e,n){A.lastIndex=0;var i=A.exec(e.slice(n));return i?(t.m=k.get(i[0].toLowerCase()),n+i[0].length):-1}function o(t,e,n){T.lastIndex=0;var i=T.exec(e.slice(n));return i?(t.m=C.get(i[0].toLowerCase()),n+i[0].length):-1}function s(t,e,i){return n(t,P.c.toString(),e,i)}function l(t,e,i){return n(t,P.x.toString(),e,i)}function u(t,e,i){return n(t,P.X.toString(),e,i)}function c(t,e,n){var i=x.get(e.slice(n,n+=2).toLowerCase());return null==i?-1:(t.p=i,n)}var d=t.dateTime,h=t.date,f=t.time,p=t.periods,g=t.days,m=t.shortDays,v=t.months,y=t.shortMonths;e.utc=function(t){function n(t){try{gs=jt;var e=new gs;return e._=t,i(e)}finally{gs=Date}}var i=e(t);return n.parse=function(t){try{gs=jt;var e=i.parse(t);return e&&e._}finally{gs=Date}},n.toString=i.toString,n},e.multi=e.utc.multi=le;var x=so.map(),_=Yt(g),b=Bt(g),w=Yt(m),S=Bt(m),T=Yt(v),C=Bt(v),A=Yt(y),k=Bt(y);p.forEach(function(t,e){x.set(t.toLowerCase(),e)});var P={a:function(t){return m[t.getDay()]},A:function(t){return g[t.getDay()]},b:function(t){return y[t.getMonth()]},B:function(t){return v[t.getMonth()]},c:e(d),d:function(t,e){return zt(t.getDate(),e,2)},e:function(t,e){return zt(t.getDate(),e,2)},H:function(t,e){return zt(t.getHours(),e,2)},I:function(t,e){return zt(t.getHours()%12||12,e,2)},j:function(t,e){return zt(1+ps.dayOfYear(t),e,3)},L:function(t,e){return zt(t.getMilliseconds(),e,3)},m:function(t,e){return zt(t.getMonth()+1,e,2)},M:function(t,e){return zt(t.getMinutes(),e,2)},p:function(t){return p[+(t.getHours()>=12)]},S:function(t,e){return zt(t.getSeconds(),e,2)},U:function(t,e){return zt(ps.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return zt(ps.mondayOfYear(t),e,2)},x:e(h),X:e(f),y:function(t,e){return zt(t.getFullYear()%100,e,2)},Y:function(t,e){return zt(t.getFullYear()%1e4,e,4)},Z:oe,"%":function(){return"%"}},M={a:i,A:r,b:a,B:o,c:s,d:te,e:te,H:ne,I:ne,j:ee,L:ae,m:Jt,M:ie,p:c,S:re,U:qt,w:Xt,W:Ut,x:l,X:u,y:Qt,Y:Wt,Z:Kt,"%":se};return e}function zt(t,e,n){var i=t<0?"-":"",r=(i?-t:t)+"",a=r.length;return i+(a68?1900:2e3)}function Jt(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+2));return i?(t.m=i[0]-1,n+i[0].length):-1}function te(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+2));return i?(t.d=+i[0],n+i[0].length):-1}function ee(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+3));return i?(t.j=+i[0],n+i[0].length):-1}function ne(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+2));return i?(t.H=+i[0],n+i[0].length):-1}function ie(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+2));return i?(t.M=+i[0],n+i[0].length):-1}function re(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+2));return i?(t.S=+i[0],n+i[0].length):-1}function ae(t,e,n){ys.lastIndex=0;var i=ys.exec(e.slice(n,n+3));return i?(t.L=+i[0],n+i[0].length):-1}function oe(t){var e=t.getTimezoneOffset(),n=e>0?"-":"+",i=_o(e)/60|0,r=_o(e)%60;return n+zt(i,"0",2)+zt(r,"0",2)}function se(t,e,n){xs.lastIndex=0;var i=xs.exec(e.slice(n,n+1));return i?n+i[0].length:-1}function le(t){for(var e=t.length,n=-1;++n=0?1:-1,s=o*n,l=Math.cos(e),u=Math.sin(e),c=a*u,d=r*l+c*Math.cos(s),h=c*o*Math.sin(s);Cs.add(Math.atan2(h,d)),i=t,r=l,a=u}var e,n,i,r,a;As.point=function(o,s){As.point=t,i=(e=o)*zo,r=Math.cos(s=(n=s)*zo/2+jo/4),a=Math.sin(s)},As.lineEnd=function(){t(e,n)}}function ge(t){var e=t[0],n=t[1],i=Math.cos(n);return[i*Math.cos(e),i*Math.sin(e),Math.sin(n)]}function me(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ve(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function ye(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function xe(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function _e(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function be(t){return[Math.atan2(t[1],t[0]),et(t[2])]}function we(t,e){return _o(t[0]-e[0])=0;--s)r.point((d=c[s])[0],d[1])}else i(f.x,f.p.x,-1,r);f=f.p}f=f.o,c=f.z,p=!p}while(!f.v);r.lineEnd()}}}function De(t){if(e=t.length){for(var e,n,i=0,r=t[0];++i0){for(b||(a.polygonStart(),b=!0),a.lineStart();++o1&&2&e&&n.push(n.pop().concat(n.shift())),f.push(n.filter(Ie))}var f,p,g,m=e(a),v=r.invert(i[0],i[1]),y={point:o,lineStart:l,lineEnd:u,polygonStart:function(){y.point=c,y.lineStart=d,y.lineEnd=h,f=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=l,y.lineEnd=u,f=so.merge(f);var t=Ge(v,p);f.length?(b||(a.polygonStart(),b=!0),Ee(f,Re,t,n,a)):t&&(b||(a.polygonStart(),b=!0),a.lineStart(),n(null,null,1,a),a.lineEnd()),b&&(a.polygonEnd(),b=!1),f=p=null},sphere:function(){a.polygonStart(),a.lineStart(),n(null,null,1,a),a.lineEnd(),a.polygonEnd()}},x=Ne(),_=e(x),b=!1;return y}}function Ie(t){return t.length>1}function Ne(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,n){t.push([e,n])},lineEnd:b,buffer:function(){var n=e;return e=[],t=null,n},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function Re(t,e){return((t=t.x)[0]<0?t[1]-$o-Fo:$o-t[1])-((e=e.x)[0]<0?e[1]-$o-Fo:$o-e[1])}function Fe(t){var e,n=NaN,i=NaN,r=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?jo:-jo,l=_o(a-n);_o(l-jo)0?$o:-$o),t.point(r,i),t.lineEnd(),t.lineStart(),t.point(s,i),t.point(a,i),e=0):r!==s&&l>=jo&&(_o(n-r)Fo?Math.atan((Math.sin(e)*(a=Math.cos(i))*Math.sin(n)-Math.sin(i)*(r=Math.cos(e))*Math.sin(t))/(r*a*o)):(e+i)/2}function je(t,e,n,i){var r;if(null==t)r=n*$o,i.point(-jo,r),i.point(0,r),i.point(jo,r),i.point(jo,0),i.point(jo,-r),i.point(0,-r),i.point(-jo,-r),i.point(-jo,0),i.point(-jo,r);else if(_o(t[0]-e[0])>Fo){var a=t[0]=0?1:-1,S=w*b,T=S>jo,C=p*x;if(Cs.add(Math.atan2(C*w*Math.sin(S),g*_+C*Math.cos(S))),a+=T?b+w*Go:b,T^h>=n^v>=n){var A=ve(ge(d),ge(t));_e(A);var k=ve(r,A);_e(k);var P=(T^b>=0?-1:1)*et(k[2]);(i>P||i===P&&(A[0]||A[1]))&&(o+=T^b>=0?1:-1)}if(!m++)break;h=v,p=x,g=_,d=t}}return(a<-Fo||aa}function n(t){var n,a,l,u,c;return{lineStart:function(){u=l=!1,c=1},point:function(d,h){var f,p=[d,h],g=e(d,h),m=o?g?0:r(d,h):g?r(d+(d<0?jo:-jo),h):0;if(!n&&(u=l=g)&&t.lineStart(),g!==l&&(f=i(n,p),(we(n,f)||we(p,f))&&(p[0]+=Fo,p[1]+=Fo,g=e(p[0],p[1]))),g!==l)c=0,g?(t.lineStart(),f=i(p,n),t.point(f[0],f[1])):(f=i(n,p),t.point(f[0],f[1]),t.lineEnd()),n=f;else if(s&&n&&o^g){var v;m&a||!(v=i(p,n,!0))||(c=0,o?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!g||n&&we(n,p)||t.point(p[0],p[1]),n=p,l=g,a=m},lineEnd:function(){l&&t.lineEnd(),n=null},clean:function(){return c|(u&&l)<<1}}}function i(t,e,n){var i=ge(t),r=ge(e),o=[1,0,0],s=ve(i,r),l=me(s,s),u=s[0],c=l-u*u;if(!c)return!n&&t;var d=a*l/c,h=-a*u/c,f=ve(o,s),p=xe(o,d),g=xe(s,h);ye(p,g);var m=f,v=me(p,m),y=me(m,m),x=v*v-y*(me(p,p)-1);if(!(x<0)){var _=Math.sqrt(x),b=xe(m,(-v-_)/y);if(ye(b,p),b=be(b),!n)return b;var w,S=t[0],T=e[0],C=t[1],A=e[1];T0^b[1]<(_o(b[0]-S)jo^(S<=b[0]&&b[0]<=T)){var E=xe(m,(-v+_)/y);return ye(E,p),[b,be(E)]}}}function r(e,n){var i=o?t:jo-t,r=0;return e<-i?r|=1:e>i&&(r|=2),n<-i?r|=4:n>i&&(r|=8),r}var a=Math.cos(t),o=a>0,s=_o(a)>Fo,l=gn(t,6*zo);return Le(e,n,l,o?[0,-t]:[-jo,t-jo])}function $e(t,e,n,i){return function(r){var a,o=r.a,s=r.b,l=o.x,u=o.y,c=s.x,d=s.y,h=0,f=1,p=c-l,g=d-u;if(a=t-l,p||!(a>0)){if(a/=p,p<0){if(a0){if(a>f)return;a>h&&(h=a)}if(a=n-l,p||!(a<0)){if(a/=p,p<0){if(a>f)return;a>h&&(h=a)}else if(p>0){if(a0)){if(a/=g,g<0){if(a0){if(a>f)return;a>h&&(h=a)}if(a=i-u,g||!(a<0)){if(a/=g,g<0){if(a>f)return;a>h&&(h=a)}else if(g>0){if(a0&&(r.a={x:l+h*p,y:u+h*g}),f<1&&(r.b={x:l+f*p,y:u+f*g}),r}}}}}}function ze(t,e,n,i){function r(i,r){return _o(i[0]-t)0?0:3:_o(i[0]-n)0?2:1:_o(i[1]-e)0?1:0:r>0?3:2}function a(t,e){return o(t.x,e.x)}function o(t,e){var n=r(t,1),i=r(e,1);return n!==i?n-i:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(s){function l(t){for(var e=0,n=m.length,i=t[1],r=0;ri&&J(u,a,t)>0&&++e:a[1]<=i&&J(u,a,t)<0&&--e,u=a;return 0!==e}function u(a,s,l,u){var c=0,d=0;if(null==a||(c=r(a,l))!==(d=r(s,l))||o(a,s)<0^l>0){do u.point(0===c||3===c?t:n,c>1?i:e);while((c=(c+l+4)%4)!==d)}else u.point(s[0],s[1])}function c(r,a){return t<=r&&r<=n&&e<=a&&a<=i}function d(t,e){c(t,e)&&s.point(t,e)}function h(){M.point=p,m&&m.push(v=[]),T=!0,S=!1,b=w=NaN}function f(){g&&(p(y,x),_&&S&&k.rejoin(),g.push(k.buffer())),M.point=d,S&&s.lineEnd()}function p(t,e){t=Math.max(-Gs,Math.min(Gs,t)),e=Math.max(-Gs,Math.min(Gs,e));var n=c(t,e);if(m&&v.push([t,e]),T)y=t,x=e,_=n,T=!1,n&&(s.lineStart(),s.point(t,e));else if(n&&S)s.point(t,e);else{var i={ -a:{x:b,y:w},b:{x:t,y:e}};P(i)?(S||(s.lineStart(),s.point(i.a.x,i.a.y)),s.point(i.b.x,i.b.y),n||s.lineEnd(),C=!1):n&&(s.lineStart(),s.point(t,e),C=!1)}b=t,w=e,S=n}var g,m,v,y,x,_,b,w,S,T,C,A=s,k=Ne(),P=$e(t,e,n,i),M={point:d,lineStart:h,lineEnd:f,polygonStart:function(){s=k,g=[],m=[],C=!0},polygonEnd:function(){s=A,g=so.merge(g);var e=l([t,i]),n=C&&e,r=g.length;(n||r)&&(s.polygonStart(),n&&(s.lineStart(),u(null,null,1,s),s.lineEnd()),r&&Ee(g,a,e,u,s),s.polygonEnd()),g=m=v=null}};return M}}function Ye(t){var e=0,n=jo/3,i=sn(t),r=i(e,n);return r.parallels=function(t){return arguments.length?i(e=t[0]*jo/180,n=t[1]*jo/180):[e/jo*180,n/jo*180]},r}function Be(t,e){function n(t,e){var n=Math.sqrt(a-2*r*Math.sin(e))/r;return[n*Math.sin(t*=r),o-n*Math.cos(t)]}var i=Math.sin(t),r=(i+Math.sin(e))/2,a=1+i*(2*r-i),o=Math.sqrt(a)/r;return n.invert=function(t,e){var n=o-e;return[Math.atan2(t,n)/r,et((a-(t*t+n*n)*r*r)/(2*r))]},n}function Xe(){function t(t,e){$s+=r*t-i*e,i=t,r=e}var e,n,i,r;qs.point=function(a,o){qs.point=t,e=i=a,n=r=o},qs.lineEnd=function(){t(e,n)}}function qe(t,e){tBs&&(Bs=t),eXs&&(Xs=e)}function Ue(){function t(t,e){o.push("M",t,",",e,a)}function e(t,e){o.push("M",t,",",e),s.point=n}function n(t,e){o.push("L",t,",",e)}function i(){s.point=t}function r(){o.push("Z")}var a=We(4.5),o=[],s={point:t,lineStart:function(){s.point=e},lineEnd:i,polygonStart:function(){s.lineEnd=r},polygonEnd:function(){s.lineEnd=i,s.point=t},pointRadius:function(t){return a=We(t),s},result:function(){if(o.length){var t=o.join("");return o=[],t}}};return s}function We(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Qe(t,e){Ms+=t,Es+=e,++Ds}function Ke(){function t(t,i){var r=t-e,a=i-n,o=Math.sqrt(r*r+a*a);Os+=o*(e+t)/2,Ls+=o*(n+i)/2,Is+=o,Qe(e=t,n=i)}var e,n;Ws.point=function(i,r){Ws.point=t,Qe(e=i,n=r)}}function Ze(){Ws.point=Qe}function Je(){function t(t,e){var n=t-i,a=e-r,o=Math.sqrt(n*n+a*a);Os+=o*(i+t)/2,Ls+=o*(r+e)/2,Is+=o,o=r*t-i*e,Ns+=o*(i+t),Rs+=o*(r+e),Fs+=3*o,Qe(i=t,r=e)}var e,n,i,r;Ws.point=function(a,o){Ws.point=t,Qe(e=i=a,n=r=o)},Ws.lineEnd=function(){t(e,n)}}function tn(t){function e(e,n){t.moveTo(e+o,n),t.arc(e,n,o,0,Go)}function n(e,n){t.moveTo(e,n),s.point=i}function i(e,n){t.lineTo(e,n)}function r(){s.point=e}function a(){t.closePath()}var o=4.5,s={point:e,lineStart:function(){s.point=n},lineEnd:r,polygonStart:function(){s.lineEnd=a},polygonEnd:function(){s.lineEnd=r,s.point=e},pointRadius:function(t){return o=t,s},result:b};return s}function en(t){function e(t){return(s?i:n)(t)}function n(e){return an(e,function(n,i){n=t(n,i),e.point(n[0],n[1])})}function i(e){function n(n,i){n=t(n,i),e.point(n[0],n[1])}function i(){x=NaN,T.point=a,e.lineStart()}function a(n,i){var a=ge([n,i]),o=t(n,i);r(x,_,y,b,w,S,x=o[0],_=o[1],y=n,b=a[0],w=a[1],S=a[2],s,e),e.point(x,_)}function o(){T.point=n,e.lineEnd()}function l(){i(),T.point=u,T.lineEnd=c}function u(t,e){a(d=t,h=e),f=x,p=_,g=b,m=w,v=S,T.point=a}function c(){r(x,_,y,b,w,S,f,p,d,g,m,v,s,e),T.lineEnd=o,o()}var d,h,f,p,g,m,v,y,x,_,b,w,S,T={point:n,lineStart:i,lineEnd:o,polygonStart:function(){e.polygonStart(),T.lineStart=l},polygonEnd:function(){e.polygonEnd(),T.lineStart=i}};return T}function r(e,n,i,s,l,u,c,d,h,f,p,g,m,v){var y=c-e,x=d-n,_=y*y+x*x;if(_>4*a&&m--){var b=s+f,w=l+p,S=u+g,T=Math.sqrt(b*b+w*w+S*S),C=Math.asin(S/=T),A=_o(_o(S)-1)a||_o((y*E+x*D)/_-.5)>.3||s*f+l*p+u*g0&&16,e):Math.sqrt(a)},e}function nn(t){var e=en(function(e,n){return t([e*Yo,n*Yo])});return function(t){return ln(e(t))}}function rn(t){this.stream=t}function an(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function on(t){return sn(function(){return t})()}function sn(t){function e(t){return t=s(t[0]*zo,t[1]*zo),[t[0]*h+l,u-t[1]*h]}function n(t){return t=s.invert((t[0]-l)/h,(u-t[1])/h),t&&[t[0]*Yo,t[1]*Yo]}function i(){s=Pe(o=dn(v,x,_),a);var t=a(g,m);return l=f-t[0]*h,u=p+t[1]*h,r()}function r(){return c&&(c.valid=!1,c=null),e}var a,o,s,l,u,c,d=en(function(t,e){return t=a(t,e),[t[0]*h+l,u-t[1]*h]}),h=150,f=480,p=250,g=0,m=0,v=0,x=0,_=0,b=js,w=y,S=null,T=null;return e.stream=function(t){return c&&(c.valid=!1),c=ln(b(o,d(w(t)))),c.valid=!0,c},e.clipAngle=function(t){return arguments.length?(b=null==t?(S=t,js):He((S=+t)*zo),r()):S},e.clipExtent=function(t){return arguments.length?(T=t,w=t?ze(t[0][0],t[0][1],t[1][0],t[1][1]):y,r()):T},e.scale=function(t){return arguments.length?(h=+t,i()):h},e.translate=function(t){return arguments.length?(f=+t[0],p=+t[1],i()):[f,p]},e.center=function(t){return arguments.length?(g=t[0]%360*zo,m=t[1]%360*zo,i()):[g*Yo,m*Yo]},e.rotate=function(t){return arguments.length?(v=t[0]%360*zo,x=t[1]%360*zo,_=t.length>2?t[2]%360*zo:0,i()):[v*Yo,x*Yo,_*Yo]},so.rebind(e,d,"precision"),function(){return a=t.apply(this,arguments),e.invert=a.invert&&n,i()}}function ln(t){return an(t,function(e,n){t.point(e*zo,n*zo)})}function un(t,e){return[t,e]}function cn(t,e){return[t>jo?t-Go:t<-jo?t+Go:t,e]}function dn(t,e,n){return t?e||n?Pe(fn(t),pn(e,n)):fn(t):e||n?pn(e,n):cn}function hn(t){return function(e,n){return e+=t,[e>jo?e-Go:e<-jo?e+Go:e,n]}}function fn(t){var e=hn(t);return e.invert=hn(-t),e}function pn(t,e){function n(t,e){var n=Math.cos(e),s=Math.cos(t)*n,l=Math.sin(t)*n,u=Math.sin(e),c=u*i+s*r;return[Math.atan2(l*a-c*o,s*i-u*r),et(c*a+l*o)]}var i=Math.cos(t),r=Math.sin(t),a=Math.cos(e),o=Math.sin(e);return n.invert=function(t,e){var n=Math.cos(e),s=Math.cos(t)*n,l=Math.sin(t)*n,u=Math.sin(e),c=u*a-l*o;return[Math.atan2(l*a+u*o,s*i+c*r),et(c*i-s*r)]},n}function gn(t,e){var n=Math.cos(t),i=Math.sin(t);return function(r,a,o,s){var l=o*e;null!=r?(r=mn(n,r),a=mn(n,a),(o>0?ra)&&(r+=o*Go)):(r=t+o*Go,a=t-.5*l);for(var u,c=r;o>0?c>a:c0?e<-$o+Fo&&(e=-$o+Fo):e>$o-Fo&&(e=$o-Fo);var n=o/Math.pow(r(e),a);return[n*Math.sin(a*t),o-n*Math.cos(a*t)]}var i=Math.cos(t),r=function(t){return Math.tan(jo/4+t/2)},a=t===e?Math.sin(t):Math.log(i/Math.cos(e))/Math.log(r(e)/r(t)),o=i*Math.pow(r(t),a)/a;return a?(n.invert=function(t,e){var n=o-e,i=Z(a)*Math.sqrt(t*t+n*n);return[Math.atan2(t,n)/a,2*Math.atan(Math.pow(o/i,1/a))-$o]},n):An}function Cn(t,e){function n(t,e){var n=a-e;return[n*Math.sin(r*t),a-n*Math.cos(r*t)]}var i=Math.cos(t),r=t===e?Math.sin(t):(i-Math.cos(e))/(e-t),a=i/r+t;return _o(r)1&&J(t[n[i-2]],t[n[i-1]],t[r])<=0;)--i;n[i++]=r}return n.slice(0,i)}function On(t,e){return t[0]-e[0]||t[1]-e[1]}function Ln(t,e,n){return(n[0]-e[0])*(t[1]-e[1])<(n[1]-e[1])*(t[0]-e[0])}function In(t,e,n,i){var r=t[0],a=n[0],o=e[0]-r,s=i[0]-a,l=t[1],u=n[1],c=e[1]-l,d=i[1]-u,h=(s*(l-u)-d*(r-a))/(d*o-s*c);return[r+h*o,l+h*c]}function Nn(t){var e=t[0],n=t[t.length-1];return!(e[0]-n[0]||e[1]-n[1])}function Rn(){ii(this),this.edge=this.site=this.circle=null}function Fn(t){var e=ul.pop()||new Rn;return e.site=t,e}function Vn(t){Un(t),ol.remove(t),ul.push(t),ii(t)}function jn(t){var e=t.circle,n=e.x,i=e.cy,r={x:n,y:i},a=t.P,o=t.N,s=[t];Vn(t);for(var l=a;l.circle&&_o(n-l.circle.x)Fo)s=s.L;else{if(r=a-$n(s,o),!(r>Fo)){i>-Fo?(e=s.P,n=s):r>-Fo?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}var l=Fn(t);if(ol.insert(e,l),e||n){if(e===n)return Un(e),n=Fn(e.site),ol.insert(l,n),l.edge=n.edge=Zn(e.site,l.site),qn(e),void qn(n);if(!n)return void(l.edge=Zn(e.site,l.site));Un(e),Un(n);var u=e.site,c=u.x,d=u.y,h=t.x-c,f=t.y-d,p=n.site,g=p.x-c,m=p.y-d,v=2*(h*m-f*g),y=h*h+f*f,x=g*g+m*m,_={x:(m*y-f*x)/v+c,y:(h*x-g*y)/v+d};ti(n.edge,u,p,_),l.edge=Zn(u,t,null,_),n.edge=Zn(t,p,null,_),qn(e),qn(n)}}function Hn(t,e){var n=t.site,i=n.x,r=n.y,a=r-e;if(!a)return i;var o=t.P;if(!o)return-(1/0);n=o.site;var s=n.x,l=n.y,u=l-e;if(!u)return s;var c=s-i,d=1/a-1/u,h=c/u;return d?(-h+Math.sqrt(h*h-2*d*(c*c/(-2*u)-l+u/2+r-a/2)))/d+i:(i+s)/2}function $n(t,e){var n=t.N;if(n)return Hn(n,e);var i=t.site;return i.y===e?i.x:1/0}function zn(t){this.site=t,this.edges=[]}function Yn(t){for(var e,n,i,r,a,o,s,l,u,c,d=t[0][0],h=t[1][0],f=t[0][1],p=t[1][1],g=al,m=g.length;m--;)if(a=g[m],a&&a.prepare())for(s=a.edges,l=s.length,o=0;oFo||_o(r-n)>Fo)&&(s.splice(o,0,new ei(Jn(a.site,c,_o(i-d)Fo?{x:d,y:_o(e-d)Fo?{x:_o(n-p)Fo?{x:h,y:_o(e-h)Fo?{x:_o(n-f)=-Vo)){var f=l*l+u*u,p=c*c+d*d,g=(d*f-u*p)/h,m=(l*p-c*f)/h,d=m+s,v=cl.pop()||new Xn;v.arc=t,v.site=r,v.x=g+o,v.y=d+Math.sqrt(g*g+m*m),v.cy=d,t.circle=v;for(var y=null,x=ll._;x;)if(v.y=s)return;if(h>p){if(a){if(a.y>=u)return}else a={x:m,y:l};n={x:m,y:u}}else{if(a){if(a.y1)if(h>p){if(a){if(a.y>=u)return}else a={x:(l-r)/i,y:l};n={x:(u-r)/i,y:u}}else{if(a){if(a.y=s)return}else a={x:o,y:i*o+r};n={x:s,y:i*s+r}}else{if(a){if(a.xa||d>o||h=_,S=n>=b,T=S<<1|w,C=T+4;Ta&&(r=e.slice(a,r),s[o]?s[o]+=r:s[++o]=r),(n=n[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,l.push({i:o,x:vi(n,i)})),a=fl.lastIndex;return a=0&&!(n=so.interpolators[i](t,e)););return n}function _i(t,e){var n,i=[],r=[],a=t.length,o=e.length,s=Math.min(t.length,e.length);for(n=0;n=1?1:t(e)}}function wi(t){return function(e){return 1-t(1-e)}}function Si(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function Ti(t){return t*t}function Ci(t){return t*t*t}function Ai(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,n=e*t;return 4*(t<.5?n:3*(t-e)+n-.75)}function ki(t){return function(e){return Math.pow(e,t)}}function Pi(t){return 1-Math.cos(t*$o)}function Mi(t){return Math.pow(2,10*(t-1))}function Ei(t){return 1-Math.sqrt(1-t*t)}function Di(t,e){var n;return arguments.length<2&&(e=.45),arguments.length?n=e/Go*Math.asin(1/t):(t=1,n=e/4),function(i){return 1+t*Math.pow(2,-10*i)*Math.sin((i-n)*Go/e)}}function Oi(t){return t||(t=1.70158),function(e){return e*e*((t+1)*e-t)}}function Li(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function Ii(t,e){t=so.hcl(t),e=so.hcl(e);var n=t.h,i=t.c,r=t.l,a=e.h-n,o=e.c-i,s=e.l-r;return isNaN(o)&&(o=0,i=isNaN(i)?e.c:i),isNaN(a)?(a=0,n=isNaN(n)?e.h:n):a>180?a-=360:a<-180&&(a+=360),function(t){return ct(n+a*t,i+o*t,r+s*t)+""}}function Ni(t,e){t=so.hsl(t),e=so.hsl(e);var n=t.h,i=t.s,r=t.l,a=e.h-n,o=e.s-i,s=e.l-r;return isNaN(o)&&(o=0,i=isNaN(i)?e.s:i),isNaN(a)?(a=0,n=isNaN(n)?e.h:n):a>180?a-=360:a<-180&&(a+=360),function(t){return lt(n+a*t,i+o*t,r+s*t)+""}}function Ri(t,e){t=so.lab(t),e=so.lab(e);var n=t.l,i=t.a,r=t.b,a=e.l-n,o=e.a-i,s=e.b-r;return function(t){return ht(n+a*t,i+o*t,r+s*t)+""}}function Fi(t,e){return e-=t,function(n){return Math.round(t+e*n)}}function Vi(t){var e=[t.a,t.b],n=[t.c,t.d],i=Gi(e),r=ji(e,n),a=Gi(Hi(n,e,-r))||0;e[0]*n[1]180?e+=360:e-t>180&&(t+=360),i.push({i:n.push($i(n)+"rotate(",null,")")-2,x:vi(t,e)})):e&&n.push($i(n)+"rotate("+e+")")}function Bi(t,e,n,i){t!==e?i.push({i:n.push($i(n)+"skewX(",null,")")-2,x:vi(t,e)}):e&&n.push($i(n)+"skewX("+e+")")}function Xi(t,e,n,i){if(t[0]!==e[0]||t[1]!==e[1]){var r=n.push($i(n)+"scale(",null,",",null,")");i.push({i:r-4,x:vi(t[0],e[0])},{i:r-2,x:vi(t[1],e[1])})}else 1===e[0]&&1===e[1]||n.push($i(n)+"scale("+e+")")}function qi(t,e){var n=[],i=[];return t=so.transform(t),e=so.transform(e),zi(t.translate,e.translate,n,i),Yi(t.rotate,e.rotate,n,i),Bi(t.skew,e.skew,n,i),Xi(t.scale,e.scale,n,i),t=e=null,function(t){for(var e,r=-1,a=i.length;++r=0;)n.push(r[i])}function or(t,e){for(var n=[t],i=[];null!=(t=n.pop());)if(i.push(t),(a=t.children)&&(r=a.length))for(var r,a,o=-1;++or&&(i=n,r=e);return i}function vr(t){return t.reduce(yr,0)}function yr(t,e){return t+e[1]}function xr(t,e){return _r(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function _r(t,e){for(var n=-1,i=+t[0],r=(t[1]-i)/e,a=[];++n<=e;)a[n]=r*n+i;return a}function br(t){return[so.min(t),so.max(t)]}function wr(t,e){return t.value-e.value}function Sr(t,e){var n=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=n,n._pack_prev=e}function Tr(t,e){t._pack_next=e,e._pack_prev=t}function Cr(t,e){var n=e.x-t.x,i=e.y-t.y,r=t.r+e.r;return.999*r*r>n*n+i*i}function Ar(t){function e(t){c=Math.min(t.x-t.r,c),d=Math.max(t.x+t.r,d),h=Math.min(t.y-t.r,h),f=Math.max(t.y+t.r,f)}if((n=t.children)&&(u=n.length)){var n,i,r,a,o,s,l,u,c=1/0,d=-(1/0),h=1/0,f=-(1/0);if(n.forEach(kr),i=n[0],i.x=-i.r,i.y=0,e(i),u>1&&(r=n[1],r.x=r.r,r.y=0,e(r),u>2))for(a=n[2],Er(i,r,a),e(a),Sr(i,a),i._pack_prev=a,Sr(a,r),r=i._pack_next,o=3;o=0;)e=r[a],e.z+=n,e.m+=n,n+=e.s+(i+=e.c)}function Rr(t,e,n){return t.a.parent===e.parent?t.a:n}function Fr(t){return 1+so.max(t,function(t){return t.y})}function Vr(t){return t.reduce(function(t,e){return t+e.x},0)/t.length}function jr(t){var e=t.children;return e&&e.length?jr(e[0]):t}function Gr(t){var e,n=t.children;return n&&(e=n.length)?Gr(n[e-1]):t}function Hr(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function $r(t,e){var n=t.x+e[3],i=t.y+e[0],r=t.dx-e[1]-e[3],a=t.dy-e[0]-e[2];return r<0&&(n+=r/2,r=0),a<0&&(i+=a/2,a=0),{x:n,y:i,dx:r,dy:a}}function zr(t){var e=t[0],n=t[t.length-1];return e2?Ur:Br,l=i?Wi:Ui;return o=r(t,e,l,n),s=r(e,t,l,xi),a}function a(t){return o(t)}var o,s;return a.invert=function(t){return s(t)},a.domain=function(e){return arguments.length?(t=e.map(Number),r()):t},a.range=function(t){return arguments.length?(e=t,r()):e},a.rangeRound=function(t){return a.range(t).interpolate(Fi)},a.clamp=function(t){return arguments.length?(i=t,r()):i},a.interpolate=function(t){return arguments.length?(n=t,r()):n},a.ticks=function(e){return Jr(t,e)},a.tickFormat=function(e,n){return ta(t,e,n)},a.nice=function(e){return Kr(t,e),r()},a.copy=function(){return Wr(t,e,n,i)},r()}function Qr(t,e){return so.rebind(t,e,"range","rangeRound","interpolate","clamp")}function Kr(t,e){return Xr(t,qr(Zr(t,e)[2])),Xr(t,qr(Zr(t,e)[2])),t}function Zr(t,e){null==e&&(e=10);var n=zr(t),i=n[1]-n[0],r=Math.pow(10,Math.floor(Math.log(i/e)/Math.LN10)),a=e/i*r;return a<=.15?r*=10:a<=.35?r*=5:a<=.75&&(r*=2),n[0]=Math.ceil(n[0]/r)*r,n[1]=Math.floor(n[1]/r)*r+.5*r,n[2]=r,n}function Jr(t,e){return so.range.apply(so,Zr(t,e))}function ta(t,e,n){var i=Zr(t,e);if(n){var r=hs.exec(n);if(r.shift(),"s"===r[8]){var a=so.formatPrefix(Math.max(_o(i[0]),_o(i[1])));return r[7]||(r[7]="."+ea(a.scale(i[2]))),r[8]="f",n=so.format(r.join("")),function(t){return n(a.scale(t))+a.symbol}}r[7]||(r[7]="."+na(r[8],i)),n=r.join("")}else n=",."+ea(i[2])+"f";return so.format(n)}function ea(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}function na(t,e){var n=ea(e[2]);return t in Cl?Math.abs(n-ea(Math.max(_o(e[0]),_o(e[1]))))+ +("e"!==t):n-2*("%"===t)}function ia(t,e,n,i){function r(t){return(n?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function a(t){return n?Math.pow(e,t):-Math.pow(e,-t)}function o(e){return t(r(e))}return o.invert=function(e){return a(t.invert(e))},o.domain=function(e){return arguments.length?(n=e[0]>=0,t.domain((i=e.map(Number)).map(r)),o):i},o.base=function(n){return arguments.length?(e=+n,t.domain(i.map(r)),o):e},o.nice=function(){var e=Xr(i.map(r),n?Math:kl);return t.domain(e),i=e.map(a),o},o.ticks=function(){var t=zr(i),o=[],s=t[0],l=t[1],u=Math.floor(r(s)),c=Math.ceil(r(l)),d=e%1?2:e;if(isFinite(c-u)){if(n){for(;u0;h--)o.push(a(u)*h);for(u=0;o[u]l;c--);o=o.slice(u,c)}return o},o.tickFormat=function(t,n){if(!arguments.length)return Al;arguments.length<2?n=Al:"function"!=typeof n&&(n=so.format(n));var i=Math.max(1,e*t/o.ticks().length);return function(t){var o=t/a(Math.round(r(t)));return o*e0?s[n-1]:t[0],n0?0:1}function ya(t,e,n,i,r){var a=t[0]-e[0],o=t[1]-e[1],s=(r?i:-i)/Math.sqrt(a*a+o*o),l=s*o,u=-s*a,c=t[0]+l,d=t[1]+u,h=e[0]+l,f=e[1]+u,p=(c+h)/2,g=(d+f)/2,m=h-c,v=f-d,y=m*m+v*v,x=n-i,_=c*f-h*d,b=(v<0?-1:1)*Math.sqrt(Math.max(0,x*x*y-_*_)),w=(_*v-m*b)/y,S=(-_*m-v*b)/y,T=(_*v+m*b)/y,C=(-_*m+v*b)/y,A=w-p,k=S-g,P=T-p,M=C-g;return A*A+k*k>P*P+M*M&&(w=T,S=C),[[w-l,S-u],[w*n/x,S*n/x]]}function xa(t){function e(e){function o(){u.push("M",a(t(c),s))}for(var l,u=[],c=[],d=-1,h=e.length,f=At(n),p=At(i);++d1?t.join("L"):t+"Z"}function ba(t){return t.join("L")+"Z"}function wa(t){for(var e=0,n=t.length,i=t[0],r=[i[0],",",i[1]];++e1&&r.push("H",i[0]),r.join("")}function Sa(t){for(var e=0,n=t.length,i=t[0],r=[i[0],",",i[1]];++e1){s=e[1],a=t[l],l++,i+="C"+(r[0]+o[0])+","+(r[1]+o[1])+","+(a[0]-s[0])+","+(a[1]-s[1])+","+a[0]+","+a[1];for(var u=2;u9&&(r=3*e/Math.sqrt(r),o[s]=r*n,o[s+1]=r*i));for(s=-1;++s<=l;)r=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),a.push([r||0,o[s]*r||0]);return a}function ja(t){return t.length<3?_a(t):t[0]+Pa(t,Va(t))}function Ga(t){for(var e,n,i,r=-1,a=t.length;++r0;)f[--s].call(t,o);if(a>=1)return g.event&&g.event.end.call(t,t.__data__,e),--p.count?delete p[i]:delete t[n],1}var l,c,d,h,f,p=t[n]||(t[n]={active:0,count:0}),g=p[i];g||(l=r.time,c=Dt(a,0,l),g=p[i]={tween:new u,time:l,timer:c,delay:r.delay,duration:r.duration,ease:r.ease,index:e},r=null,++p.count)}function to(t,e,n){t.attr("transform",function(t){var i=e(t);return"translate("+(isFinite(i)?i:n(t))+",0)"})}function eo(t,e,n){t.attr("transform",function(t){var i=e(t);return"translate(0,"+(isFinite(i)?i:n(t))+")"})}function no(t){return t.toISOString()}function io(t,e,n){function i(e){return t(e)}function r(t,n){var i=t[1]-t[0],r=i/n,a=so.bisect(Zl,r);return a==Zl.length?[e.year,Zr(t.map(function(t){return t/31536e6}),n)[2]]:a?e[r/Zl[a-1]1?{floor:function(e){for(;n(e=t.floor(e));)e=ro(e-1);return e},ceil:function(e){for(;n(e=t.ceil(e));)e=ro(+e+1);return e}}:t))},i.ticks=function(t,e){var n=zr(i.domain()),a=null==t?r(n,10):"number"==typeof t?r(n,t):!t.range&&[{range:t},e];return a&&(t=a[0],e=a[1]),t.range(n[0],ro(+n[1]+1),e<1?1:e)},i.tickFormat=function(){return n},i.copy=function(){return io(t.copy(),e,n)},Qr(i,t)}function ro(t){return new Date(t)}function ao(t){return JSON.parse(t.responseText)}function oo(t){var e=co.createRange();return e.selectNode(co.body),e.createContextualFragment(t.responseText)}var so={version:"3.5.17"},lo=[].slice,uo=function(t){return lo.call(t)},co=this.document;if(co)try{uo(co.documentElement.childNodes)[0].nodeType}catch(ho){uo=function(t){for(var e=t.length,n=new Array(e);e--;)n[e]=t[e];return n}}if(Date.now||(Date.now=function(){return+new Date}),co)try{co.createElement("DIV").style.setProperty("opacity",0,"")}catch(fo){var po=this.Element.prototype,go=po.setAttribute,mo=po.setAttributeNS,vo=this.CSSStyleDeclaration.prototype,yo=vo.setProperty;po.setAttribute=function(t,e){go.call(this,t,e+"")},po.setAttributeNS=function(t,e,n){mo.call(this,t,e,n+"")},vo.setProperty=function(t,e,n){yo.call(this,t,e+"",n)}}so.ascending=n,so.descending=function(t,e){return et?1:e>=t?0:NaN},so.min=function(t,e){var n,i,r=-1,a=t.length;if(1===arguments.length){for(;++r=i){n=i;break}for(;++ri&&(n=i)}else{for(;++r=i){n=i;break}for(;++ri&&(n=i)}return n},so.max=function(t,e){var n,i,r=-1,a=t.length;if(1===arguments.length){for(;++r=i){n=i;break}for(;++rn&&(n=i)}else{for(;++r=i){n=i;break}for(;++rn&&(n=i)}return n},so.extent=function(t,e){var n,i,r,a=-1,o=t.length;if(1===arguments.length){for(;++a=i){n=r=i;break}for(;++ai&&(n=i),r=i){n=r=i;break}for(;++ai&&(n=i),r1)return l/(c-1)},so.deviation=function(){var t=so.variance.apply(this,arguments);return t?Math.sqrt(t):t};var xo=a(n);so.bisectLeft=xo.left,so.bisect=so.bisectRight=xo.right,so.bisector=function(t){return a(1===t.length?function(e,i){return n(t(e),i)}:t)},so.shuffle=function(t,e,n){(a=arguments.length)<3&&(n=t.length,a<2&&(e=0));for(var i,r,a=n-e;a;)r=Math.random()*a--|0,i=t[a+e],t[a+e]=t[r+e],t[r+e]=i;return t},so.permute=function(t,e){for(var n=e.length,i=new Array(n);n--;)i[n]=t[e[n]];return i},so.pairs=function(t){for(var e,n=0,i=t.length-1,r=t[0],a=new Array(i<0?0:i);n=0;)for(i=t[r],e=i.length;--e>=0;)n[--o]=i[e];return n};var _o=Math.abs;so.range=function(t,e,n){if(arguments.length<3&&(n=1,arguments.length<2&&(e=t,t=0)),(e-t)/n===1/0)throw new Error("infinite range");var i,r=[],a=s(_o(n)),o=-1;if(t*=a,e*=a,n*=a,n<0)for(;(i=t+n*++o)>e;)r.push(i/a);else for(;(i=t+n*++o)=a.length)return i?i.call(r,o):n?o.sort(n):o;for(var l,c,d,h,f=-1,p=o.length,g=a[s++],m=new u;++f=a.length)return t;var i=[],r=o[n++];return t.forEach(function(t,r){i.push({key:t,values:e(r,n)})}),r?i.sort(function(t,e){return r(t.key,e.key)}):i}var n,i,r={},a=[],o=[];return r.map=function(e,n){return t(n,e,0)},r.entries=function(n){return e(t(so.map,n,0),0)},r.key=function(t){return a.push(t),r},r.sortKeys=function(t){return o[a.length-1]=t,r},r.sortValues=function(t){return n=t,r},r.rollup=function(t){return i=t,r},r},so.set=function(t){var e=new v;if(t)for(var n=0,i=t.length;n=0&&(i=t.slice(n+1),t=t.slice(0,n)),t)return arguments.length<2?this[t].on(i):this[t].on(i,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(i,null);return this}},so.event=null,so.requote=function(t){return t.replace(To,"\\$&")};var To=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,Co={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var n in e)t[n]=e[n]},Ao=function(t,e){return e.querySelector(t)},ko=function(t,e){return e.querySelectorAll(t)},Po=function(t,e){var n=t.matches||t[_(t,"matchesSelector")];return(Po=function(t,e){return n.call(t,e)})(t,e)};"function"==typeof Sizzle&&(Ao=function(t,e){return Sizzle(t,e)[0]||null},ko=Sizzle,Po=Sizzle.matchesSelector),so.selection=function(){return so.select(co.documentElement)};var Mo=so.selection.prototype=[];Mo.select=function(t){var e,n,i,r,a=[];t=P(t);for(var o=-1,s=this.length;++o=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),Do.hasOwnProperty(n)?{space:Do[n],local:t}:t}},Mo.attr=function(t,e){if(arguments.length<2){if("string"==typeof t){var n=this.node();return t=so.ns.qualify(t),t.local?n.getAttributeNS(t.space,t.local):n.getAttribute(t)}for(e in t)this.each(E(e,t[e]));return this}return this.each(E(t,e))},Mo.classed=function(t,e){if(arguments.length<2){if("string"==typeof t){var n=this.node(),i=(t=L(t)).length,r=-1;if(e=n.classList){for(;++r=0;)(n=i[r])&&(a&&a!==n.nextSibling&&a.parentNode.insertBefore(n,a),a=n);return this},Mo.sort=function(t){t=$.apply(this,arguments);for(var e=-1,n=this.length;++e0&&(e=e.transition().duration(M)),e.call(t.event)}function s(){b&&b.domain(_.range().map(function(t){return(t-C.x)/C.k}).map(_.invert)),S&&S.domain(w.range().map(function(t){return(t-C.y)/C.k}).map(w.invert))}function l(t){E++||t({type:"zoomstart"})}function u(t){s(),t({type:"zoom",scale:C.k,translate:[C.x,C.y]})}function c(t){--E||(t({type:"zoomend"}),m=null)}function d(){function t(){s=1,a(so.mouse(r),h),u(o)}function i(){d.on(O,null).on(L,null),f(s),c(o)}var r=this,o=N.of(r,arguments),s=0,d=so.select(e(r)).on(O,t).on(L,i),h=n(so.mouse(r)),f=W(r);$l.call(r),l(o)}function h(){function t(){var t=so.touches(p);return f=C.k,t.forEach(function(t){t.identifier in m&&(m[t.identifier]=n(t))}),t}function e(){var e=so.event.target;so.select(e).on(_,i).on(b,s),w.push(e);for(var n=so.event.changedTouches,r=0,a=n.length;r1){var c=l[0],d=l[1],h=c[0]-d[0],f=c[1]-d[1];v=h*h+f*f}}function i(){var t,e,n,i,o=so.touches(p);$l.call(p);for(var s=0,l=o.length;s=u)return o;if(r)return r=!1,a;var e=c;if(34===t.charCodeAt(e)){for(var n=e;n++=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,fs=so.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){ -return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(t,e){return(t=so.round(t,Nt(t,e))).toFixed(Math.max(0,Math.min(20,Nt(t*(1+1e-15),e))))}}),ps=so.time={},gs=Date;jt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){ms.setUTCDate.apply(this._,arguments)},setDay:function(){ms.setUTCDay.apply(this._,arguments)},setFullYear:function(){ms.setUTCFullYear.apply(this._,arguments)},setHours:function(){ms.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){ms.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){ms.setUTCMinutes.apply(this._,arguments)},setMonth:function(){ms.setUTCMonth.apply(this._,arguments)},setSeconds:function(){ms.setUTCSeconds.apply(this._,arguments)},setTime:function(){ms.setTime.apply(this._,arguments)}};var ms=Date.prototype;ps.year=Gt(function(t){return t=ps.day(t),t.setMonth(0,1),t},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t){return t.getFullYear()}),ps.years=ps.year.range,ps.years.utc=ps.year.utc.range,ps.day=Gt(function(t){var e=new gs(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e},function(t,e){t.setDate(t.getDate()+e)},function(t){return t.getDate()-1}),ps.days=ps.day.range,ps.days.utc=ps.day.utc.range,ps.dayOfYear=function(t){var e=ps.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(t,e){e=7-e;var n=ps[t]=Gt(function(t){return(t=ps.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t},function(t,e){t.setDate(t.getDate()+7*Math.floor(e))},function(t){var n=ps.year(t).getDay();return Math.floor((ps.dayOfYear(t)+(n+e)%7)/7)-(n!==e)});ps[t+"s"]=n.range,ps[t+"s"].utc=n.utc.range,ps[t+"OfYear"]=function(t){var n=ps.year(t).getDay();return Math.floor((ps.dayOfYear(t)+(n+e)%7)/7)}}),ps.week=ps.sunday,ps.weeks=ps.sunday.range,ps.weeks.utc=ps.sunday.utc.range,ps.weekOfYear=ps.sundayOfYear;var vs={"-":"",_:" ",0:"0"},ys=/^\s*\d+/,xs=/^%/;so.locale=function(t){return{numberFormat:Ft(t),timeFormat:$t(t)}};var _s=so.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});so.format=_s.numberFormat,so.geo={},ue.prototype={s:0,t:0,add:function(t){ce(t,this.t,bs),ce(bs.s,this.s,this),this.s?this.t+=bs.t:this.s=bs.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var bs=new ue;so.geo.stream=function(t,e){t&&ws.hasOwnProperty(t.type)?ws[t.type](t,e):de(t,e)};var ws={Feature:function(t,e){de(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,i=-1,r=n.length;++if&&(f=e)}function e(e,n){var i=ge([e*zo,n*zo]);if(v){var r=ve(v,i),a=[r[1],-r[0],0],o=ve(a,r);_e(o),o=be(o);var l=e-p,u=l>0?1:-1,g=o[0]*Yo*u,m=_o(l)>180;if(m^(u*pf&&(f=y)}else if(g=(g+360)%360-180,m^(u*pf&&(f=n);m?es(c,h)&&(h=e):s(e,h)>s(c,h)&&(c=e):h>=c?(eh&&(h=e)):e>p?s(c,e)>s(c,h)&&(h=e):s(e,h)>s(c,h)&&(c=e)}else t(e,n);v=i,p=e}function n(){b.point=e}function i(){_[0]=c,_[1]=h,b.point=t,v=null}function r(t,n){if(v){var i=t-p;y+=_o(i)>180?i+(i>0?360:-360):i}else g=t,m=n;As.point(t,n),e(t,n)}function a(){As.lineStart()}function o(){r(g,m),As.lineEnd(),_o(y)>Fo&&(c=-(h=180)),_[0]=c,_[1]=h,v=null}function s(t,e){return(e-=t)<0?e+360:e}function l(t,e){return t[0]-e[0]}function u(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:tFo?f=90:y<-Fo&&(d=-90),_[0]=c,_[1]=h}};return function(t){f=h=-(c=d=1/0),x=[],so.geo.stream(t,b);var e=x.length;if(e){x.sort(l);for(var n,i=1,r=x[0],a=[r];is(r[0],r[1])&&(r[1]=n[1]),s(n[0],r[1])>s(r[0],r[1])&&(r[0]=n[0])):a.push(r=n);for(var o,n,p=-(1/0),e=a.length-1,i=0,r=a[e];i<=e;r=n,++i)n=a[i],(o=s(r[1],n[0]))>p&&(p=o,c=n[0],h=r[1])}return x=_=null,c===1/0||d===1/0?[[NaN,NaN],[NaN,NaN]]:[[c,d],[h,f]]}}(),so.geo.centroid=function(t){ks=Ps=Ms=Es=Ds=Os=Ls=Is=Ns=Rs=Fs=0,so.geo.stream(t,Vs);var e=Ns,n=Rs,i=Fs,r=e*e+n*n+i*i;return r=.12&&r<.234&&i>=-.425&&i<-.214?o:r>=.166&&r<.234&&i>=-.214&&i<-.115?s:a).invert(t)},t.stream=function(t){var e=a.stream(t),n=o.stream(t),i=s.stream(t);return{point:function(t,r){e.point(t,r),n.point(t,r),i.point(t,r)},sphere:function(){e.sphere(),n.sphere(),i.sphere()},lineStart:function(){e.lineStart(),n.lineStart(),i.lineStart()},lineEnd:function(){e.lineEnd(),n.lineEnd(),i.lineEnd()},polygonStart:function(){e.polygonStart(),n.polygonStart(),i.polygonStart()},polygonEnd:function(){e.polygonEnd(),n.polygonEnd(),i.polygonEnd()}}},t.precision=function(e){return arguments.length?(a.precision(e),o.precision(e),s.precision(e),t):a.precision()},t.scale=function(e){return arguments.length?(a.scale(e),o.scale(.35*e),s.scale(e),t.translate(a.translate())):a.scale()},t.translate=function(e){if(!arguments.length)return a.translate();var u=a.scale(),c=+e[0],d=+e[1];return n=a.translate(e).clipExtent([[c-.455*u,d-.238*u],[c+.455*u,d+.238*u]]).stream(l).point,i=o.translate([c-.307*u,d+.201*u]).clipExtent([[c-.425*u+Fo,d+.12*u+Fo],[c-.214*u-Fo,d+.234*u-Fo]]).stream(l).point,r=s.translate([c-.205*u,d+.212*u]).clipExtent([[c-.214*u+Fo,d+.166*u+Fo],[c-.115*u-Fo,d+.234*u-Fo]]).stream(l).point,t},t.scale(1070)};var Hs,$s,zs,Ys,Bs,Xs,qs={point:b,lineStart:b,lineEnd:b,polygonStart:function(){$s=0,qs.lineStart=Xe},polygonEnd:function(){qs.lineStart=qs.lineEnd=qs.point=b,Hs+=_o($s/2)}},Us={point:qe,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Ws={point:Qe,lineStart:Ke,lineEnd:Ze,polygonStart:function(){Ws.lineStart=Je},polygonEnd:function(){Ws.point=Qe,Ws.lineStart=Ke,Ws.lineEnd=Ze}};so.geo.path=function(){function t(t){return t&&("function"==typeof s&&a.pointRadius(+s.apply(this,arguments)),o&&o.valid||(o=r(a)),so.geo.stream(t,o)),a.result()}function e(){return o=null,t}var n,i,r,a,o,s=4.5;return t.area=function(t){return Hs=0,so.geo.stream(t,r(qs)),Hs},t.centroid=function(t){return Ms=Es=Ds=Os=Ls=Is=Ns=Rs=Fs=0,so.geo.stream(t,r(Ws)),Fs?[Ns/Fs,Rs/Fs]:Is?[Os/Is,Ls/Is]:Ds?[Ms/Ds,Es/Ds]:[NaN,NaN]},t.bounds=function(t){return Bs=Xs=-(zs=Ys=1/0),so.geo.stream(t,r(Us)),[[zs,Ys],[Bs,Xs]]},t.projection=function(t){return arguments.length?(r=(n=t)?t.stream||nn(t):y,e()):n},t.context=function(t){return arguments.length?(a=null==(i=t)?new Ue:new tn(t),"function"!=typeof s&&a.pointRadius(s),e()):i},t.pointRadius=function(e){return arguments.length?(s="function"==typeof e?e:(a.pointRadius(+e),+e),t):s},t.projection(so.geo.albersUsa()).context(null)},so.geo.transform=function(t){return{stream:function(e){var n=new rn(e);for(var i in t)n[i]=t[i];return n}}},rn.prototype={point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},so.geo.projection=on,so.geo.projectionMutator=sn,(so.geo.equirectangular=function(){return on(un)}).raw=un.invert=un,so.geo.rotation=function(t){function e(e){return e=t(e[0]*zo,e[1]*zo),e[0]*=Yo,e[1]*=Yo,e}return t=dn(t[0]%360*zo,t[1]*zo,t.length>2?t[2]*zo:0),e.invert=function(e){return e=t.invert(e[0]*zo,e[1]*zo),e[0]*=Yo,e[1]*=Yo,e},e},cn.invert=un,so.geo.circle=function(){function t(){var t="function"==typeof i?i.apply(this,arguments):i,e=dn(-t[0]*zo,-t[1]*zo,0).invert,r=[];return n(null,null,1,{point:function(t,n){r.push(t=e(t,n)),t[0]*=Yo,t[1]*=Yo}}),{type:"Polygon",coordinates:[r]}}var e,n,i=[0,0],r=6;return t.origin=function(e){return arguments.length?(i=e,t):i},t.angle=function(i){return arguments.length?(n=gn((e=+i)*zo,r*zo),t):e},t.precision=function(i){return arguments.length?(n=gn(e*zo,(r=+i)*zo),t):r},t.angle(90)},so.geo.distance=function(t,e){var n,i=(e[0]-t[0])*zo,r=t[1]*zo,a=e[1]*zo,o=Math.sin(i),s=Math.cos(i),l=Math.sin(r),u=Math.cos(r),c=Math.sin(a),d=Math.cos(a);return Math.atan2(Math.sqrt((n=d*o)*n+(n=u*c-l*d*s)*n),l*c+u*d*s)},so.geo.graticule=function(){function t(){return{type:"MultiLineString",coordinates:e()}}function e(){return so.range(Math.ceil(a/m)*m,r,m).map(h).concat(so.range(Math.ceil(u/v)*v,l,v).map(f)).concat(so.range(Math.ceil(i/p)*p,n,p).filter(function(t){return _o(t%m)>Fo}).map(c)).concat(so.range(Math.ceil(s/g)*g,o,g).filter(function(t){return _o(t%v)>Fo}).map(d))}var n,i,r,a,o,s,l,u,c,d,h,f,p=10,g=p,m=90,v=360,y=2.5;return t.lines=function(){return e().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[h(a).concat(f(l).slice(1),h(r).reverse().slice(1),f(u).reverse().slice(1))]}},t.extent=function(e){return arguments.length?t.majorExtent(e).minorExtent(e):t.minorExtent()},t.majorExtent=function(e){return arguments.length?(a=+e[0][0],r=+e[1][0],u=+e[0][1],l=+e[1][1],a>r&&(e=a,a=r,r=e),u>l&&(e=u,u=l,l=e),t.precision(y)):[[a,u],[r,l]]},t.minorExtent=function(e){return arguments.length?(i=+e[0][0],n=+e[1][0],s=+e[0][1],o=+e[1][1],i>n&&(e=i,i=n,n=e),s>o&&(e=s,s=o,o=e),t.precision(y)):[[i,s],[n,o]]},t.step=function(e){return arguments.length?t.majorStep(e).minorStep(e):t.minorStep()},t.majorStep=function(e){return arguments.length?(m=+e[0],v=+e[1],t):[m,v]},t.minorStep=function(e){return arguments.length?(p=+e[0],g=+e[1],t):[p,g]},t.precision=function(e){return arguments.length?(y=+e,c=vn(s,o,90),d=yn(i,n,y),h=vn(u,l,90),f=yn(a,r,y),t):y},t.majorExtent([[-180,-90+Fo],[180,90-Fo]]).minorExtent([[-180,-80-Fo],[180,80+Fo]])},so.geo.greatArc=function(){function t(){return{type:"LineString",coordinates:[e||i.apply(this,arguments),n||r.apply(this,arguments)]}}var e,n,i=xn,r=_n;return t.distance=function(){return so.geo.distance(e||i.apply(this,arguments),n||r.apply(this,arguments))},t.source=function(n){return arguments.length?(i=n,e="function"==typeof n?null:n,t):i},t.target=function(e){return arguments.length?(r=e,n="function"==typeof e?null:e,t):r},t.precision=function(){return arguments.length?t:0},t},so.geo.interpolate=function(t,e){return bn(t[0]*zo,t[1]*zo,e[0]*zo,e[1]*zo)},so.geo.length=function(t){return Qs=0,so.geo.stream(t,Ks),Qs};var Qs,Ks={sphere:b,point:b,lineStart:wn,lineEnd:b,polygonStart:b,polygonEnd:b},Zs=Sn(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(so.geo.azimuthalEqualArea=function(){return on(Zs)}).raw=Zs;var Js=Sn(function(t){var e=Math.acos(t);return e&&e/Math.sin(e)},y);(so.geo.azimuthalEquidistant=function(){return on(Js)}).raw=Js,(so.geo.conicConformal=function(){return Ye(Tn)}).raw=Tn,(so.geo.conicEquidistant=function(){return Ye(Cn)}).raw=Cn;var tl=Sn(function(t){return 1/t},Math.atan);(so.geo.gnomonic=function(){return on(tl)}).raw=tl,An.invert=function(t,e){return[t,2*Math.atan(Math.exp(e))-$o]},(so.geo.mercator=function(){return kn(An)}).raw=An;var el=Sn(function(){return 1},Math.asin);(so.geo.orthographic=function(){return on(el)}).raw=el;var nl=Sn(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});(so.geo.stereographic=function(){return on(nl)}).raw=nl,Pn.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-$o]},(so.geo.transverseMercator=function(){var t=kn(Pn),e=t.center,n=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):(t=e(),[t[1],-t[0]])},t.rotate=function(t){return t?n([t[0],t[1],t.length>2?t[2]+90:90]):(t=n(),[t[0],t[1],t[2]-90])},n([0,0,90])}).raw=Pn,so.geom={},so.geom.hull=function(t){function e(t){if(t.length<3)return[];var e,r=At(n),a=At(i),o=t.length,s=[],l=[];for(e=0;e=0;--e)f.push(t[s[u[e]][2]]);for(e=+d;e=i&&u.x<=a&&u.y>=r&&u.y<=o?[[i,o],[a,o],[a,r],[i,r]]:[];c.point=t[s]}),e}function n(t){return t.map(function(t,e){return{x:Math.round(a(t,e)/Fo)*Fo,y:Math.round(o(t,e)/Fo)*Fo,i:e}})}var i=Mn,r=En,a=i,o=r,s=dl;return t?e(t):(e.links=function(t){return si(n(t)).edges.filter(function(t){return t.l&&t.r}).map(function(e){return{source:t[e.l.i],target:t[e.r.i]}})},e.triangles=function(t){var e=[];return si(n(t)).cells.forEach(function(n,i){for(var r,a,o=n.site,s=n.edges.sort(Bn),l=-1,u=s.length,c=s[u-1].edge,d=c.l===o?c.r:c.l;++l=u,h=i>=c,f=h<<1|d;t.leaf=!1,t=t.nodes[f]||(t.nodes[f]=hi()),d?r=u:s=u,h?o=c:l=c,a(t,e,n,i,r,o,s,l)}var c,d,h,f,p,g,m,v,y,x=At(s),_=At(l);if(null!=e)g=e,m=n,v=i,y=r;else if(v=y=-(g=m=1/0),d=[],h=[],p=t.length,o)for(f=0;fv&&(v=c.x),c.y>y&&(y=c.y),d.push(c.x),h.push(c.y);else for(f=0;fv&&(v=b),w>y&&(y=w),d.push(b),h.push(w)}var S=v-g,T=y-m;S>T?y=m+S:v=g+T;var C=hi();if(C.add=function(t){a(C,t,+x(t,++f),+_(t,f),g,m,v,y)},C.visit=function(t){fi(t,C,g,m,v,y)},C.find=function(t){return pi(C,t[0],t[1],g,m,v,y)},f=-1,null==e){for(;++f=0?t.slice(0,e):t,i=e>=0?t.slice(e+1):"in";return n=gl.get(n)||pl,i=ml.get(i)||y,bi(i(n.apply(null,lo.call(arguments,1))))},so.interpolateHcl=Ii,so.interpolateHsl=Ni,so.interpolateLab=Ri,so.interpolateRound=Fi,so.transform=function(t){var e=co.createElementNS(so.ns.prefix.svg,"g");return(so.transform=function(t){if(null!=t){e.setAttribute("transform",t);var n=e.transform.baseVal.consolidate()}return new Vi(n?n.matrix:vl)})(t)},Vi.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var vl={a:1,b:0,c:0,d:1,e:0,f:0};so.interpolateTransform=qi,so.layout={},so.layout.bundle=function(){return function(t){for(var e=[],n=-1,i=t.length;++n0?r=t:(n.c=null,n.t=NaN,n=null,u.end({type:"end",alpha:r=0})):t>0&&(u.start({type:"start",alpha:r=t}),n=Dt(l.tick)),l):r},l.start=function(){function t(t,i){if(!n){for(n=new Array(r),l=0;l=0;)o.push(c=u[l]),c.parent=a,c.depth=a.depth+1;i&&(a.value=0),a.children=u}else i&&(a.value=+i.call(t,a,a.depth)||0),delete a.children;return or(r,function(t){var n,r;e&&(n=t.children)&&n.sort(e),i&&(r=t.parent)&&(r.value+=t.value)}),s}var e=ur,n=sr,i=lr;return t.sort=function(n){return arguments.length?(e=n,t):e},t.children=function(e){return arguments.length?(n=e,t):n},t.value=function(e){return arguments.length?(i=e,t):i},t.revalue=function(e){return i&&(ar(e,function(t){t.children&&(t.value=0)}),or(e,function(e){var n;e.children||(e.value=+i.call(t,e,e.depth)||0),(n=e.parent)&&(n.value+=e.value)})),e},t},so.layout.partition=function(){function t(e,n,i,r){var a=e.children;if(e.x=n,e.y=e.depth*r,e.dx=i,e.dy=r,a&&(o=a.length)){var o,s,l,u=-1;for(i=e.value?i/e.value:0;++us&&(s=i),o.push(i)}for(n=0;n0)for(a=-1;++a=c[0]&&s<=c[1]&&(o=l[so.bisect(d,s,1,f)-1],o.y+=p,o.push(t[a]));return l}var e=!0,n=Number,i=br,r=xr;return t.value=function(e){return arguments.length?(n=e,t):n},t.range=function(e){return arguments.length?(i=At(e),t):i},t.bins=function(e){return arguments.length?(r="number"==typeof e?function(t){return _r(t,e)}:At(e),t):r},t.frequency=function(n){return arguments.length?(e=!!n,t):e},t},so.layout.pack=function(){function t(t,a){var o=n.call(this,t,a),s=o[0],l=r[0],u=r[1],c=null==e?Math.sqrt:"function"==typeof e?e:function(){return e};if(s.x=s.y=0,or(s,function(t){t.r=+c(t.value)}),or(s,Ar),i){var d=i*(e?1:Math.max(2*s.r/l,2*s.r/u))/2;or(s,function(t){t.r+=d}),or(s,Ar),or(s,function(t){t.r-=d})}return Mr(s,l/2,u/2,e?1:1/Math.max(2*s.r/l,2*s.r/u)),o}var e,n=so.layout.hierarchy().sort(wr),i=0,r=[1,1];return t.size=function(e){return arguments.length?(r=e,t):r},t.radius=function(n){return arguments.length?(e=null==n||"function"==typeof n?n:+n,t):e},t.padding=function(e){return arguments.length?(i=+e,t):i},rr(t,n)},so.layout.tree=function(){function t(t,r){var c=o.call(this,t,r),d=c[0],h=e(d);if(or(h,n),h.parent.m=-h.z,ar(h,i),u)ar(d,a);else{var f=d,p=d,g=d;ar(d,function(t){t.xp.x&&(p=t),t.depth>g.depth&&(g=t)});var m=s(f,p)/2-f.x,v=l[0]/(p.x+s(p,f)/2+m),y=l[1]/(g.depth||1); -ar(d,function(t){t.x=(t.x+m)*v,t.y=t.depth*y})}return c}function e(t){for(var e,n={A:null,children:[t]},i=[n];null!=(e=i.pop());)for(var r,a=e.children,o=0,s=a.length;o0&&(Ir(Rr(o,t,n),t,i),u+=i,c+=i),d+=o.m,u+=r.m,h+=l.m,c+=a.m;o&&!Lr(a)&&(a.t=o,a.m+=d-c),r&&!Or(l)&&(l.t=r,l.m+=u-h,n=t)}return n}function a(t){t.x*=l[0],t.y=t.depth*l[1]}var o=so.layout.hierarchy().sort(null).value(null),s=Dr,l=[1,1],u=null;return t.separation=function(e){return arguments.length?(s=e,t):s},t.size=function(e){return arguments.length?(u=null==(l=e)?a:null,t):u?null:l},t.nodeSize=function(e){return arguments.length?(u=null==(l=e)?null:a,t):u?l:null},rr(t,o)},so.layout.cluster=function(){function t(t,a){var o,s=e.call(this,t,a),l=s[0],u=0;or(l,function(t){var e=t.children;e&&e.length?(t.x=Vr(e),t.y=Fr(e)):(t.x=o?u+=n(t,o):0,t.y=0,o=t)});var c=jr(l),d=Gr(l),h=c.x-n(c,d)/2,f=d.x+n(d,c)/2;return or(l,r?function(t){t.x=(t.x-l.x)*i[0],t.y=(l.y-t.y)*i[1]}:function(t){t.x=(t.x-h)/(f-h)*i[0],t.y=(1-(l.y?t.y/l.y:1))*i[1]}),s}var e=so.layout.hierarchy().sort(null).value(null),n=Dr,i=[1,1],r=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(e){return arguments.length?(r=null==(i=e),t):r?null:i},t.nodeSize=function(e){return arguments.length?(r=null!=(i=e),t):r?i:null},rr(t,e)},so.layout.treemap=function(){function t(t,e){for(var n,i,r=-1,a=t.length;++r0;)c.push(o=h[l-1]),c.area+=o.area,"squarify"!==f||(s=i(c,g))<=p?(h.pop(),p=s):(c.area-=c.pop().area,r(c,g,u,!1),g=Math.min(u.dx,u.dy),c.length=c.area=0,p=1/0);c.length&&(r(c,g,u,!0),c.length=c.area=0),a.forEach(e)}}function n(e){var i=e.children;if(i&&i.length){var a,o=d(e),s=i.slice(),l=[];for(t(s,o.dx*o.dy/e.value),l.area=0;a=s.pop();)l.push(a),l.area+=a.area,null!=a.z&&(r(l,a.z?o.dx:o.dy,o,!s.length),l.length=l.area=0);i.forEach(n)}}function i(t,e){for(var n,i=t.area,r=0,a=1/0,o=-1,s=t.length;++or&&(r=n));return i*=i,e*=e,i?Math.max(e*r*p/i,i/(e*a*p)):1/0}function r(t,e,n,i){var r,a=-1,o=t.length,s=n.x,u=n.y,c=e?l(t.area/e):0;if(e==n.dx){for((i||c>n.dy)&&(c=n.dy);++an.dx)&&(c=n.dx);++a1);return t+e*n*Math.sqrt(-2*Math.log(r)/r)}},logNormal:function(){var t=so.random.normal.apply(so,arguments);return function(){return Math.exp(t())}},bates:function(t){var e=so.random.irwinHall(t);return function(){return e()/t}},irwinHall:function(t){return function(){for(var e=0,n=0;nd?0:1;if(u=Ho)return e(u,f)+(t?e(t,1-f):"")+"Z";var p,g,m,v,y,x,_,b,w,S,T,C,A=0,k=0,P=[];if((v=(+l.apply(this,arguments)||0)/2)&&(m=a===Ol?Math.sqrt(t*t+u*u):+a.apply(this,arguments),f||(k*=-1),u&&(k=et(m/u*Math.sin(v))),t&&(A=et(m/t*Math.sin(v)))),u){y=u*Math.cos(c+k),x=u*Math.sin(c+k),_=u*Math.cos(d-k),b=u*Math.sin(d-k);var M=Math.abs(d-c-2*k)<=jo?0:1;if(k&&va(y,x,_,b)===f^M){var E=(c+d)/2;y=u*Math.cos(E),x=u*Math.sin(E),_=b=null}}else y=x=0;if(t){w=t*Math.cos(d-A),S=t*Math.sin(d-A),T=t*Math.cos(c+A),C=t*Math.sin(c+A);var D=Math.abs(c-d+2*A)<=jo?0:1;if(A&&va(w,S,T,C)===1-f^D){var O=(c+d)/2;w=t*Math.cos(O),S=t*Math.sin(O),T=C=null}}else w=S=0;if(h>Fo&&(p=Math.min(Math.abs(u-t)/2,+r.apply(this,arguments)))>.001){g=tjo)+",1 "+e}function r(t,e,n,i){return"Q 0,0 "+i}var a=xn,o=_n,s=$a,l=pa,u=ga;return t.radius=function(e){return arguments.length?(s=At(e),t):s},t.source=function(e){return arguments.length?(a=At(e),t):a},t.target=function(e){return arguments.length?(o=At(e),t):o},t.startAngle=function(e){return arguments.length?(l=At(e),t):l},t.endAngle=function(e){return arguments.length?(u=At(e),t):u},t},so.svg.diagonal=function(){function t(t,r){var a=e.call(this,t,r),o=n.call(this,t,r),s=(a.y+o.y)/2,l=[a,{x:a.x,y:s},{x:o.x,y:s},o];return l=l.map(i),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var e=xn,n=_n,i=za;return t.source=function(n){return arguments.length?(e=At(n),t):e},t.target=function(e){return arguments.length?(n=At(e),t):n},t.projection=function(e){return arguments.length?(i=e,t):i},t},so.svg.diagonal.radial=function(){var t=so.svg.diagonal(),e=za,n=t.projection;return t.projection=function(t){return arguments.length?n(Ya(e=t)):e},t},so.svg.symbol=function(){function t(t,i){return(Fl.get(e.call(this,t,i))||qa)(n.call(this,t,i))}var e=Xa,n=Ba;return t.type=function(n){return arguments.length?(e=At(n),t):e},t.size=function(e){return arguments.length?(n=At(e),t):n},t};var Fl=so.map({circle:qa,cross:function(t){var e=Math.sqrt(t/5)/2;return"M"+-3*e+","+-e+"H"+-e+"V"+-3*e+"H"+e+"V"+-e+"H"+3*e+"V"+e+"H"+e+"V"+3*e+"H"+-e+"V"+e+"H"+-3*e+"Z"},diamond:function(t){var e=Math.sqrt(t/(2*jl)),n=e*jl;return"M0,"+-e+"L"+n+",0 0,"+e+" "+-n+",0Z"},square:function(t){var e=Math.sqrt(t)/2;return"M"+-e+","+-e+"L"+e+","+-e+" "+e+","+e+" "+-e+","+e+"Z"},"triangle-down":function(t){var e=Math.sqrt(t/Vl),n=e*Vl/2;return"M0,"+n+"L"+e+","+-n+" "+-e+","+-n+"Z"},"triangle-up":function(t){var e=Math.sqrt(t/Vl),n=e*Vl/2;return"M0,"+-n+"L"+e+","+n+" "+-e+","+n+"Z"}});so.svg.symbolTypes=Fl.keys();var Vl=Math.sqrt(3),jl=Math.tan(30*zo);Mo.transition=function(t){for(var e,n,i=Gl||++Yl,r=Za(t),a=[],o=Hl||{time:Date.now(),ease:Ai,delay:0,duration:250},s=-1,l=this.length;++srect,.s>rect").attr("width",d[1]-d[0])}function r(t){t.select(".extent").attr("y",h[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function a(){function a(){32==so.event.keyCode&&(M||(x=null,D[0]-=d[1],D[1]-=h[1],M=2),T())}function g(){32==so.event.keyCode&&2==M&&(D[0]+=d[1],D[1]+=h[1],M=0,T())}function m(){var t=so.mouse(b),e=!1;_&&(t[0]+=_[0],t[1]+=_[1]),M||(so.event.altKey?(x||(x=[(d[0]+d[1])/2,(h[0]+h[1])/2]),D[0]=d[+(t[0]0&&n(t[r],e[r],i)})}(s,this,this)}function r(e){var n=this;n.d3=t.d3?t.d3:"undefined"!=typeof require?require("d3"):void 0,n.api=e,n.config=n.getDefaultConfig(),n.data={},n.cache={},n.axes={}}function a(t){e.call(this,t)}function o(t,e){function n(t,e){t.attr("transform",function(t){return"translate("+Math.ceil(e(t)+_)+", 0)"})}function i(t,e){t.attr("transform",function(t){return"translate(0,"+Math.ceil(e(t))+")"})}function r(t){var e=t[0],n=t[t.length-1];return e0&&i[0]>0&&i.unshift(i[0]-(i[1]-i[0])),i}function o(){var t,n=g.copy();return e.isCategory&&(t=g.domain(),n.domain([t[0],t[1]-1])),n}function s(t){var e=h?h(t):t;return"undefined"!=typeof e?e:""}function l(t){if(A)return A;var e={h:11.5,w:5.5};return t.select("text").text(s).each(function(t){var n=this.getBoundingClientRect(),i=s(t),r=n.height,a=i?n.width/i.length:void 0;r&&a&&(e.h=r,e.w=a)}).text(""),A=e,e}function u(n){return e.withoutTransition?n:t.transition(n)}function c(h){h.each(function(){function h(t,n){function i(t,e){a=void 0;for(var s=1;s0?"start":"end":"middle"}function S(t){return t?"rotate("+t+")":""}function T(t){return t?8*Math.sin(Math.PI*(t/180)):0}function C(t){return t?11.5-2.5*(t/15)*(t>0?1:-1):U}var A,k,P,M=c.g=t.select(this),E=this.__chart__||g,D=this.__chart__=o(),O=x?x:a(D),L=M.selectAll(".tick").data(O,D),I=L.enter().insert("g",".domain").attr("class","tick").style("opacity",1e-6),N=L.exit().remove(),R=u(L).style("opacity",1),F=g.rangeExtent?g.rangeExtent():r(g.range()),V=M.selectAll(".domain").data([0]),j=(V.enter().append("path").attr("class","domain"),u(V));I.append("line"),I.append("text");var G=I.select("line"),H=R.select("line"),$=I.select("text"),z=R.select("text");e.isCategory?(_=Math.ceil((D(1)-D(0))/2),k=p?0:_,P=p?_:0):_=k=0;var Y,B,X=l(M.select(".tick")),q=[],U=Math.max(v,0)+y,W="left"===m||"right"===m;Y=L.select("text"),B=Y.selectAll("tspan").data(function(t,n){var i=e.tickMultiline?h(t,e.tickWidth):[].concat(s(t));return q[n]=i.length,i.map(function(t){return{index:n,splitted:t}})}),B.enter().append("tspan"),B.exit().remove(),B.text(function(t){return t.splitted});var Q=e.tickTextRotate;switch(m){case"bottom":A=n,G.attr("y2",v),$.attr("y",U),H.attr("x1",k).attr("x2",k).attr("y2",b),z.attr("x",0).attr("y",C(Q)).style("text-anchor",w(Q)).attr("transform",S(Q)),B.attr("x",0).attr("dy",f).attr("dx",T(Q)),j.attr("d","M"+F[0]+","+d+"V0H"+F[1]+"V"+d);break;case"top":A=n,G.attr("y2",-v),$.attr("y",-U),H.attr("x2",0).attr("y2",-v),z.attr("x",0).attr("y",-U),Y.style("text-anchor","middle"),B.attr("x",0).attr("dy","0em"),j.attr("d","M"+F[0]+","+-d+"V0H"+F[1]+"V"+-d);break;case"left":A=i,G.attr("x2",-v),$.attr("x",-U),H.attr("x2",-v).attr("y1",P).attr("y2",P),z.attr("x",-U).attr("y",_),Y.style("text-anchor","end"),B.attr("x",-U).attr("dy",f),j.attr("d","M"+-d+","+F[0]+"H0V"+F[1]+"H"+-d);break;case"right":A=i,G.attr("x2",v),$.attr("x",U),H.attr("x2",v).attr("y2",0),z.attr("x",U).attr("y",0),Y.style("text-anchor","start"),B.attr("x",U).attr("dy",f),j.attr("d","M"+d+","+F[0]+"H0V"+F[1]+"H"+d)}if(D.rangeBand){var K=D,Z=K.rangeBand()/2;E=D=function(t){return K(t)+Z}}else E.rangeBand?E=D:N.call(A,D);I.call(A,E),R.call(A,D)})}var d,h,f,p,g=t.scale.linear(),m="bottom",v=6,y=3,x=null,_=0,b=!0;return e=e||{},d=e.withOuterTick?6:0,c.scale=function(t){return arguments.length?(g=t,c):g},c.orient=function(t){return arguments.length?(m=t in{top:1,right:1,bottom:1,left:1}?t+"":"bottom",c):m},c.tickFormat=function(t){return arguments.length?(h=t,c):h},c.tickCentered=function(t){return arguments.length?(p=t,c):p},c.tickOffset=function(){return _},c.tickInterval=function(){var t,n;return e.isCategory?t=2*_:(n=c.g.select("path.domain").node().getTotalLength()-2*d,t=n/c.g.selectAll("line").size()),t===1/0?0:t},c.ticks=function(){return arguments.length?(f=arguments,c):f},c.tickCulling=function(t){return arguments.length?(b=t,c):b},c.tickValues=function(t){if("function"==typeof t)x=function(){return t(g.domain())};else{if(!arguments.length)return x;x=t}return c},c}var s,l,u,c={version:"0.4.11"};c.generate=function(t){return new i(t)},c.chart={fn:i.prototype,internal:{fn:r.prototype,axis:{fn:a.prototype}}},s=c.chart.fn,l=c.chart.internal.fn,u=c.chart.internal.axis.fn,l.beforeInit=function(){},l.afterInit=function(){},l.init=function(){var t=this,e=t.config;if(t.initParams(),e.data_url)t.convertUrlToData(e.data_url,e.data_mimeType,e.data_headers,e.data_keys,t.initWithData);else if(e.data_json)t.initWithData(t.convertJsonToData(e.data_json,e.data_keys));else if(e.data_rows)t.initWithData(t.convertRowsToData(e.data_rows));else{ -if(!e.data_columns)throw Error("url or json or rows or columns is required.");t.initWithData(t.convertColumnsToData(e.data_columns))}},l.initParams=function(){var t=this,e=t.d3,n=t.config;t.clipId="c3-"+ +new Date+"-clip",t.clipIdForXAxis=t.clipId+"-xaxis",t.clipIdForYAxis=t.clipId+"-yaxis",t.clipIdForGrid=t.clipId+"-grid",t.clipIdForSubchart=t.clipId+"-subchart",t.clipPath=t.getClipPath(t.clipId),t.clipPathForXAxis=t.getClipPath(t.clipIdForXAxis),t.clipPathForYAxis=t.getClipPath(t.clipIdForYAxis),t.clipPathForGrid=t.getClipPath(t.clipIdForGrid),t.clipPathForSubchart=t.getClipPath(t.clipIdForSubchart),t.dragStart=null,t.dragging=!1,t.flowing=!1,t.cancelClick=!1,t.mouseover=!1,t.transiting=!1,t.color=t.generateColor(),t.levelColor=t.generateLevelColor(),t.dataTimeFormat=n.data_xLocaltime?e.time.format:e.time.format.utc,t.axisTimeFormat=n.axis_x_localtime?e.time.format:e.time.format.utc,t.defaultAxisTimeFormat=t.axisTimeFormat.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%-m/%-d",function(t){return t.getDay()&&1!==t.getDate()}],["%-m/%-d",function(t){return 1!==t.getDate()}],["%-m/%-d",function(t){return t.getMonth()}],["%Y/%-m/%-d",function(){return!0}]]),t.hiddenTargetIds=[],t.hiddenLegendIds=[],t.focusedTargetIds=[],t.defocusedTargetIds=[],t.xOrient=n.axis_rotated?"left":"bottom",t.yOrient=n.axis_rotated?n.axis_y_inner?"top":"bottom":n.axis_y_inner?"right":"left",t.y2Orient=n.axis_rotated?n.axis_y2_inner?"bottom":"top":n.axis_y2_inner?"left":"right",t.subXOrient=n.axis_rotated?"left":"bottom",t.isLegendRight="right"===n.legend_position,t.isLegendInset="inset"===n.legend_position,t.isLegendTop="top-left"===n.legend_inset_anchor||"top-right"===n.legend_inset_anchor,t.isLegendLeft="top-left"===n.legend_inset_anchor||"bottom-left"===n.legend_inset_anchor,t.legendStep=0,t.legendItemWidth=0,t.legendItemHeight=0,t.currentMaxTickWidths={x:0,y:0,y2:0},t.rotated_padding_left=30,t.rotated_padding_right=n.axis_rotated&&!n.axis_x_show?0:30,t.rotated_padding_top=5,t.withoutFadeIn={},t.intervalForObserveInserted=void 0,t.axes.subx=e.selectAll([])},l.initChartElements=function(){this.initBar&&this.initBar(),this.initLine&&this.initLine(),this.initArc&&this.initArc(),this.initGauge&&this.initGauge(),this.initText&&this.initText()},l.initWithData=function(t){var e,n,i=this,r=i.d3,o=i.config,s=!0;i.axis=new a(i),i.initPie&&i.initPie(),i.initBrush&&i.initBrush(),i.initZoom&&i.initZoom(),o.bindto?"function"==typeof o.bindto.node?i.selectChart=o.bindto:i.selectChart=r.select(o.bindto):i.selectChart=r.selectAll([]),i.selectChart.empty()&&(i.selectChart=r.select(document.createElement("div")).style("opacity",0),i.observeInserted(i.selectChart),s=!1),i.selectChart.html("").classed("c3",!0),i.data.xs={},i.data.targets=i.convertDataToTargets(t),o.data_filter&&(i.data.targets=i.data.targets.filter(o.data_filter)),o.data_hide&&i.addHiddenTargetIds(o.data_hide===!0?i.mapToIds(i.data.targets):o.data_hide),o.legend_hide&&i.addHiddenLegendIds(o.legend_hide===!0?i.mapToIds(i.data.targets):o.legend_hide),i.hasType("gauge")&&(o.legend_show=!1),i.updateSizes(),i.updateScales(),i.x.domain(r.extent(i.getXDomain(i.data.targets))),i.y.domain(i.getYDomain(i.data.targets,"y")),i.y2.domain(i.getYDomain(i.data.targets,"y2")),i.subX.domain(i.x.domain()),i.subY.domain(i.y.domain()),i.subY2.domain(i.y2.domain()),i.orgXDomain=i.x.domain(),i.brush&&i.brush.scale(i.subX),o.zoom_enabled&&i.zoom.scale(i.x),i.svg=i.selectChart.append("svg").style("overflow","hidden").on("mouseenter",function(){return o.onmouseover.call(i)}).on("mouseleave",function(){return o.onmouseout.call(i)}),i.config.svg_classname&&i.svg.attr("class",i.config.svg_classname),e=i.svg.append("defs"),i.clipChart=i.appendClip(e,i.clipId),i.clipXAxis=i.appendClip(e,i.clipIdForXAxis),i.clipYAxis=i.appendClip(e,i.clipIdForYAxis),i.clipGrid=i.appendClip(e,i.clipIdForGrid),i.clipSubchart=i.appendClip(e,i.clipIdForSubchart),i.updateSvgSize(),n=i.main=i.svg.append("g").attr("transform",i.getTranslate("main")),i.initSubchart&&i.initSubchart(),i.initTooltip&&i.initTooltip(),i.initLegend&&i.initLegend(),i.initTitle&&i.initTitle(),n.append("text").attr("class",d.text+" "+d.empty).attr("text-anchor","middle").attr("dominant-baseline","middle"),i.initRegion(),i.initGrid(),n.append("g").attr("clip-path",i.clipPath).attr("class",d.chart),o.grid_lines_front&&i.initGridLines(),i.initEventRect(),i.initChartElements(),n.insert("rect",o.zoom_privileged?null:"g."+d.regions).attr("class",d.zoomRect).attr("width",i.width).attr("height",i.height).style("opacity",0).on("dblclick.zoom",null),o.axis_x_extent&&i.brush.extent(i.getDefaultExtent()),i.axis.init(),i.updateTargets(i.data.targets),s&&(i.updateDimension(),i.config.oninit.call(i),i.redraw({withTransition:!1,withTransform:!0,withUpdateXDomain:!0,withUpdateOrgXDomain:!0,withTransitionForAxis:!1})),i.bindResize(),i.api.element=i.selectChart.node()},l.smoothLines=function(t,e){var n=this;"grid"===e&&t.each(function(){var t=n.d3.select(this),e=t.attr("x1"),i=t.attr("x2"),r=t.attr("y1"),a=t.attr("y2");t.attr({x1:Math.ceil(e),x2:Math.ceil(i),y1:Math.ceil(r),y2:Math.ceil(a)})})},l.updateSizes=function(){var t=this,e=t.config,n=t.legend?t.getLegendHeight():0,i=t.legend?t.getLegendWidth():0,r=t.isLegendRight||t.isLegendInset?0:n,a=t.hasArcType(),o=e.axis_rotated||a?0:t.getHorizontalAxisHeight("x"),s=e.subchart_show&&!a?e.subchart_size_height+o:0;t.currentWidth=t.getCurrentWidth(),t.currentHeight=t.getCurrentHeight(),t.margin=e.axis_rotated?{top:t.getHorizontalAxisHeight("y2")+t.getCurrentPaddingTop(),right:a?0:t.getCurrentPaddingRight(),bottom:t.getHorizontalAxisHeight("y")+r+t.getCurrentPaddingBottom(),left:s+(a?0:t.getCurrentPaddingLeft())}:{top:4+t.getCurrentPaddingTop(),right:a?0:t.getCurrentPaddingRight(),bottom:o+s+r+t.getCurrentPaddingBottom(),left:a?0:t.getCurrentPaddingLeft()},t.margin2=e.axis_rotated?{top:t.margin.top,right:NaN,bottom:20+r,left:t.rotated_padding_left}:{top:t.currentHeight-s-r,right:NaN,bottom:o+r,left:t.margin.left},t.margin3={top:0,right:NaN,bottom:0,left:0},t.updateSizeForLegend&&t.updateSizeForLegend(n,i),t.width=t.currentWidth-t.margin.left-t.margin.right,t.height=t.currentHeight-t.margin.top-t.margin.bottom,t.width<0&&(t.width=0),t.height<0&&(t.height=0),t.width2=e.axis_rotated?t.margin.left-t.rotated_padding_left-t.rotated_padding_right:t.width,t.height2=e.axis_rotated?t.height:t.currentHeight-t.margin2.top-t.margin2.bottom,t.width2<0&&(t.width2=0),t.height2<0&&(t.height2=0),t.arcWidth=t.width-(t.isLegendRight?i+10:0),t.arcHeight=t.height-(t.isLegendRight?0:10),t.hasType("gauge")&&!e.gauge_fullCircle&&(t.arcHeight+=t.height-t.getGaugeLabelHeight()),t.updateRadius&&t.updateRadius(),t.isLegendRight&&a&&(t.margin3.left=t.arcWidth/2+1.1*t.radiusExpanded)},l.updateTargets=function(t){var e=this;e.updateTargetsForText(t),e.updateTargetsForBar(t),e.updateTargetsForLine(t),e.hasArcType()&&e.updateTargetsForArc&&e.updateTargetsForArc(t),e.updateTargetsForSubchart&&e.updateTargetsForSubchart(t),e.showTargets()},l.showTargets=function(){var t=this;t.svg.selectAll("."+d.target).filter(function(e){return t.isTargetToShow(e.id)}).transition().duration(t.config.transition_duration).style("opacity",1)},l.redraw=function(t,e){var n,i,r,a,o,s,l,u,c,h,f,p,g,m,v,y,x,_,b,S,T,C,A,k,P,M,E,D,O,L=this,I=L.main,N=L.d3,R=L.config,F=L.getShapeIndices(L.isAreaType),V=L.getShapeIndices(L.isBarType),j=L.getShapeIndices(L.isLineType),G=L.hasArcType(),H=L.filterTargetsToShow(L.data.targets),$=L.xv.bind(L);if(t=t||{},n=w(t,"withY",!0),i=w(t,"withSubchart",!0),r=w(t,"withTransition",!0),s=w(t,"withTransform",!1),l=w(t,"withUpdateXDomain",!1),u=w(t,"withUpdateOrgXDomain",!1),c=w(t,"withTrimXDomain",!0),g=w(t,"withUpdateXAxis",l),h=w(t,"withLegend",!1),f=w(t,"withEventRect",!0),p=w(t,"withDimension",!0),a=w(t,"withTransitionForExit",r),o=w(t,"withTransitionForAxis",r),b=r?R.transition_duration:0,S=a?b:0,T=o?b:0,e=e||L.axis.generateTransitions(T),h&&R.legend_show?L.updateLegend(L.mapToIds(L.data.targets),t,e):p&&L.updateDimension(!0),L.isCategorized()&&0===H.length&&L.x.domain([0,L.axes.x.selectAll(".tick").size()]),H.length?(L.updateXDomain(H,l,u,c),R.axis_x_tick_values||(k=L.axis.updateXAxisTickValues(H))):(L.xAxis.tickValues([]),L.subXAxis.tickValues([])),R.zoom_rescale&&!t.flow&&(E=L.x.orgDomain()),L.y.domain(L.getYDomain(H,"y",E)),L.y2.domain(L.getYDomain(H,"y2",E)),!R.axis_y_tick_values&&R.axis_y_tick_count&&L.yAxis.tickValues(L.axis.generateTickValues(L.y.domain(),R.axis_y_tick_count)),!R.axis_y2_tick_values&&R.axis_y2_tick_count&&L.y2Axis.tickValues(L.axis.generateTickValues(L.y2.domain(),R.axis_y2_tick_count)),L.axis.redraw(e,G),L.axis.updateLabels(r),(l||g)&&H.length)if(R.axis_x_tick_culling&&k){for(P=1;P=0&&N.select(this).style("display",e%M?"none":"block")})}else L.svg.selectAll("."+d.axisX+" .tick text").style("display","block");m=L.generateDrawArea?L.generateDrawArea(F,!1):void 0,v=L.generateDrawBar?L.generateDrawBar(V):void 0,y=L.generateDrawLine?L.generateDrawLine(j,!1):void 0,x=L.generateXYForText(F,V,j,!0),_=L.generateXYForText(F,V,j,!1),n&&(L.subY.domain(L.getYDomain(H,"y")),L.subY2.domain(L.getYDomain(H,"y2"))),L.updateXgridFocus(),I.select("text."+d.text+"."+d.empty).attr("x",L.width/2).attr("y",L.height/2).text(R.data_empty_label_text).transition().style("opacity",H.length?0:1),L.updateGrid(b),L.updateRegion(b),L.updateBar(S),L.updateLine(S),L.updateArea(S),L.updateCircle(),L.hasDataLabel()&&L.updateText(S),L.redrawTitle&&L.redrawTitle(),L.redrawArc&&L.redrawArc(b,S,s),L.redrawSubchart&&L.redrawSubchart(i,e,b,S,F,V,j),I.selectAll("."+d.selectedCircles).filter(L.isBarType.bind(L)).selectAll("circle").remove(),R.interaction_enabled&&!t.flow&&f&&(L.redrawEventRect(),L.updateZoom&&L.updateZoom()),L.updateCircleY(),D=(L.config.axis_rotated?L.circleY:L.circleX).bind(L),O=(L.config.axis_rotated?L.circleX:L.circleY).bind(L),t.flow&&(A=L.generateFlow({targets:H,flow:t.flow,duration:t.flow.duration,drawBar:v,drawLine:y,drawArea:m,cx:D,cy:O,xv:$,xForText:x,yForText:_})),(b||A)&&L.isTabVisible()?N.transition().duration(b).each(function(){var e=[];[L.redrawBar(v,!0),L.redrawLine(y,!0),L.redrawArea(m,!0),L.redrawCircle(D,O,!0),L.redrawText(x,_,t.flow,!0),L.redrawRegion(!0),L.redrawGrid(!0)].forEach(function(t){t.forEach(function(t){e.push(t)})}),C=L.generateWait(),e.forEach(function(t){C.add(t)})}).call(C,function(){A&&A(),R.onrendered&&R.onrendered.call(L)}):(L.redrawBar(v),L.redrawLine(y),L.redrawArea(m),L.redrawCircle(D,O),L.redrawText(x,_,t.flow),L.redrawRegion(),L.redrawGrid(),R.onrendered&&R.onrendered.call(L)),L.mapToIds(L.data.targets).forEach(function(t){L.withoutFadeIn[t]=!0})},l.updateAndRedraw=function(t){var e,n=this,i=n.config;t=t||{},t.withTransition=w(t,"withTransition",!0),t.withTransform=w(t,"withTransform",!1),t.withLegend=w(t,"withLegend",!1),t.withUpdateXDomain=!0,t.withUpdateOrgXDomain=!0,t.withTransitionForExit=!1,t.withTransitionForTransform=w(t,"withTransitionForTransform",t.withTransition),n.updateSizes(),t.withLegend&&i.legend_show||(e=n.axis.generateTransitions(t.withTransitionForAxis?i.transition_duration:0),n.updateScales(),n.updateSvgSize(),n.transformAll(t.withTransitionForTransform,e)),n.redraw(t,e)},l.redrawWithoutRescale=function(){this.redraw({withY:!1,withSubchart:!1,withEventRect:!1,withTransitionForAxis:!1})},l.isTimeSeries=function(){return"timeseries"===this.config.axis_x_type},l.isCategorized=function(){return this.config.axis_x_type.indexOf("categor")>=0},l.isCustomX=function(){var t=this,e=t.config;return!t.isTimeSeries()&&(e.data_x||b(e.data_xs))},l.isTimeSeriesY=function(){return"timeseries"===this.config.axis_y_type},l.getTranslate=function(t){var e,n,i=this,r=i.config;return"main"===t?(e=y(i.margin.left),n=y(i.margin.top)):"context"===t?(e=y(i.margin2.left),n=y(i.margin2.top)):"legend"===t?(e=i.margin3.left,n=i.margin3.top):"x"===t?(e=0,n=r.axis_rotated?0:i.height):"y"===t?(e=0,n=r.axis_rotated?i.height:0):"y2"===t?(e=r.axis_rotated?0:i.width,n=r.axis_rotated?1:0):"subx"===t?(e=0,n=r.axis_rotated?0:i.height2):"arc"===t&&(e=i.arcWidth/2,n=i.arcHeight/2),"translate("+e+","+n+")"},l.initialOpacity=function(t){return null!==t.value&&this.withoutFadeIn[t.id]?1:0},l.initialOpacityForCircle=function(t){return null!==t.value&&this.withoutFadeIn[t.id]?this.opacityForCircle(t):0},l.opacityForCircle=function(t){var e=this.config.point_show?1:0;return h(t.value)?this.isScatterType(t)?.5:e:0},l.opacityForText=function(){return this.hasDataLabel()?1:0},l.xx=function(t){return t?this.x(t.x):null},l.xv=function(t){var e=this,n=t.value;return e.isTimeSeries()?n=e.parseDate(t.value):e.isCategorized()&&"string"==typeof t.value&&(n=e.config.axis_x_categories.indexOf(t.value)),Math.ceil(e.x(n))},l.yv=function(t){var e=this,n=t.axis&&"y2"===t.axis?e.y2:e.y;return Math.ceil(n(t.value))},l.subxx=function(t){return t?this.subX(t.x):null},l.transformMain=function(t,e){var n,i,r,a=this;e&&e.axisX?n=e.axisX:(n=a.main.select("."+d.axisX),t&&(n=n.transition())),e&&e.axisY?i=e.axisY:(i=a.main.select("."+d.axisY),t&&(i=i.transition())),e&&e.axisY2?r=e.axisY2:(r=a.main.select("."+d.axisY2),t&&(r=r.transition())),(t?a.main.transition():a.main).attr("transform",a.getTranslate("main")),n.attr("transform",a.getTranslate("x")),i.attr("transform",a.getTranslate("y")),r.attr("transform",a.getTranslate("y2")),a.main.select("."+d.chartArcs).attr("transform",a.getTranslate("arc"))},l.transformAll=function(t,e){var n=this;n.transformMain(t,e),n.config.subchart_show&&n.transformContext(t,e),n.legend&&n.transformLegend(t)},l.updateSvgSize=function(){var t=this,e=t.svg.select(".c3-brush .background");t.svg.attr("width",t.currentWidth).attr("height",t.currentHeight),t.svg.selectAll(["#"+t.clipId,"#"+t.clipIdForGrid]).select("rect").attr("width",t.width).attr("height",t.height),t.svg.select("#"+t.clipIdForXAxis).select("rect").attr("x",t.getXAxisClipX.bind(t)).attr("y",t.getXAxisClipY.bind(t)).attr("width",t.getXAxisClipWidth.bind(t)).attr("height",t.getXAxisClipHeight.bind(t)),t.svg.select("#"+t.clipIdForYAxis).select("rect").attr("x",t.getYAxisClipX.bind(t)).attr("y",t.getYAxisClipY.bind(t)).attr("width",t.getYAxisClipWidth.bind(t)).attr("height",t.getYAxisClipHeight.bind(t)),t.svg.select("#"+t.clipIdForSubchart).select("rect").attr("width",t.width).attr("height",e.size()?e.attr("height"):0),t.svg.select("."+d.zoomRect).attr("width",t.width).attr("height",t.height),t.selectChart.style("max-height",t.currentHeight+"px")},l.updateDimension=function(t){var e=this;t||(e.config.axis_rotated?(e.axes.x.call(e.xAxis),e.axes.subx.call(e.subXAxis)):(e.axes.y.call(e.yAxis),e.axes.y2.call(e.y2Axis))),e.updateSizes(),e.updateScales(),e.updateSvgSize(),e.transformAll(!1)},l.observeInserted=function(e){var n,i=this;return"undefined"==typeof MutationObserver?void t.console.error("MutationObserver not defined."):(n=new MutationObserver(function(r){r.forEach(function(r){"childList"===r.type&&r.previousSibling&&(n.disconnect(),i.intervalForObserveInserted=t.setInterval(function(){e.node().parentNode&&(t.clearInterval(i.intervalForObserveInserted),i.updateDimension(),i.brush&&i.brush.update(),i.config.oninit.call(i),i.redraw({withTransform:!0,withUpdateXDomain:!0,withUpdateOrgXDomain:!0,withTransition:!1,withTransitionForTransform:!1,withLegend:!0}),e.transition().style("opacity",1))},10))})}),void n.observe(e.node(),{attributes:!0,childList:!0,characterData:!0}))},l.bindResize=function(){var e=this,n=e.config;if(e.resizeFunction=e.generateResize(),e.resizeFunction.add(function(){n.onresize.call(e)}),n.resize_auto&&e.resizeFunction.add(function(){void 0!==e.resizeTimeout&&t.clearTimeout(e.resizeTimeout),e.resizeTimeout=t.setTimeout(function(){delete e.resizeTimeout,e.api.flush()},100)}),e.resizeFunction.add(function(){n.onresized.call(e)}),t.attachEvent)t.attachEvent("onresize",e.resizeFunction);else if(t.addEventListener)t.addEventListener("resize",e.resizeFunction,!1);else{var i=t.onresize;i?i.add&&i.remove||(i=e.generateResize(),i.add(t.onresize)):i=e.generateResize(),i.add(e.resizeFunction),t.onresize=i}},l.generateResize=function(){function t(){e.forEach(function(t){t()})}var e=[];return t.add=function(t){e.push(t)},t.remove=function(t){for(var n=0;n0)for(o=s.hasNegativeValueInTargets(t),e=0;e=0}),0!==r.length)for(i=r[0],o&&c[i]&&c[i].forEach(function(t,e){c[i][e]=t<0?t:0}),n=1;n0||(c[i][e]+=+t)});return s.d3.min(Object.keys(c).map(function(t){return s.d3.min(c[t])}))},l.getYDomainMax=function(t){var e,n,i,r,a,o,s=this,l=s.config,u=s.mapToIds(t),c=s.getValuesAsIdKeyed(t);if(l.data_groups.length>0)for(o=s.hasPositiveValueInTargets(t),e=0;e=0}),0!==r.length)for(i=r[0],o&&c[i]&&c[i].forEach(function(t,e){c[i][e]=t>0?t:0}),n=1;n=0&&T>=0,p=S<=0&&T<=0,(h(_)&&f||h(w)&&p)&&(A=!1),A&&(f&&(S=0),p&&(T=0)),r=Math.abs(T-S),a=o=s=.1*r,"undefined"!=typeof C&&(l=Math.max(Math.abs(S),Math.abs(T)),T=C+l,S=C-l),P?(u=g.getDataLabelLength(S,T,"width"),c=x(g.y.range()),d=[u[0]/c,u[1]/c],o+=r*(d[1]/(1-d[0]-d[1])),s+=r*(d[0]/(1-d[0]-d[1]))):M&&(u=g.getDataLabelLength(S,T,"height"),o+=g.axis.convertPixelsToAxisPadding(u[1],r),s+=g.axis.convertPixelsToAxisPadding(u[0],r)),"y"===e&&b(m.axis_y_padding)&&(o=g.axis.getPadding(m.axis_y_padding,"top",o,r),s=g.axis.getPadding(m.axis_y_padding,"bottom",s,r)),"y2"===e&&b(m.axis_y2_padding)&&(o=g.axis.getPadding(m.axis_y2_padding,"top",o,r),s=g.axis.getPadding(m.axis_y2_padding,"bottom",s,r)),A&&(f&&(s=S),p&&(o=-T)),i=[S-s,T+o],k?i.reverse():i)},l.getXDomainMin=function(t){var e=this,n=e.config;return m(n.axis_x_min)?e.isTimeSeries()?this.parseDate(n.axis_x_min):n.axis_x_min:e.d3.min(t,function(t){return e.d3.min(t.values,function(t){return t.x})})},l.getXDomainMax=function(t){var e=this,n=e.config;return m(n.axis_x_max)?e.isTimeSeries()?this.parseDate(n.axis_x_max):n.axis_x_max:e.d3.max(t,function(t){return e.d3.max(t.values,function(t){return t.x})})},l.getXDomainPadding=function(t){var e,n,i,r,a=this,o=a.config,s=t[1]-t[0];return a.isCategorized()?n=0:a.hasType("bar")?(e=a.getMaxDataCount(),n=e>1?s/(e-1)/2:.5):n=.01*s,"object"==typeof o.axis_x_padding&&b(o.axis_x_padding)?(i=h(o.axis_x_padding.left)?o.axis_x_padding.left:n,r=h(o.axis_x_padding.right)?o.axis_x_padding.right:n):i=r="number"==typeof o.axis_x_padding?o.axis_x_padding:n,{left:i,right:r}},l.getXDomain=function(t){var e=this,n=[e.getXDomainMin(t),e.getXDomainMax(t)],i=n[0],r=n[1],a=e.getXDomainPadding(n),o=0,s=0;return i-r!==0||e.isCategorized()||(e.isTimeSeries()?(i=new Date(.5*i.getTime()),r=new Date(1.5*r.getTime())):(i=0===i?1:.5*i,r=0===r?-1:1.5*r)),(i||0===i)&&(o=e.isTimeSeries()?new Date(i.getTime()-a.left):i-a.left),(r||0===r)&&(s=e.isTimeSeries()?new Date(r.getTime()+a.right):r+a.right),[o,s]},l.updateXDomain=function(t,e,n,i,r){var a=this,o=a.config;return n&&(a.x.domain(r?r:a.d3.extent(a.getXDomain(t))),a.orgXDomain=a.x.domain(),o.zoom_enabled&&a.zoom.scale(a.x).updateScaleExtent(),a.subX.domain(a.x.domain()),a.brush&&a.brush.scale(a.subX)),e&&(a.x.domain(r?r:!a.brush||a.brush.empty()?a.orgXDomain:a.brush.extent()),o.zoom_enabled&&a.zoom.scale(a.x).updateScaleExtent()),i&&a.x.domain(a.trimXDomain(a.x.orgDomain())),a.x.domain()},l.trimXDomain=function(t){var e=this.getZoomDomain(),n=e[0],i=e[1];return t[0]<=n&&(t[1]=+t[1]+(n-t[0]),t[0]=n),i<=t[1]&&(t[0]=+t[0]-(t[1]-i),t[1]=i),t},l.isX=function(t){var e=this,n=e.config;return n.data_x&&t===n.data_x||b(n.data_xs)&&S(n.data_xs,t)},l.isNotX=function(t){return!this.isX(t)},l.getXKey=function(t){var e=this,n=e.config;return n.data_x?n.data_x:b(n.data_xs)?n.data_xs[t]:null},l.getXValuesOfXKey=function(t,e){var n,i=this,r=e&&b(e)?i.mapToIds(e):[];return r.forEach(function(e){i.getXKey(e)===t&&(n=i.data.xs[e])}),n},l.getIndexByX=function(t){var e=this,n=e.filterByX(e.data.targets,t);return n.length?n[0].index:null},l.getXValue=function(t,e){var n=this;return t in n.data.xs&&n.data.xs[t]&&h(n.data.xs[t][e])?n.data.xs[t][e]:e},l.getOtherTargetXs=function(){var t=this,e=Object.keys(t.data.xs);return e.length?t.data.xs[e[0]]:null},l.getOtherTargetX=function(t){var e=this.getOtherTargetXs();return e&&t1},l.isMultipleX=function(){return b(this.config.data_xs)||!this.config.data_xSort||this.hasType("scatter")},l.addName=function(t){var e,n=this;return t&&(e=n.config.data_names[t.id],t.name=void 0!==e?e:t.id),t},l.getValueOnIndex=function(t,e){var n=t.filter(function(t){return t.index===e});return n.length?n[0]:null},l.updateTargetX=function(t,e){var n=this;t.forEach(function(t){t.values.forEach(function(i,r){i.x=n.generateTargetX(e[r],t.id,r)}),n.data.xs[t.id]=e})},l.updateTargetXs=function(t,e){var n=this;t.forEach(function(t){e[t.id]&&n.updateTargetX([t],e[t.id])})},l.generateTargetX=function(t,e,n){var i,r=this;return i=r.isTimeSeries()?t?r.parseDate(t):r.parseDate(r.getXValue(e,n)):r.isCustomX()&&!r.isCategorized()?h(t)?+t:r.getXValue(e,n):n},l.cloneTarget=function(t){return{id:t.id,id_org:t.id_org,values:t.values.map(function(t){return{x:t.x,value:t.value,id:t.id}})}},l.updateXs=function(){var t=this;t.data.targets.length&&(t.xs=[],t.data.targets[0].values.forEach(function(e){t.xs[e.index]=e.x}))},l.getPrevX=function(t){var e=this.xs[t-1];return"undefined"!=typeof e?e:null},l.getNextX=function(t){var e=this.xs[t+1];return"undefined"!=typeof e?e:null},l.getMaxDataCount=function(){var t=this;return t.d3.max(t.data.targets,function(t){return t.values.length})},l.getMaxDataCountTarget=function(t){var e,n=t.length,i=0;return n>1?t.forEach(function(t){t.values.length>i&&(e=t,i=t.values.length)}):e=n?t[0]:null,e},l.getEdgeX=function(t){var e=this;return t.length?[e.d3.min(t,function(t){return t.values[0].x}),e.d3.max(t,function(t){return t.values[t.values.length-1].x})]:[0,0]},l.mapToIds=function(t){return t.map(function(t){return t.id})},l.mapToTargetIds=function(t){var e=this;return t?[].concat(t):e.mapToIds(e.data.targets)},l.hasTarget=function(t,e){var n,i=this.mapToIds(t);for(n=0;ne?1:t>=e?0:NaN})},l.addHiddenTargetIds=function(t){this.hiddenTargetIds=this.hiddenTargetIds.concat(t)},l.removeHiddenTargetIds=function(t){this.hiddenTargetIds=this.hiddenTargetIds.filter(function(e){return t.indexOf(e)<0})},l.addHiddenLegendIds=function(t){this.hiddenLegendIds=this.hiddenLegendIds.concat(t)},l.removeHiddenLegendIds=function(t){this.hiddenLegendIds=this.hiddenLegendIds.filter(function(e){return t.indexOf(e)<0})},l.getValuesAsIdKeyed=function(t){var e={};return t.forEach(function(t){e[t.id]=[],t.values.forEach(function(n){e[t.id].push(n.value)})}),e},l.checkValueInTargets=function(t,e){var n,i,r,a=Object.keys(t);for(n=0;n0})},l.isOrderDesc=function(){var t=this.config;return"string"==typeof t.data_order&&"desc"===t.data_order.toLowerCase()},l.isOrderAsc=function(){var t=this.config;return"string"==typeof t.data_order&&"asc"===t.data_order.toLowerCase()},l.orderTargets=function(t){var e=this,n=e.config,i=e.isOrderAsc(),r=e.isOrderDesc();return i||r?t.sort(function(t,e){var n=function(t,e){return t+Math.abs(e.value)},r=t.values.reduce(n,0),a=e.values.reduce(n,0);return i?a-r:r-a}):f(n.data_order)&&t.sort(n.data_order),t},l.filterByX=function(t,e){return this.d3.merge(t.map(function(t){return t.values})).filter(function(t){return t.x-e===0})},l.filterRemoveNull=function(t){return t.filter(function(t){return h(t.value)})},l.filterByXDomain=function(t,e){return t.map(function(t){return{id:t.id,id_org:t.id_org,values:t.values.filter(function(t){return e[0]<=t.x&&t.x<=e[1]})}})},l.hasDataLabel=function(){var t=this.config;return!("boolean"!=typeof t.data_labels||!t.data_labels)||!("object"!=typeof t.data_labels||!b(t.data_labels))},l.getDataLabelLength=function(t,e,n){var i=this,r=[0,0],a=1.3;return i.selectChart.select("svg").selectAll(".dummy").data([t,e]).enter().append("text").text(function(t){return i.dataLabelFormat(t.id)(t)}).each(function(t,e){r[e]=this.getBoundingClientRect()[n]*a}).remove(),r},l.isNoneArc=function(t){return this.hasTarget(this.data.targets,t.id)},l.isArc=function(t){return"data"in t&&this.hasTarget(this.data.targets,t.data.id)},l.findSameXOfValues=function(t,e){var n,i=t[e].x,r=[];for(n=e-1;n>=0&&i===t[n].x;n--)r.push(t[n]);for(n=e;n=0?i.data.xs[n]=(e&&i.data.xs[n]?i.data.xs[n]:[]).concat(t.map(function(t){return t[a]}).filter(h).map(function(t,e){return i.generateTargetX(t,n,e)})):r.data_x?i.data.xs[n]=i.getOtherTargetXs():b(r.data_xs)&&(i.data.xs[n]=i.getXValuesOfXKey(a,i.data.targets)):i.data.xs[n]=t.map(function(t,e){return e})}),a.forEach(function(t){if(!i.data.xs[t])throw new Error('x is not defined for id = "'+t+'".')}),n=a.map(function(e,n){var a=r.data_idConverter(e);return{id:a,id_org:e,values:t.map(function(t,o){var s,l=i.getXKey(e),u=t[l],c=null===t[e]||isNaN(t[e])?null:+t[e];return i.isCustomX()&&i.isCategorized()&&0===n&&!g(u)?(0===n&&0===o&&(r.axis_x_categories=[]),s=r.axis_x_categories.indexOf(u),s===-1&&(s=r.axis_x_categories.length,r.axis_x_categories.push(u))):s=i.generateTargetX(u,e,o),(g(t[e])||i.data.xs[e].length<=o)&&(s=void 0),{x:s,value:c,id:a}}).filter(function(t){return m(t.x)})}}),n.forEach(function(t){var e;r.data_xSort&&(t.values=t.values.sort(function(t,e){var n=t.x||0===t.x?t.x:1/0,i=e.x||0===e.x?e.x:1/0;return n-i})),e=0,t.values.forEach(function(t){t.index=e++}),i.data.xs[t.id].sort(function(t,e){return t-e})}),i.hasNegativeValue=i.hasNegativeValueInTargets(n),i.hasPositiveValue=i.hasPositiveValueInTargets(n),r.data_type&&i.setTargetType(i.mapToIds(n).filter(function(t){return!(t in r.data_types)}),r.data_type),n.forEach(function(t){i.addCache(t.id_org,t)}),n},l.load=function(t,e){var n=this;t&&(e.filter&&(t=t.filter(e.filter)),(e.type||e.types)&&t.forEach(function(t){var i=e.types&&e.types[t.id]?e.types[t.id]:e.type;n.setTargetType(t.id,i)}),n.data.targets.forEach(function(e){for(var n=0;n0?n:320/(t.hasType("gauge")&&!e.gauge_fullCircle?2:1)},l.getCurrentPaddingTop=function(){var t=this,e=t.config,n=h(e.padding_top)?e.padding_top:0;return t.title&&t.title.node()&&(n+=t.getTitlePadding()),n},l.getCurrentPaddingBottom=function(){var t=this.config;return h(t.padding_bottom)?t.padding_bottom:0},l.getCurrentPaddingLeft=function(t){var e=this,n=e.config;return h(n.padding_left)?n.padding_left:n.axis_rotated?n.axis_x_show?Math.max(v(e.getAxisWidthByAxisId("x",t)),40):1:!n.axis_y_show||n.axis_y_inner?e.axis.getYAxisLabelPosition().isOuter?30:1:v(e.getAxisWidthByAxisId("y",t))},l.getCurrentPaddingRight=function(){var t=this,e=t.config,n=10,i=t.isLegendRight?t.getLegendWidth()+20:0;return h(e.padding_right)?e.padding_right+1:e.axis_rotated?n+i:!e.axis_y2_show||e.axis_y2_inner?2+i+(t.axis.getY2AxisLabelPosition().isOuter?20:0):v(t.getAxisWidthByAxisId("y2"))+i},l.getParentRectValue=function(t){for(var e,n=this.selectChart.node();n&&"BODY"!==n.tagName;){try{e=n.getBoundingClientRect()[t]}catch(i){"width"===t&&(e=n.offsetWidth)}if(e)break;n=n.parentNode}return e},l.getParentWidth=function(){return this.getParentRectValue("width")},l.getParentHeight=function(){var t=this.selectChart.style("height");return t.indexOf("px")>0?+t.replace("px",""):0},l.getSvgLeft=function(t){var e=this,n=e.config,i=n.axis_rotated||!n.axis_rotated&&!n.axis_y_inner,r=n.axis_rotated?d.axisX:d.axisY,a=e.main.select("."+r).node(),o=a&&i?a.getBoundingClientRect():{right:0},s=e.selectChart.node().getBoundingClientRect(),l=e.hasArcType(),u=o.right-s.left-(l?0:e.getCurrentPaddingLeft(t));return u>0?u:0},l.getAxisWidthByAxisId=function(t,e){var n=this,i=n.axis.getLabelPositionById(t);return n.axis.getMaxTickWidth(t,e)+(i.isInner?20:40)},l.getHorizontalAxisHeight=function(t){var e=this,n=e.config,i=30;return"x"!==t||n.axis_x_show?"x"===t&&n.axis_x_height?n.axis_x_height:"y"!==t||n.axis_y_show?"y2"!==t||n.axis_y2_show?("x"===t&&!n.axis_rotated&&n.axis_x_tick_rotate&&(i=30+e.axis.getMaxTickWidth(t)*Math.cos(Math.PI*(90-n.axis_x_tick_rotate)/180)),"y"===t&&n.axis_rotated&&n.axis_y_tick_rotate&&(i=30+e.axis.getMaxTickWidth(t)*Math.cos(Math.PI*(90-n.axis_y_tick_rotate)/180)),i+(e.axis.getLabelPositionById(t).isInner?0:10)+("y2"===t?-10:0)):e.rotated_padding_top:!n.legend_show||e.isLegendRight||e.isLegendInset?1:10:8},l.getEventRectWidth=function(){return Math.max(0,this.xAxis.tickInterval())},l.getShapeIndices=function(t){var e,n,i=this,r=i.config,a={},o=0;return i.filterTargetsToShow(i.data.targets.filter(t,i)).forEach(function(t){for(e=0;e=0&&(u+=s(r[o].value)-l))}),u}},l.isWithinShape=function(t,e){var n,i=this,r=i.d3.select(t);return i.isTargetToShow(e.id)?"circle"===t.nodeName?n=i.isStepType(e)?i.isWithinStep(t,i.getYScale(e.id)(e.value)):i.isWithinCircle(t,1.5*i.pointSelectR(e)):"path"===t.nodeName&&(n=!r.classed(d.bar)||i.isWithinBar(t)):n=!1,n},l.getInterpolate=function(t){var e=this,n=e.isInterpolationType(e.config.spline_interpolation_type)?e.config.spline_interpolation_type:"cardinal";return e.isSplineType(t)?n:e.isStepType(t)?e.config.line_step_type:"linear"},l.initLine=function(){var t=this;t.main.select("."+d.chart).append("g").attr("class",d.chartLines)},l.updateTargetsForLine=function(t){var e,n,i=this,r=i.config,a=i.classChartLine.bind(i),o=i.classLines.bind(i),s=i.classAreas.bind(i),l=i.classCircles.bind(i),u=i.classFocus.bind(i);e=i.main.select("."+d.chartLines).selectAll("."+d.chartLine).data(t).attr("class",function(t){return a(t)+u(t)}),n=e.enter().append("g").attr("class",a).style("opacity",0).style("pointer-events","none"),n.append("g").attr("class",o),n.append("g").attr("class",s),n.append("g").attr("class",function(t){return i.generateClass(d.selectedCircles,t.id)}),n.append("g").attr("class",l).style("cursor",function(t){return r.data_selection_isselectable(t)?"pointer":null}),t.forEach(function(t){i.main.selectAll("."+d.selectedCircles+i.getTargetSelectorSuffix(t.id)).selectAll("."+d.selectedCircle).each(function(e){e.value=t.values[e.index].value})})},l.updateLine=function(t){var e=this;e.mainLine=e.main.selectAll("."+d.lines).selectAll("."+d.line).data(e.lineData.bind(e)),e.mainLine.enter().append("path").attr("class",e.classLine.bind(e)).style("stroke",e.color),e.mainLine.style("opacity",e.initialOpacity.bind(e)).style("shape-rendering",function(t){return e.isStepType(t)?"crispEdges":""}).attr("transform",null),e.mainLine.exit().transition().duration(t).style("opacity",0).remove()},l.redrawLine=function(t,e){return[(e?this.mainLine.transition(Math.random().toString()):this.mainLine).attr("d",t).style("stroke",this.color).style("opacity",1)]},l.generateDrawLine=function(t,e){var n=this,i=n.config,r=n.d3.svg.line(),a=n.generateGetLinePoints(t,e),o=e?n.getSubYScale:n.getYScale,s=function(t){return(e?n.subxx:n.xx).call(n,t)},l=function(t,e){return i.data_groups.length>0?a(t,e)[0][1]:o.call(n,t.id)(t.value)};return r=i.axis_rotated?r.x(l).y(s):r.x(s).y(l),i.line_connectNull||(r=r.defined(function(t){return null!=t.value})),function(t){var a,s=i.line_connectNull?n.filterRemoveNull(t.values):t.values,l=e?n.x:n.subX,u=o.call(n,t.id),c=0,d=0;return n.isLineType(t)?i.data_regions[t.id]?a=n.lineWithRegions(s,l,u,i.data_regions[t.id]):(n.isStepType(t)&&(s=n.convertValuesToStep(s)),a=r.interpolate(n.getInterpolate(t))(s)):(s[0]&&(c=l(s[0].x),d=u(s[0].value)),a=i.axis_rotated?"M "+d+" "+c:"M "+c+" "+d),a?a:"M 0 0"}},l.generateGetLinePoints=function(t,e){var n=this,i=n.config,r=t.__max__+1,a=n.getShapeX(0,r,t,!!e),o=n.getShapeY(!!e),s=n.getShapeOffset(n.isLineType,t,!!e),l=e?n.getSubYScale:n.getYScale;return function(t,e){var r=l.call(n,t.id)(0),u=s(t,e)||r,c=a(t),d=o(t);return i.axis_rotated&&(00?a(t,e)[0][1]:o.call(n,t.id)(n.getAreaBaseValue(t.id))},u=function(t,e){return i.data_groups.length>0?a(t,e)[1][1]:o.call(n,t.id)(t.value)};return r=i.axis_rotated?r.x0(l).x1(u).y(s):r.x(s).y0(i.area_above?0:l).y1(u),i.line_connectNull||(r=r.defined(function(t){return null!==t.value})),function(t){var e,a=i.line_connectNull?n.filterRemoveNull(t.values):t.values,o=0,s=0;return n.isAreaType(t)?(n.isStepType(t)&&(a=n.convertValuesToStep(a)),e=r.interpolate(n.getInterpolate(t))(a)):(a[0]&&(o=n.x(a[0].x),s=n.getYScale(t.id)(a[0].value)),e=i.axis_rotated?"M "+s+" "+o:"M "+o+" "+s),e?e:"M 0 0"}},l.getAreaBaseValue=function(){return 0},l.generateGetAreaPoints=function(t,e){var n=this,i=n.config,r=t.__max__+1,a=n.getShapeX(0,r,t,!!e),o=n.getShapeY(!!e),s=n.getShapeOffset(n.isAreaType,t,!!e),l=e?n.getSubYScale:n.getYScale;return function(t,e){var r=l.call(n,t.id)(0),u=s(t,e)||r,c=a(t),d=o(t);return i.axis_rotated&&(00?(t=n.getShapeIndices(n.isLineType),e=n.generateGetLinePoints(t),n.circleY=function(t,n){return e(t,n)[0][1]}):n.circleY=function(t){return n.getYScale(t.id)(t.value)}},l.getCircles=function(t,e){var n=this;return(e?n.main.selectAll("."+d.circles+n.getTargetSelectorSuffix(e)):n.main).selectAll("."+d.circle+(h(t)?"-"+t:""))},l.expandCircles=function(t,e,n){var i=this,r=i.pointExpandedR.bind(i);n&&i.unexpandCircles(),i.getCircles(t,e).classed(d.EXPANDED,!0).attr("r",r)},l.unexpandCircles=function(t){var e=this,n=e.pointR.bind(e);e.getCircles(t).filter(function(){return e.d3.select(this).classed(d.EXPANDED)}).classed(d.EXPANDED,!1).attr("r",n)},l.pointR=function(t){var e=this,n=e.config;return e.isStepType(t)?0:f(n.point_r)?n.point_r(t):n.point_r},l.pointExpandedR=function(t){var e=this,n=e.config;return n.point_focus_expand_enabled?n.point_focus_expand_r?n.point_focus_expand_r:1.75*e.pointR(t):e.pointR(t)},l.pointSelectR=function(t){var e=this,n=e.config;return f(n.point_select_r)?n.point_select_r(t):n.point_select_r?n.point_select_r:4*e.pointR(t)},l.isWithinCircle=function(t,e){var n=this.d3,i=n.mouse(t),r=n.select(t),a=+r.attr("cx"),o=+r.attr("cy");return Math.sqrt(Math.pow(a-i[0],2)+Math.pow(o-i[1],2))i.bar_width_max?i.bar_width_max:r},l.getBars=function(t,e){var n=this;return(e?n.main.selectAll("."+d.bars+n.getTargetSelectorSuffix(e)):n.main).selectAll("."+d.bar+(h(t)?"-"+t:""))},l.expandBars=function(t,e,n){var i=this;n&&i.unexpandBars(),i.getBars(t,e).classed(d.EXPANDED,!0)},l.unexpandBars=function(t){var e=this;e.getBars(t).classed(d.EXPANDED,!1)},l.generateDrawBar=function(t,e){var n=this,i=n.config,r=n.generateGetBarPoints(t,e);return function(t,e){var n=r(t,e),a=i.axis_rotated?1:0,o=i.axis_rotated?0:1,s="M "+n[0][a]+","+n[0][o]+" L"+n[1][a]+","+n[1][o]+" L"+n[2][a]+","+n[2][o]+" L"+n[3][a]+","+n[3][o]+" z";return s}},l.generateGetBarPoints=function(t,e){var n=this,i=e?n.subXAxis:n.xAxis,r=t.__max__+1,a=n.getBarW(i,r),o=n.getShapeX(a,r,t,!!e),s=n.getShapeY(!!e),l=n.getShapeOffset(n.isBarType,t,!!e),u=e?n.getSubYScale:n.getYScale;return function(t,e){var i=u.call(n,t.id)(0),r=l(t,e)||i,c=o(t),d=s(t);return n.config.axis_rotated&&(0a.width?i=a.width-o.width:i<0&&(i=4)),i},l.getYForText=function(t,e,n){var i,r=this,a=n.getBoundingClientRect();return r.config.axis_rotated?i=(t[0][0]+t[2][0]+.6*a.height)/2:(i=t[2][1],e.value<0||0===e.value&&!r.hasPositiveValue?(i+=a.height,r.isBarType(e)&&r.isSafari()?i-=3:!r.isBarType(e)&&r.isChrome()&&(i+=3)):i+=r.isBarType(e)?-3:-6),null!==e.value||r.config.axis_rotated||(ithis.height&&(i=this.height-4)), -i},l.setTargetType=function(t,e){var n=this,i=n.config;n.mapToTargetIds(t).forEach(function(t){n.withoutFadeIn[t]=e===i.data_types[t],i.data_types[t]=e}),t||(i.data_type=e)},l.hasType=function(t,e){var n=this,i=n.config.data_types,r=!1;return e=e||n.data.targets,e&&e.length?e.forEach(function(e){var n=i[e.id];(n&&n.indexOf(t)>=0||!n&&"line"===t)&&(r=!0)}):Object.keys(i).length?Object.keys(i).forEach(function(e){i[e]===t&&(r=!0)}):r=n.config.data_type===t,r},l.hasArcType=function(t){return this.hasType("pie",t)||this.hasType("donut",t)||this.hasType("gauge",t)},l.isLineType=function(t){var e=this.config,n=p(t)?t:t.id;return!e.data_types[n]||["line","spline","area","area-spline","step","area-step"].indexOf(e.data_types[n])>=0},l.isStepType=function(t){var e=p(t)?t:t.id;return["step","area-step"].indexOf(this.config.data_types[e])>=0},l.isSplineType=function(t){var e=p(t)?t:t.id;return["spline","area-spline"].indexOf(this.config.data_types[e])>=0},l.isAreaType=function(t){var e=p(t)?t:t.id;return["area","area-spline","area-step"].indexOf(this.config.data_types[e])>=0},l.isBarType=function(t){var e=p(t)?t:t.id;return"bar"===this.config.data_types[e]},l.isScatterType=function(t){var e=p(t)?t:t.id;return"scatter"===this.config.data_types[e]},l.isPieType=function(t){var e=p(t)?t:t.id;return"pie"===this.config.data_types[e]},l.isGaugeType=function(t){var e=p(t)?t:t.id;return"gauge"===this.config.data_types[e]},l.isDonutType=function(t){var e=p(t)?t:t.id;return"donut"===this.config.data_types[e]},l.isArcType=function(t){return this.isPieType(t)||this.isDonutType(t)||this.isGaugeType(t)},l.lineData=function(t){return this.isLineType(t)?[t]:[]},l.arcData=function(t){return this.isArcType(t.data)?[t]:[]},l.barData=function(t){return this.isBarType(t)?t.values:[]},l.lineOrScatterData=function(t){return this.isLineType(t)||this.isScatterType(t)?t.values:[]},l.barOrLineData=function(t){return this.isBarType(t)||this.isLineType(t)?t.values:[]},l.isInterpolationType=function(t){return["linear","linear-closed","basis","basis-open","basis-closed","bundle","cardinal","cardinal-open","cardinal-closed","monotone"].indexOf(t)>=0},l.initGrid=function(){var t=this,e=t.config,n=t.d3;t.grid=t.main.append("g").attr("clip-path",t.clipPathForGrid).attr("class",d.grid),e.grid_x_show&&t.grid.append("g").attr("class",d.xgrids),e.grid_y_show&&t.grid.append("g").attr("class",d.ygrids),e.grid_focus_show&&t.grid.append("g").attr("class",d.xgridFocus).append("line").attr("class",d.xgridFocus),t.xgrid=n.selectAll([]),e.grid_lines_front||t.initGridLines()},l.initGridLines=function(){var t=this,e=t.d3;t.gridLines=t.main.append("g").attr("clip-path",t.clipPathForGrid).attr("class",d.grid+" "+d.gridLines),t.gridLines.append("g").attr("class",d.xgridLines),t.gridLines.append("g").attr("class",d.ygridLines),t.xgridLines=e.selectAll([])},l.updateXGrid=function(t){var e=this,n=e.config,i=e.d3,r=e.generateGridData(n.grid_x_type,e.x),a=e.isCategorized()?e.xAxis.tickOffset():0;e.xgridAttr=n.axis_rotated?{x1:0,x2:e.width,y1:function(t){return e.x(t)-a},y2:function(t){return e.x(t)-a}}:{x1:function(t){return e.x(t)+a},x2:function(t){return e.x(t)+a},y1:0,y2:e.height},e.xgrid=e.main.select("."+d.xgrids).selectAll("."+d.xgrid).data(r),e.xgrid.enter().append("line").attr("class",d.xgrid),t||e.xgrid.attr(e.xgridAttr).style("opacity",function(){return+i.select(this).attr(n.axis_rotated?"y1":"x1")===(n.axis_rotated?e.height:0)?0:1}),e.xgrid.exit().remove()},l.updateYGrid=function(){var t=this,e=t.config,n=t.yAxis.tickValues()||t.y.ticks(e.grid_y_ticks);t.ygrid=t.main.select("."+d.ygrids).selectAll("."+d.ygrid).data(n),t.ygrid.enter().append("line").attr("class",d.ygrid),t.ygrid.attr("x1",e.axis_rotated?t.y:0).attr("x2",e.axis_rotated?t.y:t.width).attr("y1",e.axis_rotated?0:t.y).attr("y2",e.axis_rotated?t.height:t.y),t.ygrid.exit().remove(),t.smoothLines(t.ygrid,"grid")},l.gridTextAnchor=function(t){return t.position?t.position:"end"},l.gridTextDx=function(t){return"start"===t.position?4:"middle"===t.position?0:-4},l.xGridTextX=function(t){return"start"===t.position?-this.height:"middle"===t.position?-this.height/2:0},l.yGridTextX=function(t){return"start"===t.position?0:"middle"===t.position?this.width/2:this.width},l.updateGrid=function(t){var e,n,i,r=this,a=r.main,o=r.config;r.grid.style("visibility",r.hasArcType()?"hidden":"visible"),a.select("line."+d.xgridFocus).style("visibility","hidden"),o.grid_x_show&&r.updateXGrid(),r.xgridLines=a.select("."+d.xgridLines).selectAll("."+d.xgridLine).data(o.grid_x_lines),e=r.xgridLines.enter().append("g").attr("class",function(t){return d.xgridLine+(t["class"]?" "+t["class"]:"")}),e.append("line").style("opacity",0),e.append("text").attr("text-anchor",r.gridTextAnchor).attr("transform",o.axis_rotated?"":"rotate(-90)").attr("dx",r.gridTextDx).attr("dy",-5).style("opacity",0),r.xgridLines.exit().transition().duration(t).style("opacity",0).remove(),o.grid_y_show&&r.updateYGrid(),r.ygridLines=a.select("."+d.ygridLines).selectAll("."+d.ygridLine).data(o.grid_y_lines),n=r.ygridLines.enter().append("g").attr("class",function(t){return d.ygridLine+(t["class"]?" "+t["class"]:"")}),n.append("line").style("opacity",0),n.append("text").attr("text-anchor",r.gridTextAnchor).attr("transform",o.axis_rotated?"rotate(-90)":"").attr("dx",r.gridTextDx).attr("dy",-5).style("opacity",0),i=r.yv.bind(r),r.ygridLines.select("line").transition().duration(t).attr("x1",o.axis_rotated?i:0).attr("x2",o.axis_rotated?i:r.width).attr("y1",o.axis_rotated?0:i).attr("y2",o.axis_rotated?r.height:i).style("opacity",1),r.ygridLines.select("text").transition().duration(t).attr("x",o.axis_rotated?r.xGridTextX.bind(r):r.yGridTextX.bind(r)).attr("y",i).text(function(t){return t.text}).style("opacity",1),r.ygridLines.exit().transition().duration(t).style("opacity",0).remove()},l.redrawGrid=function(t){var e=this,n=e.config,i=e.xv.bind(e),r=e.xgridLines.select("line"),a=e.xgridLines.select("text");return[(t?r.transition():r).attr("x1",n.axis_rotated?0:i).attr("x2",n.axis_rotated?e.width:i).attr("y1",n.axis_rotated?i:0).attr("y2",n.axis_rotated?i:e.height).style("opacity",1),(t?a.transition():a).attr("x",n.axis_rotated?e.yGridTextX.bind(e):e.xGridTextX.bind(e)).attr("y",i).text(function(t){return t.text}).style("opacity",1)]},l.showXGridFocus=function(t){var e=this,n=e.config,i=t.filter(function(t){return t&&h(t.value)}),r=e.main.selectAll("line."+d.xgridFocus),a=e.xx.bind(e);n.tooltip_show&&(e.hasType("scatter")||e.hasArcType()||(r.style("visibility","visible").data([i[0]]).attr(n.axis_rotated?"y1":"x1",a).attr(n.axis_rotated?"y2":"x2",a),e.smoothLines(r,"grid")))},l.hideXGridFocus=function(){this.main.select("line."+d.xgridFocus).style("visibility","hidden")},l.updateXgridFocus=function(){var t=this,e=t.config;t.main.select("line."+d.xgridFocus).attr("x1",e.axis_rotated?0:-10).attr("x2",e.axis_rotated?t.width:-10).attr("y1",e.axis_rotated?-10:0).attr("y2",e.axis_rotated?-10:t.height)},l.generateGridData=function(t,e){var n,i,r,a,o=this,s=[],l=o.main.select("."+d.axisX).selectAll(".tick").size();if("year"===t)for(n=o.getXDomain(),i=n[0].getFullYear(),r=n[1].getFullYear(),a=i;a<=r;a++)s.push(new Date(a+"-01-01 00:00:00"));else s=e.ticks(10),s.length>l&&(s=s.filter(function(t){return(""+t).indexOf(".")<0}));return s},l.getGridFilterToRemove=function(t){return t?function(e){var n=!1;return[].concat(t).forEach(function(t){("value"in t&&e.value===t.value||"class"in t&&e["class"]===t["class"])&&(n=!0)}),n}:function(){return!0}},l.removeGridLines=function(t,e){var n=this,i=n.config,r=n.getGridFilterToRemove(t),a=function(t){return!r(t)},o=e?d.xgridLines:d.ygridLines,s=e?d.xgridLine:d.ygridLine;n.main.select("."+o).selectAll("."+s).filter(r).transition().duration(i.transition_duration).style("opacity",0).remove(),e?i.grid_x_lines=i.grid_x_lines.filter(a):i.grid_y_lines=i.grid_y_lines.filter(a)},l.initTooltip=function(){var t,e=this,n=e.config;if(e.tooltip=e.selectChart.style("position","relative").append("div").attr("class",d.tooltipContainer).style("position","absolute").style("pointer-events","none").style("display","none"),n.tooltip_init_show){if(e.isTimeSeries()&&p(n.tooltip_init_x)){for(n.tooltip_init_x=e.parseDate(n.tooltip_init_x),t=0;t0&&i>0&&(n=t?m.indexOf(t.id):null,i=e?m.indexOf(e.id):null),g?n-i:i-n})}for(a=0;a"+(o||0===o?"
    ":"")),s=T(p(t[a].value,t[a].ratio,t[a].id,t[a].index,t)),void 0!==s)){if(null===t[a].name)continue;l=T(f(t[a].name,t[a].ratio,t[a].id,t[a].index)),u=c.levelColor?c.levelColor(t[a].value):i(t[a].id),r+="",r+="",r+="",r+=""}return r+"
    ").addClass("cw").text("#"));n.isBefore(d.clone().endOf("w"));)e.append(t("").addClass("dow").text(n.format("dd"))),n.add(1,"d");p.find(".datepicker-days thead").append(e)},F=function(t){return i.disabledDates[t.format("YYYY-MM-DD")]===!0},V=function(t){return i.enabledDates[t.format("YYYY-MM-DD")]===!0},j=function(t){return i.disabledHours[t.format("H")]===!0},G=function(t){return i.enabledHours[t.format("H")]===!0},H=function(e,n){if(!e.isValid())return!1;if(i.disabledDates&&"d"===n&&F(e))return!1;if(i.enabledDates&&"d"===n&&!V(e))return!1;if(i.minDate&&e.isBefore(i.minDate,n))return!1;if(i.maxDate&&e.isAfter(i.maxDate,n))return!1;if(i.daysOfWeekDisabled&&"d"===n&&i.daysOfWeekDisabled.indexOf(e.day())!==-1)return!1;if(i.disabledHours&&("h"===n||"m"===n||"s"===n)&&j(e))return!1;if(i.enabledHours&&("h"===n||"m"===n||"s"===n)&&!G(e))return!1;if(i.disabledTimeIntervals&&("h"===n||"m"===n||"s"===n)){var r=!1;if(t.each(i.disabledTimeIntervals,function(){if(e.isBetween(this[0],this[1]))return r=!0,!1}),r)return!1}return!0},$=function(){for(var e=[],n=d.clone().startOf("y").startOf("d");n.isSame(d,"y");)e.push(t("").attr("data-action","selectMonth").addClass("month").text(n.format("MMM"))),n.add(1,"M");p.find(".datepicker-months td").empty().append(e)},z=function(){var e=p.find(".datepicker-months"),n=e.find("th"),r=e.find("tbody").find("span");n.eq(0).find("span").attr("title",i.tooltips.prevYear),n.eq(1).attr("title",i.tooltips.selectYear),n.eq(2).find("span").attr("title",i.tooltips.nextYear),e.find(".disabled").removeClass("disabled"),H(d.clone().subtract(1,"y"),"y")||n.eq(0).addClass("disabled"),n.eq(1).text(d.year()),H(d.clone().add(1,"y"),"y")||n.eq(2).addClass("disabled"),r.removeClass("active"),c.isSame(d,"y")&&!h&&r.eq(c.month()).addClass("active"),r.each(function(e){H(d.clone().month(e),"M")||t(this).addClass("disabled")})},Y=function(){var t=p.find(".datepicker-years"),e=t.find("th"),n=d.clone().subtract(5,"y"),r=d.clone().add(6,"y"),a="";for(e.eq(0).find("span").attr("title",i.tooltips.nextDecade),e.eq(1).attr("title",i.tooltips.selectDecade),e.eq(2).find("span").attr("title",i.tooltips.prevDecade),t.find(".disabled").removeClass("disabled"),i.minDate&&i.minDate.isAfter(n,"y")&&e.eq(0).addClass("disabled"),e.eq(1).text(n.year()+"-"+r.year()),i.maxDate&&i.maxDate.isBefore(r,"y")&&e.eq(2).addClass("disabled");!n.isAfter(r,"y");)a+=''+n.year()+"", -n.add(1,"y");t.find("td").html(a)},B=function(){var t=p.find(".datepicker-decades"),n=t.find("th"),r=e(d.isBefore(e({y:1999}))?{y:1899}:{y:1999}),a=r.clone().add(100,"y"),o="";for(n.eq(0).find("span").attr("title",i.tooltips.prevCentury),n.eq(2).find("span").attr("title",i.tooltips.nextCentury),t.find(".disabled").removeClass("disabled"),(r.isSame(e({y:1900}))||i.minDate&&i.minDate.isAfter(r,"y"))&&n.eq(0).addClass("disabled"),n.eq(1).text(r.year()+"-"+a.year()),(r.isSame(e({y:2e3}))||i.maxDate&&i.maxDate.isBefore(a,"y"))&&n.eq(2).addClass("disabled");!r.isAfter(a,"y");)o+=''+(r.year()+1)+" - "+(r.year()+12)+"",r.add(12,"y");o+="",t.find("td").html(o)},X=function(){var n,r,a,o,s=p.find(".datepicker-days"),l=s.find("th"),u=[];if(C()){for(l.eq(0).find("span").attr("title",i.tooltips.prevMonth),l.eq(1).attr("title",i.tooltips.selectMonth),l.eq(2).find("span").attr("title",i.tooltips.nextMonth),s.find(".disabled").removeClass("disabled"),l.eq(1).text(d.format(i.dayViewHeaderFormat)),H(d.clone().subtract(1,"M"),"M")||l.eq(0).addClass("disabled"),H(d.clone().add(1,"M"),"M")||l.eq(2).addClass("disabled"),n=d.clone().startOf("M").startOf("w").startOf("d"),o=0;o<42;o++)0===n.weekday()&&(r=t("
    '+n.week()+"'+n.date()+"
    '+n.format(a?"HH":"hh")+"
    '+n.format("mm")+"
    '+n.format("ss")+"
    "+o+"
    "+l+""+s+"
    "},l.tooltipPosition=function(t,e,n,i){var r,a,o,s,l,u=this,c=u.config,d=u.d3,h=u.hasArcType(),f=d.mouse(i);return h?(a=(u.width-(u.isLegendRight?u.getLegendWidth():0))/2+f[0],s=u.height/2+f[1]+20):(r=u.getSvgLeft(!0),c.axis_rotated?(a=r+f[0]+100,o=a+e,l=u.currentWidth-u.getCurrentPaddingRight(),s=u.x(t[0].x)+20):(a=r+u.getCurrentPaddingLeft(!0)+u.x(t[0].x)+20,o=a+e,l=r+u.currentWidth-u.getCurrentPaddingRight(),s=f[1]+15),o>l&&(a-=o-l+20),s+n>u.currentHeight&&(s-=n+30)),s<0&&(s=0),{top:s,left:a}},l.showTooltip=function(t,e){var n,i,r,a=this,o=a.config,s=a.hasArcType(),u=t.filter(function(t){return t&&h(t.value)}),c=o.tooltip_position||l.tooltipPosition;0!==u.length&&o.tooltip_show&&(a.tooltip.html(o.tooltip_contents.call(a,t,a.axis.getXAxisTickFormat(),a.getYFormat(s),a.color)).style("display","block"),n=a.tooltip.property("offsetWidth"),i=a.tooltip.property("offsetHeight"),r=c.call(this,u,n,i,e),a.tooltip.style("top",r.top+"px").style("left",r.left+"px"))},l.hideTooltip=function(){this.tooltip.style("display","none")},l.initLegend=function(){var t=this;return t.legendItemTextBox={},t.legendHasRendered=!1,t.legend=t.svg.append("g").attr("transform",t.getTranslate("legend")),t.config.legend_show?void t.updateLegendWithDefaults():(t.legend.style("visibility","hidden"),void(t.hiddenLegendIds=t.mapToIds(t.data.targets)))},l.updateLegendWithDefaults=function(){var t=this;t.updateLegend(t.mapToIds(t.data.targets),{withTransform:!1,withTransitionForTransform:!1,withTransition:!1})},l.updateSizeForLegend=function(t,e){var n=this,i=n.config,r={top:n.isLegendTop?n.getCurrentPaddingTop()+i.legend_inset_y+5.5:n.currentHeight-t-n.getCurrentPaddingBottom()-i.legend_inset_y,left:n.isLegendLeft?n.getCurrentPaddingLeft()+i.legend_inset_x+.5:n.currentWidth-e-n.getCurrentPaddingRight()-i.legend_inset_x+.5};n.margin3={top:n.isLegendRight?0:n.isLegendInset?r.top:n.currentHeight-t,right:NaN,bottom:0,left:n.isLegendRight?n.currentWidth-e:n.isLegendInset?r.left:0}},l.transformLegend=function(t){var e=this;(t?e.legend.transition():e.legend).attr("transform",e.getTranslate("legend"))},l.updateLegendStep=function(t){this.legendStep=t},l.updateLegendItemWidth=function(t){this.legendItemWidth=t},l.updateLegendItemHeight=function(t){this.legendItemHeight=t},l.getLegendWidth=function(){var t=this;return t.config.legend_show?t.isLegendRight||t.isLegendInset?t.legendItemWidth*(t.legendStep+1):t.currentWidth:0},l.getLegendHeight=function(){var t=this,e=0;return t.config.legend_show&&(e=t.isLegendRight?t.currentHeight:Math.max(20,t.legendItemHeight)*(t.legendStep+1)),e},l.opacityForLegend=function(t){return t.classed(d.legendItemHidden)?null:1},l.opacityForUnfocusedLegend=function(t){return t.classed(d.legendItemHidden)?null:.3},l.toggleFocusLegend=function(t,e){var n=this;t=n.mapToTargetIds(t),n.legend.selectAll("."+d.legendItem).filter(function(e){return t.indexOf(e)>=0}).classed(d.legendItemFocused,e).transition().duration(100).style("opacity",function(){var t=e?n.opacityForLegend:n.opacityForUnfocusedLegend;return t.call(n,n.d3.select(this))})},l.revertLegend=function(){var t=this,e=t.d3;t.legend.selectAll("."+d.legendItem).classed(d.legendItemFocused,!1).transition().duration(100).style("opacity",function(){return t.opacityForLegend(e.select(this))})},l.showLegend=function(t){var e=this,n=e.config;n.legend_show||(n.legend_show=!0,e.legend.style("visibility","visible"),e.legendHasRendered||e.updateLegendWithDefaults()),e.removeHiddenLegendIds(t),e.legend.selectAll(e.selectorLegends(t)).style("visibility","visible").transition().style("opacity",function(){return e.opacityForLegend(e.d3.select(this))})},l.hideLegend=function(t){var e=this,n=e.config;n.legend_show&&_(t)&&(n.legend_show=!1,e.legend.style("visibility","hidden")),e.addHiddenLegendIds(t),e.legend.selectAll(e.selectorLegends(t)).style("opacity",0).style("visibility","hidden")},l.clearLegendItemTextBoxCache=function(){this.legendItemTextBox={}},l.updateLegend=function(t,e,n){function i(t,e){return T.legendItemTextBox[e]||(T.legendItemTextBox[e]=T.getTextRect(t.textContent,d.legendItem,t)),T.legendItemTextBox[e]}function r(e,n,r){function a(t,e){e||(o=(p-O-f)/2,o=P)&&(P=d),(!M||h>=M)&&(M=h),s=T.isLegendRight||T.isLegendInset?M:P,void(C.legend_equally?(Object.keys(I).forEach(function(t){I[t]=P}),Object.keys(N).forEach(function(t){N[t]=M}),o=(p-s*t.length)/2,o0&&0===S.size()&&(S=T.legend.insert("g","."+d.legendItem).attr("class",d.legendBackground).append("rect")),x=T.legend.selectAll("text").data(t).text(function(t){return m(C.data_names[t])?C.data_names[t]:t}).each(function(t,e){r(this,t,e)}),(v?x.transition():x).attr("x",o).attr("y",u),_=T.legend.selectAll("rect."+d.legendItemEvent).data(t),(v?_.transition():_).attr("width",function(t){return I[t]}).attr("height",function(t){return N[t]}).attr("x",s).attr("y",c),b=T.legend.selectAll("line."+d.legendItemTile).data(t),(v?b.transition():b).style("stroke",T.color).attr("x1",h).attr("y1",p).attr("x2",f).attr("y2",p),S&&(v?S.transition():S).attr("height",T.getLegendHeight()-12).attr("width",P*(V+1)+10),T.legend.selectAll("."+d.legendItem).classed(d.legendItemHidden,function(t){return!T.isTargetToShow(t)}),T.updateLegendItemWidth(P),T.updateLegendItemHeight(M),T.updateLegendStep(V),T.updateSizes(),T.updateScales(),T.updateSvgSize(),T.transformAll(y,n),T.legendHasRendered=!0},l.initTitle=function(){var t=this;t.title=t.svg.append("text").text(t.config.title_text).attr("class",t.CLASS.title)},l.redrawTitle=function(){var t=this;t.title.attr("x",t.xForTitle.bind(t)).attr("y",t.yForTitle.bind(t))},l.xForTitle=function(){var t,e=this,n=e.config,i=n.title_position||"left";return t=i.indexOf("right")>=0?e.currentWidth-e.getTextRect(e.title.node().textContent,e.CLASS.title,e.title.node()).width-n.title_padding.right:i.indexOf("center")>=0?(e.currentWidth-e.getTextRect(e.title.node().textContent,e.CLASS.title,e.title.node()).width)/2:n.title_padding.left},l.yForTitle=function(){var t=this;return t.config.title_padding.top+t.getTextRect(t.title.node().textContent,t.CLASS.title,t.title.node()).height},l.getTitlePadding=function(){var t=this;return t.yForTitle()+t.config.title_padding.bottom},n(e,a),a.prototype.init=function(){var t=this.owner,e=t.config,n=t.main;t.axes.x=n.append("g").attr("class",d.axis+" "+d.axisX).attr("clip-path",t.clipPathForXAxis).attr("transform",t.getTranslate("x")).style("visibility",e.axis_x_show?"visible":"hidden"),t.axes.x.append("text").attr("class",d.axisXLabel).attr("transform",e.axis_rotated?"rotate(-90)":"").style("text-anchor",this.textAnchorForXAxisLabel.bind(this)),t.axes.y=n.append("g").attr("class",d.axis+" "+d.axisY).attr("clip-path",e.axis_y_inner?"":t.clipPathForYAxis).attr("transform",t.getTranslate("y")).style("visibility",e.axis_y_show?"visible":"hidden"),t.axes.y.append("text").attr("class",d.axisYLabel).attr("transform",e.axis_rotated?"":"rotate(-90)").style("text-anchor",this.textAnchorForYAxisLabel.bind(this)),t.axes.y2=n.append("g").attr("class",d.axis+" "+d.axisY2).attr("transform",t.getTranslate("y2")).style("visibility",e.axis_y2_show?"visible":"hidden"),t.axes.y2.append("text").attr("class",d.axisY2Label).attr("transform",e.axis_rotated?"":"rotate(-90)").style("text-anchor",this.textAnchorForY2AxisLabel.bind(this))},a.prototype.getXAxis=function(t,e,n,i,r,a,s){var l=this.owner,u=l.config,c={isCategory:l.isCategorized(),withOuterTick:r,tickMultiline:u.axis_x_tick_multiline,tickWidth:u.axis_x_tick_width,tickTextRotate:s?0:u.axis_x_tick_rotate,withoutTransition:a},d=o(l.d3,c).scale(t).orient(e);return l.isTimeSeries()&&i&&"function"!=typeof i&&(i=i.map(function(t){return l.parseDate(t)})),d.tickFormat(n).tickValues(i),l.isCategorized()&&(d.tickCentered(u.axis_x_tick_centered),_(u.axis_x_tick_culling)&&(u.axis_x_tick_culling=!1)),d},a.prototype.updateXAxisTickValues=function(t,e){var n,i=this.owner,r=i.config;return(r.axis_x_tick_fit||r.axis_x_tick_count)&&(n=this.generateTickValues(i.mapTargetsToUniqueXs(t),r.axis_x_tick_count,i.isTimeSeries())),e?e.tickValues(n):(i.xAxis.tickValues(n),i.subXAxis.tickValues(n)),n},a.prototype.getYAxis=function(t,e,n,i,r,a,s){var l=this.owner,u=l.config,c={withOuterTick:r,withoutTransition:a,tickTextRotate:s?0:u.axis_y_tick_rotate},d=o(l.d3,c).scale(t).orient(e).tickFormat(n);return l.isTimeSeriesY()?d.ticks(l.d3.time[u.axis_y_tick_time_value],u.axis_y_tick_time_interval):d.tickValues(i),d},a.prototype.getId=function(t){var e=this.owner.config;return t in e.data_axes?e.data_axes[t]:"y"},a.prototype.getXAxisTickFormat=function(){var t=this.owner,e=t.config,n=t.isTimeSeries()?t.defaultAxisTimeFormat:t.isCategorized()?t.categoryName:function(t){return t<0?t.toFixed(0):t};return e.axis_x_tick_format&&(f(e.axis_x_tick_format)?n=e.axis_x_tick_format:t.isTimeSeries()&&(n=function(n){return n?t.axisTimeFormat(e.axis_x_tick_format)(n):""})),f(n)?function(e){return n.call(t,e)}:n},a.prototype.getTickValues=function(t,e){return t?t:e?e.tickValues():void 0},a.prototype.getXAxisTickValues=function(){return this.getTickValues(this.owner.config.axis_x_tick_values,this.owner.xAxis)},a.prototype.getYAxisTickValues=function(){return this.getTickValues(this.owner.config.axis_y_tick_values,this.owner.yAxis)},a.prototype.getY2AxisTickValues=function(){return this.getTickValues(this.owner.config.axis_y2_tick_values,this.owner.y2Axis)},a.prototype.getLabelOptionByAxisId=function(t){var e,n=this.owner,i=n.config;return"y"===t?e=i.axis_y_label:"y2"===t?e=i.axis_y2_label:"x"===t&&(e=i.axis_x_label),e},a.prototype.getLabelText=function(t){var e=this.getLabelOptionByAxisId(t);return p(e)?e:e?e.text:null},a.prototype.setLabelText=function(t,e){var n=this.owner,i=n.config,r=this.getLabelOptionByAxisId(t);p(r)?"y"===t?i.axis_y_label=e:"y2"===t?i.axis_y2_label=e:"x"===t&&(i.axis_x_label=e):r&&(r.text=e)},a.prototype.getLabelPosition=function(t,e){var n=this.getLabelOptionByAxisId(t),i=n&&"object"==typeof n&&n.position?n.position:e;return{isInner:i.indexOf("inner")>=0,isOuter:i.indexOf("outer")>=0,isLeft:i.indexOf("left")>=0,isCenter:i.indexOf("center")>=0,isRight:i.indexOf("right")>=0,isTop:i.indexOf("top")>=0,isMiddle:i.indexOf("middle")>=0,isBottom:i.indexOf("bottom")>=0}},a.prototype.getXAxisLabelPosition=function(){return this.getLabelPosition("x",this.owner.config.axis_rotated?"inner-top":"inner-right")},a.prototype.getYAxisLabelPosition=function(){return this.getLabelPosition("y",this.owner.config.axis_rotated?"inner-right":"inner-top")},a.prototype.getY2AxisLabelPosition=function(){return this.getLabelPosition("y2",this.owner.config.axis_rotated?"inner-right":"inner-top")},a.prototype.getLabelPositionById=function(t){return"y2"===t?this.getY2AxisLabelPosition():"y"===t?this.getYAxisLabelPosition():this.getXAxisLabelPosition()},a.prototype.textForXAxisLabel=function(){return this.getLabelText("x")},a.prototype.textForYAxisLabel=function(){return this.getLabelText("y")},a.prototype.textForY2AxisLabel=function(){return this.getLabelText("y2")},a.prototype.xForAxisLabel=function(t,e){var n=this.owner;return t?e.isLeft?0:e.isCenter?n.width/2:n.width:e.isBottom?-n.height:e.isMiddle?-n.height/2:0},a.prototype.dxForAxisLabel=function(t,e){return t?e.isLeft?"0.5em":e.isRight?"-0.5em":"0":e.isTop?"-0.5em":e.isBottom?"0.5em":"0"},a.prototype.textAnchorForAxisLabel=function(t,e){return t?e.isLeft?"start":e.isCenter?"middle":"end":e.isBottom?"start":e.isMiddle?"middle":"end"},a.prototype.xForXAxisLabel=function(){return this.xForAxisLabel(!this.owner.config.axis_rotated,this.getXAxisLabelPosition())},a.prototype.xForYAxisLabel=function(){return this.xForAxisLabel(this.owner.config.axis_rotated,this.getYAxisLabelPosition())},a.prototype.xForY2AxisLabel=function(){return this.xForAxisLabel(this.owner.config.axis_rotated,this.getY2AxisLabelPosition())},a.prototype.dxForXAxisLabel=function(){return this.dxForAxisLabel(!this.owner.config.axis_rotated,this.getXAxisLabelPosition())},a.prototype.dxForYAxisLabel=function(){return this.dxForAxisLabel(this.owner.config.axis_rotated,this.getYAxisLabelPosition())},a.prototype.dxForY2AxisLabel=function(){return this.dxForAxisLabel(this.owner.config.axis_rotated,this.getY2AxisLabelPosition())},a.prototype.dyForXAxisLabel=function(){var t=this.owner,e=t.config,n=this.getXAxisLabelPosition();return e.axis_rotated?n.isInner?"1.2em":-25-this.getMaxTickWidth("x"):n.isInner?"-0.5em":e.axis_x_height?e.axis_x_height-10:"3em"},a.prototype.dyForYAxisLabel=function(){var t=this.owner,e=this.getYAxisLabelPosition();return t.config.axis_rotated?e.isInner?"-0.5em":"3em":e.isInner?"1.2em":-10-(t.config.axis_y_inner?0:this.getMaxTickWidth("y")+10)},a.prototype.dyForY2AxisLabel=function(){var t=this.owner,e=this.getY2AxisLabelPosition();return t.config.axis_rotated?e.isInner?"1.2em":"-2.2em":e.isInner?"-0.5em":15+(t.config.axis_y2_inner?0:this.getMaxTickWidth("y2")+15)},a.prototype.textAnchorForXAxisLabel=function(){var t=this.owner;return this.textAnchorForAxisLabel(!t.config.axis_rotated,this.getXAxisLabelPosition())},a.prototype.textAnchorForYAxisLabel=function(){var t=this.owner;return this.textAnchorForAxisLabel(t.config.axis_rotated,this.getYAxisLabelPosition())},a.prototype.textAnchorForY2AxisLabel=function(){var t=this.owner;return this.textAnchorForAxisLabel(t.config.axis_rotated,this.getY2AxisLabelPosition())},a.prototype.getMaxTickWidth=function(t,e){var n,i,r,a,o,s=this.owner,l=s.config,u=0;return e&&s.currentMaxTickWidths[t]?s.currentMaxTickWidths[t]:(s.svg&&(n=s.filterTargetsToShow(s.data.targets),"y"===t?(i=s.y.copy().domain(s.getYDomain(n,"y")),r=this.getYAxis(i,s.yOrient,l.axis_y_tick_format,s.yAxisTickValues,!1,!0,!0)):"y2"===t?(i=s.y2.copy().domain(s.getYDomain(n,"y2")),r=this.getYAxis(i,s.y2Orient,l.axis_y2_tick_format,s.y2AxisTickValues,!1,!0,!0)):(i=s.x.copy().domain(s.getXDomain(n)),r=this.getXAxis(i,s.xOrient,s.xAxisTickFormat,s.xAxisTickValues,!1,!0,!0),this.updateXAxisTickValues(n,r)),a=s.d3.select("body").append("div").classed("c3",!0),o=a.append("svg").style("visibility","hidden").style("position","fixed").style("top",0).style("left",0),o.append("g").call(r).each(function(){s.d3.select(this).selectAll("text").each(function(){var t=this.getBoundingClientRect();u2){for(o=i-2,r=t[0],a=t[t.length-1],s=(a-r)/(o+1),c=[r],l=0;l=0;return"url("+(n?"":document.URL.split("#")[0])+"#"+e+")"},l.appendClip=function(t,e){return t.append("clipPath").attr("id",e).append("rect")},l.getAxisClipX=function(t){var e=Math.max(30,this.margin.left);return t?-(1+e):-(e-1)},l.getAxisClipY=function(t){return t?-20:-this.margin.top},l.getXAxisClipX=function(){var t=this;return t.getAxisClipX(!t.config.axis_rotated)},l.getXAxisClipY=function(){var t=this;return t.getAxisClipY(!t.config.axis_rotated)},l.getYAxisClipX=function(){var t=this;return t.config.axis_y_inner?-1:t.getAxisClipX(t.config.axis_rotated)},l.getYAxisClipY=function(){var t=this;return t.getAxisClipY(t.config.axis_rotated)},l.getAxisClipWidth=function(t){var e=this,n=Math.max(30,e.margin.left),i=Math.max(30,e.margin.right);return t?e.width+2+n+i:e.margin.left+20},l.getAxisClipHeight=function(t){return(t?this.margin.bottom:this.margin.top+this.height)+20},l.getXAxisClipWidth=function(){var t=this;return t.getAxisClipWidth(!t.config.axis_rotated)},l.getXAxisClipHeight=function(){var t=this;return t.getAxisClipHeight(!t.config.axis_rotated)},l.getYAxisClipWidth=function(){var t=this;return t.getAxisClipWidth(t.config.axis_rotated)+(t.config.axis_y_inner?20:0)},l.getYAxisClipHeight=function(){var t=this;return t.getAxisClipHeight(t.config.axis_rotated)},l.initPie=function(){var t=this,e=t.d3,n=t.config;t.pie=e.layout.pie().value(function(t){return t.values.reduce(function(t,e){return t+e.value},0)}),n.data_order||t.pie.sort(null)},l.updateRadius=function(){var t=this,e=t.config,n=e.gauge_width||e.donut_width;t.radiusExpanded=Math.min(t.arcWidth,t.arcHeight)/2,t.radius=.95*t.radiusExpanded,t.innerRadiusRatio=n?(t.radius-n)/t.radius:.6,t.innerRadius=t.hasType("donut")||t.hasType("gauge")?t.radius*t.innerRadiusRatio:0},l.updateArc=function(){var t=this;t.svgArc=t.getSvgArc(),t.svgArcExpanded=t.getSvgArcExpanded(),t.svgArcExpandedSub=t.getSvgArcExpanded(.98)},l.updateAngle=function(t){var e,n,i,r,a=this,o=a.config,s=!1,l=0;return o?(a.pie(a.filterTargetsToShow(a.data.targets)).forEach(function(e){s||e.data.id!==t.data.id||(s=!0,t=e,t.index=l),l++}),isNaN(t.startAngle)&&(t.startAngle=0),isNaN(t.endAngle)&&(t.endAngle=t.startAngle),a.isGaugeType(t.data)&&(e=o.gauge_min,n=o.gauge_max,i=Math.PI*(o.gauge_fullCircle?2:1)/(n-e),r=t.value.375?1.175-36/o.radius:.8)*o.radius/r:0,u="translate("+n*a+","+i*a+")"),u},l.getArcRatio=function(t){var e=this,n=e.config,i=Math.PI*(e.hasType("gauge")&&!n.gauge_fullCircle?1:2);return t?(t.endAngle-t.startAngle)/i:null},l.convertToArcData=function(t){return this.addName({id:t.data.id,value:t.value,ratio:this.getArcRatio(t),index:t.index})},l.textForArcLabel=function(t){var e,n,i,r,a,o=this;return o.shouldShowArcLabel()?(e=o.updateAngle(t),n=e?e.value:null,i=o.getArcRatio(e),r=t.data.id,o.hasType("gauge")||o.meetsArcLabelThreshold(i)?(a=o.getArcLabelFormat(),a?a(n,i,r):o.defaultArcValueFormat(n,i)):""):""},l.expandArc=function(e){var n,i=this;return i.transiting?void(n=t.setInterval(function(){i.transiting||(t.clearInterval(n),i.legend.selectAll(".c3-legend-item-focused").size()>0&&i.expandArc(e))},10)):(e=i.mapToTargetIds(e),void i.svg.selectAll(i.selectorTargets(e,"."+d.chartArc)).each(function(t){i.shouldExpand(t.data.id)&&i.d3.select(this).selectAll("path").transition().duration(i.expandDuration(t.data.id)).attr("d",i.svgArcExpanded).transition().duration(2*i.expandDuration(t.data.id)).attr("d",i.svgArcExpandedSub).each(function(t){i.isDonutType(t.data)})}))},l.unexpandArc=function(t){var e=this;e.transiting||(t=e.mapToTargetIds(t),e.svg.selectAll(e.selectorTargets(t,"."+d.chartArc)).selectAll("path").transition().duration(function(t){return e.expandDuration(t.data.id)}).attr("d",e.svgArc),e.svg.selectAll("."+d.arc).style("opacity",1))},l.expandDuration=function(t){var e=this,n=e.config;return e.isDonutType(t)?n.donut_expand_duration:e.isGaugeType(t)?n.gauge_expand_duration:e.isPieType(t)?n.pie_expand_duration:50},l.shouldExpand=function(t){var e=this,n=e.config;return e.isDonutType(t)&&n.donut_expand||e.isGaugeType(t)&&n.gauge_expand||e.isPieType(t)&&n.pie_expand},l.shouldShowArcLabel=function(){var t=this,e=t.config,n=!0;return t.hasType("donut")?n=e.donut_label_show:t.hasType("pie")&&(n=e.pie_label_show),n},l.meetsArcLabelThreshold=function(t){var e=this,n=e.config,i=e.hasType("donut")?n.donut_label_threshold:n.pie_label_threshold;return t>=i},l.getArcLabelFormat=function(){var t=this,e=t.config,n=e.pie_label_format;return t.hasType("gauge")?n=e.gauge_label_format:t.hasType("donut")&&(n=e.donut_label_format),n},l.getArcTitle=function(){var t=this;return t.hasType("donut")?t.config.donut_title:""},l.updateTargetsForArc=function(t){var e,n,i=this,r=i.main,a=i.classChartArc.bind(i),o=i.classArcs.bind(i),s=i.classFocus.bind(i);e=r.select("."+d.chartArcs).selectAll("."+d.chartArc).data(i.pie(t)).attr("class",function(t){return a(t)+s(t.data)}),n=e.enter().append("g").attr("class",a),n.append("g").attr("class",o),n.append("text").attr("dy",i.hasType("gauge")?"-.1em":".35em").style("opacity",0).style("text-anchor","middle").style("pointer-events","none")},l.initArc=function(){var t=this;t.arcs=t.main.select("."+d.chart).append("g").attr("class",d.chartArcs).attr("transform",t.getTranslate("arc")),t.arcs.append("text").attr("class",d.chartArcsTitle).style("text-anchor","middle").text(t.getArcTitle())},l.redrawArc=function(t,e,n){var i,r=this,a=r.d3,o=r.config,s=r.main;i=s.selectAll("."+d.arcs).selectAll("."+d.arc).data(r.arcData.bind(r)),i.enter().append("path").attr("class",r.classArc.bind(r)).style("fill",function(t){return r.color(t.data)}).style("cursor",function(t){return o.interaction_enabled&&o.data_selection_isselectable(t)?"pointer":null}).style("opacity",0).each(function(t){r.isGaugeType(t.data)&&(t.startAngle=t.endAngle=o.gauge_startingAngle),this._current=t}),i.attr("transform",function(t){return!r.isGaugeType(t.data)&&n?"scale(0)":""}).style("opacity",function(t){return t===this._current?0:1}).on("mouseover",o.interaction_enabled?function(t){var e,n;r.transiting||(e=r.updateAngle(t),e&&(n=r.convertToArcData(e),r.expandArc(e.data.id),r.api.focus(e.data.id),r.toggleFocusLegend(e.data.id,!0),r.config.data_onmouseover(n,this)))}:null).on("mousemove",o.interaction_enabled?function(t){var e,n,i=r.updateAngle(t);i&&(e=r.convertToArcData(i),n=[e],r.showTooltip(n,this))}:null).on("mouseout",o.interaction_enabled?function(t){var e,n;r.transiting||(e=r.updateAngle(t),e&&(n=r.convertToArcData(e),r.unexpandArc(e.data.id),r.api.revert(),r.revertLegend(),r.hideTooltip(),r.config.data_onmouseout(n,this)))}:null).on("click",o.interaction_enabled?function(t,e){var n,i=r.updateAngle(t);i&&(n=r.convertToArcData(i),r.toggleShape&&r.toggleShape(this,n,e),r.config.data_onclick.call(r.api,n,this))}:null).each(function(){r.transiting=!0}).transition().duration(t).attrTween("d",function(t){var e,n=r.updateAngle(t);return n?(isNaN(this._current.startAngle)&&(this._current.startAngle=0),isNaN(this._current.endAngle)&&(this._current.endAngle=this._current.startAngle),e=a.interpolate(this._current,n),this._current=e(0),function(n){var i=e(n);return i.data=t.data,r.getArc(i,!0)}):function(){return"M 0 0"}}).attr("transform",n?"scale(1)":"").style("fill",function(t){return r.levelColor?r.levelColor(t.data.values[0].value):r.color(t.data.id)}).style("opacity",1).call(r.endall,function(){r.transiting=!1}),i.exit().transition().duration(e).style("opacity",0).remove(),s.selectAll("."+d.chartArc).select("text").style("opacity",0).attr("class",function(t){return r.isGaugeType(t.data)?d.gaugeValue:""}).text(r.textForArcLabel.bind(r)).attr("transform",r.transformForArcLabel.bind(r)).style("font-size",function(t){return r.isGaugeType(t.data)?Math.round(r.radius/5)+"px":""}).transition().duration(t).style("opacity",function(t){return r.isTargetToShow(t.data.id)&&r.isArcType(t.data)?1:0}),s.select("."+d.chartArcsTitle).style("opacity",r.hasType("donut")||r.hasType("gauge")?1:0),r.hasType("gauge")&&(r.arcs.select("."+d.chartArcsBackground).attr("d",function(){var t={data:[{value:o.gauge_max}],startAngle:o.gauge_startingAngle,endAngle:-1*o.gauge_startingAngle};return r.getArc(t,!0,!0)}),r.arcs.select("."+d.chartArcsGaugeUnit).attr("dy",".75em").text(o.gauge_label_show?o.gauge_units:""),r.arcs.select("."+d.chartArcsGaugeMin).attr("dx",-1*(r.innerRadius+(r.radius-r.innerRadius)/(o.gauge_fullCircle?1:2))+"px").attr("dy","1.2em").text(o.gauge_label_show?o.gauge_min:""),r.arcs.select("."+d.chartArcsGaugeMax).attr("dx",r.innerRadius+(r.radius-r.innerRadius)/(o.gauge_fullCircle?1:2)+"px").attr("dy","1.2em").text(o.gauge_label_show?o.gauge_max:""))},l.initGauge=function(){var t=this.arcs;this.hasType("gauge")&&(t.append("path").attr("class",d.chartArcsBackground),t.append("text").attr("class",d.chartArcsGaugeUnit).style("text-anchor","middle").style("pointer-events","none"),t.append("text").attr("class",d.chartArcsGaugeMin).style("text-anchor","middle").style("pointer-events","none"),t.append("text").attr("class",d.chartArcsGaugeMax).style("text-anchor","middle").style("pointer-events","none"))},l.getGaugeLabelHeight=function(){return this.config.gauge_label_show?20:0},l.initRegion=function(){var t=this;t.region=t.main.append("g").attr("clip-path",t.clipPath).attr("class",d.regions)},l.updateRegion=function(t){var e=this,n=e.config;e.region.style("visibility",e.hasArcType()?"hidden":"visible"),e.mainRegion=e.main.select("."+d.regions).selectAll("."+d.region).data(n.regions),e.mainRegion.enter().append("g").append("rect").style("fill-opacity",0),e.mainRegion.attr("class",e.classRegion.bind(e)),e.mainRegion.exit().transition().duration(t).style("opacity",0).remove()},l.redrawRegion=function(t){var e=this,n=e.mainRegion.selectAll("rect").each(function(){var t=e.d3.select(this.parentNode).datum();e.d3.select(this).datum(t)}),i=e.regionX.bind(e),r=e.regionY.bind(e),a=e.regionWidth.bind(e),o=e.regionHeight.bind(e);return[(t?n.transition():n).attr("x",i).attr("y",r).attr("width",a).attr("height",o).style("fill-opacity",function(t){return h(t.opacity)?t.opacity:.1})]},l.regionX=function(t){var e,n=this,i=n.config,r="y"===t.axis?n.y:n.y2;return e="y"===t.axis||"y2"===t.axis?i.axis_rotated&&"start"in t?r(t.start):0:i.axis_rotated?0:"start"in t?n.x(n.isTimeSeries()?n.parseDate(t.start):t.start):0},l.regionY=function(t){var e,n=this,i=n.config,r="y"===t.axis?n.y:n.y2;return e="y"===t.axis||"y2"===t.axis?i.axis_rotated?0:"end"in t?r(t.end):0:i.axis_rotated&&"start"in t?n.x(n.isTimeSeries()?n.parseDate(t.start):t.start):0},l.regionWidth=function(t){var e,n=this,i=n.config,r=n.regionX(t),a="y"===t.axis?n.y:n.y2;return e="y"===t.axis||"y2"===t.axis?i.axis_rotated&&"end"in t?a(t.end):n.width:i.axis_rotated?n.width:"end"in t?n.x(n.isTimeSeries()?n.parseDate(t.end):t.end):n.width,e=0?d.focused:"")},l.classDefocused=function(t){return" "+(this.defocusedTargetIds.indexOf(t.id)>=0?d.defocused:"")},l.classChartText=function(t){return d.chartText+this.classTarget(t.id)},l.classChartLine=function(t){return d.chartLine+this.classTarget(t.id)},l.classChartBar=function(t){return d.chartBar+this.classTarget(t.id)},l.classChartArc=function(t){return d.chartArc+this.classTarget(t.data.id)},l.getTargetSelectorSuffix=function(t){return t||0===t?("-"+t).replace(/[\s?!@#$%^&*()_=+,.<>'":;\[\]\/|~`{}\\]/g,"-"):""},l.selectorTarget=function(t,e){return(e||"")+"."+d.target+this.getTargetSelectorSuffix(t)},l.selectorTargets=function(t,e){var n=this;return t=t||[],t.length?t.map(function(t){return n.selectorTarget(t,e)}):null},l.selectorLegend=function(t){return"."+d.legendItem+this.getTargetSelectorSuffix(t)},l.selectorLegends=function(t){var e=this;return t&&t.length?t.map(function(t){return e.selectorLegend(t)}):null};var h=l.isValue=function(t){return t||0===t},f=l.isFunction=function(t){return"function"==typeof t},p=l.isString=function(t){return"string"==typeof t},g=l.isUndefined=function(t){return"undefined"==typeof t},m=l.isDefined=function(t){return"undefined"!=typeof t},v=l.ceil10=function(t){return 10*Math.ceil(t/10)},y=l.asHalfPixel=function(t){return Math.ceil(t)+.5},x=l.diffDomain=function(t){return t[1]-t[0]},_=l.isEmpty=function(t){return"undefined"==typeof t||null===t||p(t)&&0===t.length||"object"==typeof t&&0===Object.keys(t).length},b=l.notEmpty=function(t){return!l.isEmpty(t)},w=l.getOption=function(t,e,n){return m(t[e])?t[e]:n},S=l.hasValue=function(t,e){var n=!1;return Object.keys(t).forEach(function(i){t[i]===e&&(n=!0)}),n},T=l.sanitise=function(t){return"string"==typeof t?t.replace(//g,">"):t},C=l.getPathBox=function(t){var e=t.getBoundingClientRect(),n=[t.pathSegList.getItem(0),t.pathSegList.getItem(1)],i=n[0].x,r=Math.min(n[0].y,n[1].y);return{x:i,y:r,width:e.width,height:e.height}};s.focus=function(t){var e,n=this.internal;t=n.mapToTargetIds(t),e=n.svg.selectAll(n.selectorTargets(t.filter(n.isTargetToShow,n))),this.revert(),this.defocus(),e.classed(d.focused,!0).classed(d.defocused,!1),n.hasArcType()&&n.expandArc(t),n.toggleFocusLegend(t,!0),n.focusedTargetIds=t,n.defocusedTargetIds=n.defocusedTargetIds.filter(function(e){return t.indexOf(e)<0})},s.defocus=function(t){var e,n=this.internal;t=n.mapToTargetIds(t),e=n.svg.selectAll(n.selectorTargets(t.filter(n.isTargetToShow,n))),e.classed(d.focused,!1).classed(d.defocused,!0),n.hasArcType()&&n.unexpandArc(t),n.toggleFocusLegend(t,!1),n.focusedTargetIds=n.focusedTargetIds.filter(function(e){return t.indexOf(e)<0}),n.defocusedTargetIds=t},s.revert=function(t){var e,n=this.internal;t=n.mapToTargetIds(t),e=n.svg.selectAll(n.selectorTargets(t)),e.classed(d.focused,!1).classed(d.defocused,!1),n.hasArcType()&&n.unexpandArc(t),n.config.legend_show&&(n.showLegend(t.filter(n.isLegendToShow.bind(n))),n.legend.selectAll(n.selectorLegends(t)).filter(function(){return n.d3.select(this).classed(d.legendItemFocused)}).classed(d.legendItemFocused,!1)),n.focusedTargetIds=[],n.defocusedTargetIds=[]},s.show=function(t,e){var n,i=this.internal;t=i.mapToTargetIds(t),e=e||{},i.removeHiddenTargetIds(t),n=i.svg.selectAll(i.selectorTargets(t)),n.transition().style("opacity",1,"important").call(i.endall,function(){n.style("opacity",null).style("opacity",1)}),e.withLegend&&i.showLegend(t),i.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0})},s.hide=function(t,e){var n,i=this.internal;t=i.mapToTargetIds(t),e=e||{},i.addHiddenTargetIds(t),n=i.svg.selectAll(i.selectorTargets(t)),n.transition().style("opacity",0,"important").call(i.endall,function(){n.style("opacity",null).style("opacity",0)}),e.withLegend&&i.hideLegend(t),i.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0})},s.toggle=function(t,e){var n=this,i=this.internal;i.mapToTargetIds(t).forEach(function(t){i.isTargetToShow(t)?n.hide(t,e):n.show(t,e)})},s.zoom=function(t){var e=this.internal;return t&&(e.isTimeSeries()&&(t=t.map(function(t){return e.parseDate(t)})),e.brush.extent(t),e.redraw({withUpdateXDomain:!0,withY:e.config.zoom_rescale}),e.config.zoom_onzoom.call(this,e.x.orgDomain())),e.brush.extent()},s.zoom.enable=function(t){var e=this.internal;e.config.zoom_enabled=t,e.updateAndRedraw()},s.unzoom=function(){var t=this.internal;t.brush.clear().update(),t.redraw({withUpdateXDomain:!0})},s.zoom.max=function(t){var e=this.internal,n=e.config,i=e.d3;return 0===t||t?void(n.zoom_x_max=i.max([e.orgXDomain[1],t])):n.zoom_x_max},s.zoom.min=function(t){var e=this.internal,n=e.config,i=e.d3;return 0===t||t?void(n.zoom_x_min=i.min([e.orgXDomain[0],t])):n.zoom_x_min},s.zoom.range=function(t){return arguments.length?(m(t.max)&&this.domain.max(t.max),void(m(t.min)&&this.domain.min(t.min))):{max:this.domain.max(),min:this.domain.min()}},s.load=function(t){var e=this.internal,n=e.config;return t.xs&&e.addXs(t.xs),"names"in t&&s.data.names.bind(this)(t.names),"classes"in t&&Object.keys(t.classes).forEach(function(e){n.data_classes[e]=t.classes[e]}),"categories"in t&&e.isCategorized()&&(n.axis_x_categories=t.categories),"axes"in t&&Object.keys(t.axes).forEach(function(e){n.data_axes[e]=t.axes[e]}),"colors"in t&&Object.keys(t.colors).forEach(function(e){n.data_colors[e]=t.colors[e]}),"cacheIds"in t&&e.hasCaches(t.cacheIds)?void e.load(e.getCaches(t.cacheIds),t.done):void("unload"in t?e.unload(e.mapToTargetIds("boolean"==typeof t.unload&&t.unload?null:t.unload),function(){e.loadFromArgs(t)}):e.loadFromArgs(t))},s.unload=function(t){var e=this.internal;t=t||{},t instanceof Array?t={ids:t}:"string"==typeof t&&(t={ids:[t]}),e.unload(e.mapToTargetIds(t.ids),function(){e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0}),t.done&&t.done()})},s.flow=function(t){var e,n,i,r,a,o,s,l,u=this.internal,c=[],d=u.getMaxDataCount(),f=0,p=0;if(t.json)n=u.convertJsonToData(t.json,t.keys);else if(t.rows)n=u.convertRowsToData(t.rows);else{if(!t.columns)return;n=u.convertColumnsToData(t.columns)}e=u.convertDataToTargets(n,!0),u.data.targets.forEach(function(t){var n,i,r=!1;for(n=0;n1?a.values[a.values.length-1].x-o.x:o.x-u.getXDomain(u.data.targets)[0]:1,r=[o.x-s,o.x],u.updateXDomain(null,!0,!0,!1,r)),u.updateTargets(u.data.targets),u.redraw({flow:{index:o.index,length:f,duration:h(t.duration)?t.duration:u.config.transition_duration,done:t.done,orgDataCount:d},withLegend:!0,withTransition:d>1,withTrimXDomain:!1,withUpdateXAxis:!0})},l.generateFlow=function(t){ -var e=this,n=e.config,i=e.d3;return function(){var r,a,o,s=t.targets,l=t.flow,u=t.drawBar,c=t.drawLine,h=t.drawArea,f=t.cx,p=t.cy,g=t.xv,m=t.xForText,v=t.yForText,y=t.duration,_=1,b=l.index,w=l.length,S=e.getValueOnIndex(e.data.targets[0].values,b),T=e.getValueOnIndex(e.data.targets[0].values,b+w),C=e.x.domain(),A=l.duration||y,k=l.done||function(){},P=e.generateWait(),M=e.xgrid||i.selectAll([]),E=e.xgridLines||i.selectAll([]),D=e.mainRegion||i.selectAll([]),O=e.mainText||i.selectAll([]),L=e.mainBar||i.selectAll([]),I=e.mainLine||i.selectAll([]),N=e.mainArea||i.selectAll([]),R=e.mainCircle||i.selectAll([]);e.flowing=!0,e.data.targets.forEach(function(t){t.values.splice(0,w)}),o=e.updateXDomain(s,!0,!0),e.updateXGrid&&e.updateXGrid(!0),l.orgDataCount?r=1===l.orgDataCount||(S&&S.x)===(T&&T.x)?e.x(C[0])-e.x(o[0]):e.isTimeSeries()?e.x(C[0])-e.x(o[0]):e.x(S.x)-e.x(T.x):1!==e.data.targets[0].values.length?r=e.x(C[0])-e.x(o[0]):e.isTimeSeries()?(S=e.getValueOnIndex(e.data.targets[0].values,0),T=e.getValueOnIndex(e.data.targets[0].values,e.data.targets[0].values.length-1),r=e.x(S.x)-e.x(T.x)):r=x(o)/2,_=x(C)/x(o),a="translate("+r+",0) scale("+_+",1)",e.hideXGridFocus(),i.transition().ease("linear").duration(A).each(function(){P.add(e.axes.x.transition().call(e.xAxis)),P.add(L.transition().attr("transform",a)),P.add(I.transition().attr("transform",a)),P.add(N.transition().attr("transform",a)),P.add(R.transition().attr("transform",a)),P.add(O.transition().attr("transform",a)),P.add(D.filter(e.isRegionOnX).transition().attr("transform",a)),P.add(M.transition().attr("transform",a)),P.add(E.transition().attr("transform",a))}).call(P,function(){var t,i=[],r=[],a=[];if(w){for(t=0;t=0,f=!e||e.indexOf(s)>=0,p=l.classed(d.SELECTED);l.classed(d.line)||l.classed(d.area)||(h&&f?a.data_selection_isselectable(o)&&!p&&c(!0,l.classed(d.SELECTED,!0),o,s):m(n)&&n&&p&&c(!1,l.classed(d.SELECTED,!1),o,s))})},s.unselect=function(t,e){var n=this.internal,i=n.d3,r=n.config;r.data_selection_enabled&&n.main.selectAll("."+d.shapes).selectAll("."+d.shape).each(function(a,o){var s=i.select(this),l=a.data?a.data.id:a.id,u=n.getToggle(this,a).bind(n),c=r.data_selection_grouped||!t||t.indexOf(l)>=0,h=!e||e.indexOf(o)>=0,f=s.classed(d.SELECTED);s.classed(d.line)||s.classed(d.area)||c&&h&&r.data_selection_isselectable(a)&&f&&u(!1,s.classed(d.SELECTED,!1),a,o)})},s.transform=function(t,e){var n=this.internal,i=["pie","donut"].indexOf(t)>=0?{withTransform:!0}:null;n.transformTo(e,t,i)},l.transformTo=function(t,e,n){var i=this,r=!i.hasArcType(),a=n||{withTransitionForAxis:r};a.withTransitionForTransform=!1,i.transiting=!1,i.setTargetType(t,e),i.updateTargets(i.data.targets),i.updateAndRedraw(a)},s.groups=function(t){var e=this.internal,n=e.config;return g(t)?n.data_groups:(n.data_groups=t,e.redraw(),n.data_groups)},s.xgrids=function(t){var e=this.internal,n=e.config;return t?(n.grid_x_lines=t,e.redrawWithoutRescale(),n.grid_x_lines):n.grid_x_lines},s.xgrids.add=function(t){var e=this.internal;return this.xgrids(e.config.grid_x_lines.concat(t?t:[]))},s.xgrids.remove=function(t){var e=this.internal;e.removeGridLines(t,!0)},s.ygrids=function(t){var e=this.internal,n=e.config;return t?(n.grid_y_lines=t,e.redrawWithoutRescale(),n.grid_y_lines):n.grid_y_lines},s.ygrids.add=function(t){var e=this.internal;return this.ygrids(e.config.grid_y_lines.concat(t?t:[]))},s.ygrids.remove=function(t){var e=this.internal;e.removeGridLines(t,!1)},s.regions=function(t){var e=this.internal,n=e.config;return t?(n.regions=t,e.redrawWithoutRescale(),n.regions):n.regions},s.regions.add=function(t){var e=this.internal,n=e.config;return t?(n.regions=n.regions.concat(t),e.redrawWithoutRescale(),n.regions):n.regions},s.regions.remove=function(t){var e,n,i,r=this.internal,a=r.config;return t=t||{},e=r.getOption(t,"duration",a.transition_duration),n=r.getOption(t,"classes",[d.region]),i=r.main.select("."+d.regions).selectAll(n.map(function(t){return"."+t})),(e?i.transition().duration(e):i).style("opacity",0).remove(),a.regions=a.regions.filter(function(t){var e=!1;return!t["class"]||(t["class"].split(" ").forEach(function(t){n.indexOf(t)>=0&&(e=!0)}),!e)}),a.regions},s.data=function(t){var e=this.internal.data.targets;return"undefined"==typeof t?e:e.filter(function(e){return[].concat(t).indexOf(e.id)>=0})},s.data.shown=function(t){return this.internal.filterTargetsToShow(this.data(t))},s.data.values=function(t){var e,n=null;return t&&(e=this.data(t),n=e[0]?e[0].values.map(function(t){return t.value}):null),n},s.data.names=function(t){return this.internal.clearLegendItemTextBoxCache(),this.internal.updateDataAttributes("names",t)},s.data.colors=function(t){return this.internal.updateDataAttributes("colors",t)},s.data.axes=function(t){return this.internal.updateDataAttributes("axes",t)},s.category=function(t,e){var n=this.internal,i=n.config;return arguments.length>1&&(i.axis_x_categories[t]=e,n.redraw()),i.axis_x_categories[t]},s.categories=function(t){var e=this.internal,n=e.config;return arguments.length?(n.axis_x_categories=t,e.redraw(),n.axis_x_categories):n.axis_x_categories},s.color=function(t){var e=this.internal;return e.color(t)},s.x=function(t){var e=this.internal;return arguments.length&&(e.updateTargetX(e.data.targets,t),e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})),e.data.xs},s.xs=function(t){var e=this.internal;return arguments.length&&(e.updateTargetXs(e.data.targets,t),e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})),e.data.xs},s.axis=function(){},s.axis.labels=function(t){var e=this.internal;arguments.length&&(Object.keys(t).forEach(function(n){e.axis.setLabelText(n,t[n])}),e.axis.updateLabels())},s.axis.max=function(t){var e=this.internal,n=e.config;return arguments.length?("object"==typeof t?(h(t.x)&&(n.axis_x_max=t.x),h(t.y)&&(n.axis_y_max=t.y),h(t.y2)&&(n.axis_y2_max=t.y2)):n.axis_y_max=n.axis_y2_max=t,void e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})):{x:n.axis_x_max,y:n.axis_y_max,y2:n.axis_y2_max}},s.axis.min=function(t){var e=this.internal,n=e.config;return arguments.length?("object"==typeof t?(h(t.x)&&(n.axis_x_min=t.x),h(t.y)&&(n.axis_y_min=t.y),h(t.y2)&&(n.axis_y2_min=t.y2)):n.axis_y_min=n.axis_y2_min=t,void e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})):{x:n.axis_x_min,y:n.axis_y_min,y2:n.axis_y2_min}},s.axis.range=function(t){return arguments.length?(m(t.max)&&this.axis.max(t.max),void(m(t.min)&&this.axis.min(t.min))):{max:this.axis.max(),min:this.axis.min()}},s.legend=function(){},s.legend.show=function(t){var e=this.internal;e.showLegend(e.mapToTargetIds(t)),e.updateAndRedraw({withLegend:!0})},s.legend.hide=function(t){var e=this.internal;e.hideLegend(e.mapToTargetIds(t)),e.updateAndRedraw({withLegend:!0})},s.resize=function(t){var e=this.internal,n=e.config;n.size_width=t?t.width:null,n.size_height=t?t.height:null,this.flush()},s.flush=function(){var t=this.internal;t.updateAndRedraw({withLegend:!0,withTransition:!1,withTransitionForTransform:!1})},s.destroy=function(){var e=this.internal;if(t.clearInterval(e.intervalForObserveInserted),void 0!==e.resizeTimeout&&t.clearTimeout(e.resizeTimeout),t.detachEvent)t.detachEvent("onresize",e.resizeFunction);else if(t.removeEventListener)t.removeEventListener("resize",e.resizeFunction);else{var n=t.onresize;n&&n.add&&n.remove&&n.remove(e.resizeFunction)}return e.selectChart.classed("c3",!1).html(""),Object.keys(e).forEach(function(t){e[t]=null}),null},s.tooltip=function(){},s.tooltip.show=function(t){var e,n,i=this.internal;t.mouse&&(n=t.mouse),t.data?i.isMultipleX()?(n=[i.x(t.data.x),i.getYScale(t.data.id)(t.data.value)],e=null):e=h(t.data.index)?t.data.index:i.getIndexByX(t.data.x):"undefined"!=typeof t.x?e=i.getIndexByX(t.x):"undefined"!=typeof t.index&&(e=t.index),i.dispatchEvent("mouseover",e,n),i.dispatchEvent("mousemove",e,n),i.config.tooltip_onshow.call(i,t.data)},s.tooltip.hide=function(){this.internal.dispatchEvent("mouseout",0),this.internal.config.tooltip_onhide.call(this)};var A;l.isSafari=function(){var e=t.navigator.userAgent;return e.indexOf("Safari")>=0&&e.indexOf("Chrome")<0},l.isChrome=function(){var e=t.navigator.userAgent;return e.indexOf("Chrome")>=0},Function.prototype.bind||(Function.prototype.bind=function(t){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var e=Array.prototype.slice.call(arguments,1),n=this,i=function(){},r=function(){return n.apply(this instanceof i?this:t,e.concat(Array.prototype.slice.call(arguments)))};return i.prototype=this.prototype,r.prototype=new i,r}),function(){"SVGPathSeg"in t||(t.SVGPathSeg=function(t,e,n){this.pathSegType=t,this.pathSegTypeAsLetter=e,this._owningPathSegList=n},SVGPathSeg.PATHSEG_UNKNOWN=0,SVGPathSeg.PATHSEG_CLOSEPATH=1,SVGPathSeg.PATHSEG_MOVETO_ABS=2,SVGPathSeg.PATHSEG_MOVETO_REL=3,SVGPathSeg.PATHSEG_LINETO_ABS=4,SVGPathSeg.PATHSEG_LINETO_REL=5,SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS=6,SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL=7,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS=8,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL=9,SVGPathSeg.PATHSEG_ARC_ABS=10,SVGPathSeg.PATHSEG_ARC_REL=11,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS=12,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL=13,SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS=14,SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL=15,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS=16,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL=17,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS=18,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL=19,SVGPathSeg.prototype._segmentChanged=function(){this._owningPathSegList&&this._owningPathSegList.segmentChanged(this)},t.SVGPathSegClosePath=function(t){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CLOSEPATH,"z",t)},SVGPathSegClosePath.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegClosePath.prototype.toString=function(){return"[object SVGPathSegClosePath]"},SVGPathSegClosePath.prototype._asPathString=function(){return this.pathSegTypeAsLetter},SVGPathSegClosePath.prototype.clone=function(){return new SVGPathSegClosePath((void 0))},t.SVGPathSegMovetoAbs=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_MOVETO_ABS,"M",t),this._x=e,this._y=n},SVGPathSegMovetoAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegMovetoAbs.prototype.toString=function(){return"[object SVGPathSegMovetoAbs]"},SVGPathSegMovetoAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegMovetoAbs.prototype.clone=function(){return new SVGPathSegMovetoAbs((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegMovetoAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegMovetoAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegMovetoRel=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_MOVETO_REL,"m",t),this._x=e,this._y=n},SVGPathSegMovetoRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegMovetoRel.prototype.toString=function(){return"[object SVGPathSegMovetoRel]"},SVGPathSegMovetoRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegMovetoRel.prototype.clone=function(){return new SVGPathSegMovetoRel((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegMovetoRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegMovetoRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoAbs=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_ABS,"L",t),this._x=e,this._y=n},SVGPathSegLinetoAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoAbs.prototype.toString=function(){return"[object SVGPathSegLinetoAbs]"},SVGPathSegLinetoAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegLinetoAbs.prototype.clone=function(){return new SVGPathSegLinetoAbs((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegLinetoAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegLinetoAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoRel=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_REL,"l",t),this._x=e,this._y=n},SVGPathSegLinetoRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoRel.prototype.toString=function(){return"[object SVGPathSegLinetoRel]"},SVGPathSegLinetoRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegLinetoRel.prototype.clone=function(){return new SVGPathSegLinetoRel((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegLinetoRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegLinetoRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoCubicAbs=function(t,e,n,i,r,a,o){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS,"C",t),this._x=e,this._y=n,this._x1=i,this._y1=r,this._x2=a,this._y2=o},SVGPathSegCurvetoCubicAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicAbs]"},SVGPathSegCurvetoCubicAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicAbs.prototype.clone=function(){return new SVGPathSegCurvetoCubicAbs((void 0),this._x,this._y,this._x1,this._y1,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"x1",{get:function(){return this._x1},set:function(t){this._x1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"y1",{get:function(){return this._y1},set:function(t){this._y1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"x2",{get:function(){return this._x2},set:function(t){this._x2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype,"y2",{get:function(){return this._y2},set:function(t){this._y2=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoCubicRel=function(t,e,n,i,r,a,o){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL,"c",t),this._x=e,this._y=n,this._x1=i,this._y1=r,this._x2=a,this._y2=o},SVGPathSegCurvetoCubicRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicRel.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicRel]"},SVGPathSegCurvetoCubicRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicRel.prototype.clone=function(){return new SVGPathSegCurvetoCubicRel((void 0),this._x,this._y,this._x1,this._y1,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"x1",{get:function(){return this._x1},set:function(t){this._x1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"y1",{get:function(){return this._y1},set:function(t){this._y1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"x2",{get:function(){return this._x2},set:function(t){this._x2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype,"y2",{get:function(){return this._y2},set:function(t){this._y2=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoQuadraticAbs=function(t,e,n,i,r){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS,"Q",t),this._x=e,this._y=n,this._x1=i,this._y1=r},SVGPathSegCurvetoQuadraticAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticAbs]"},SVGPathSegCurvetoQuadraticAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticAbs.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticAbs((void 0),this._x,this._y,this._x1,this._y1)},Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"x1",{get:function(){return this._x1},set:function(t){this._x1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype,"y1",{get:function(){return this._y1},set:function(t){this._y1=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoQuadraticRel=function(t,e,n,i,r){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL,"q",t),this._x=e,this._y=n,this._x1=i,this._y1=r},SVGPathSegCurvetoQuadraticRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticRel.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticRel]"},SVGPathSegCurvetoQuadraticRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x1+" "+this._y1+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticRel.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticRel((void 0),this._x,this._y,this._x1,this._y1)},Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"x1",{get:function(){return this._x1},set:function(t){this._x1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype,"y1",{get:function(){return this._y1},set:function(t){this._y1=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegArcAbs=function(t,e,n,i,r,a,o,s){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_ARC_ABS,"A",t),this._x=e,this._y=n,this._r1=i,this._r2=r,this._angle=a,this._largeArcFlag=o,this._sweepFlag=s},SVGPathSegArcAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegArcAbs.prototype.toString=function(){return"[object SVGPathSegArcAbs]"},SVGPathSegArcAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._r1+" "+this._r2+" "+this._angle+" "+(this._largeArcFlag?"1":"0")+" "+(this._sweepFlag?"1":"0")+" "+this._x+" "+this._y},SVGPathSegArcAbs.prototype.clone=function(){return new SVGPathSegArcAbs((void 0),this._x,this._y,this._r1,this._r2,this._angle,this._largeArcFlag,this._sweepFlag)},Object.defineProperty(SVGPathSegArcAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"r1",{get:function(){return this._r1},set:function(t){this._r1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"r2",{get:function(){return this._r2},set:function(t){this._r2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"angle",{get:function(){return this._angle},set:function(t){this._angle=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"largeArcFlag",{get:function(){return this._largeArcFlag},set:function(t){this._largeArcFlag=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcAbs.prototype,"sweepFlag",{get:function(){return this._sweepFlag},set:function(t){this._sweepFlag=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegArcRel=function(t,e,n,i,r,a,o,s){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_ARC_REL,"a",t),this._x=e,this._y=n,this._r1=i,this._r2=r,this._angle=a,this._largeArcFlag=o,this._sweepFlag=s},SVGPathSegArcRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegArcRel.prototype.toString=function(){return"[object SVGPathSegArcRel]"},SVGPathSegArcRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._r1+" "+this._r2+" "+this._angle+" "+(this._largeArcFlag?"1":"0")+" "+(this._sweepFlag?"1":"0")+" "+this._x+" "+this._y},SVGPathSegArcRel.prototype.clone=function(){return new SVGPathSegArcRel((void 0),this._x,this._y,this._r1,this._r2,this._angle,this._largeArcFlag,this._sweepFlag)},Object.defineProperty(SVGPathSegArcRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"r1",{get:function(){return this._r1},set:function(t){this._r1=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"r2",{get:function(){return this._r2},set:function(t){this._r2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"angle",{get:function(){return this._angle},set:function(t){this._angle=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"largeArcFlag",{get:function(){return this._largeArcFlag},set:function(t){this._largeArcFlag=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegArcRel.prototype,"sweepFlag",{get:function(){return this._sweepFlag},set:function(t){this._sweepFlag=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoHorizontalAbs=function(t,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS,"H",t),this._x=e},SVGPathSegLinetoHorizontalAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoHorizontalAbs.prototype.toString=function(){return"[object SVGPathSegLinetoHorizontalAbs]"},SVGPathSegLinetoHorizontalAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x},SVGPathSegLinetoHorizontalAbs.prototype.clone=function(){return new SVGPathSegLinetoHorizontalAbs((void 0),this._x)},Object.defineProperty(SVGPathSegLinetoHorizontalAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoHorizontalRel=function(t,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL,"h",t),this._x=e},SVGPathSegLinetoHorizontalRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoHorizontalRel.prototype.toString=function(){return"[object SVGPathSegLinetoHorizontalRel]"},SVGPathSegLinetoHorizontalRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x},SVGPathSegLinetoHorizontalRel.prototype.clone=function(){return new SVGPathSegLinetoHorizontalRel((void 0),this._x)},Object.defineProperty(SVGPathSegLinetoHorizontalRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoVerticalAbs=function(t,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS,"V",t),this._y=e},SVGPathSegLinetoVerticalAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoVerticalAbs.prototype.toString=function(){return"[object SVGPathSegLinetoVerticalAbs]"},SVGPathSegLinetoVerticalAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._y},SVGPathSegLinetoVerticalAbs.prototype.clone=function(){return new SVGPathSegLinetoVerticalAbs((void 0),this._y)},Object.defineProperty(SVGPathSegLinetoVerticalAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegLinetoVerticalRel=function(t,e){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL,"v",t),this._y=e},SVGPathSegLinetoVerticalRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegLinetoVerticalRel.prototype.toString=function(){return"[object SVGPathSegLinetoVerticalRel]"},SVGPathSegLinetoVerticalRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._y},SVGPathSegLinetoVerticalRel.prototype.clone=function(){return new SVGPathSegLinetoVerticalRel((void 0),this._y)},Object.defineProperty(SVGPathSegLinetoVerticalRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoCubicSmoothAbs=function(t,e,n,i,r){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS,"S",t),this._x=e,this._y=n,this._x2=i,this._y2=r},SVGPathSegCurvetoCubicSmoothAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicSmoothAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicSmoothAbs]"},SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicSmoothAbs.prototype.clone=function(){return new SVGPathSegCurvetoCubicSmoothAbs((void 0),this._x,this._y,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"x2",{get:function(){return this._x2},set:function(t){this._x2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype,"y2",{get:function(){return this._y2},set:function(t){this._y2=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoCubicSmoothRel=function(t,e,n,i,r){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL,"s",t),this._x=e,this._y=n,this._x2=i,this._y2=r},SVGPathSegCurvetoCubicSmoothRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoCubicSmoothRel.prototype.toString=function(){return"[object SVGPathSegCurvetoCubicSmoothRel]"},SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x2+" "+this._y2+" "+this._x+" "+this._y},SVGPathSegCurvetoCubicSmoothRel.prototype.clone=function(){return new SVGPathSegCurvetoCubicSmoothRel((void 0),this._x,this._y,this._x2,this._y2)},Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"x2",{get:function(){return this._x2},set:function(t){this._x2=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype,"y2",{get:function(){return this._y2},set:function(t){this._y2=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoQuadraticSmoothAbs=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS,"T",t),this._x=e,this._y=n},SVGPathSegCurvetoQuadraticSmoothAbs.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticSmoothAbs]"},SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticSmoothAbs((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothAbs.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothAbs.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),t.SVGPathSegCurvetoQuadraticSmoothRel=function(t,e,n){SVGPathSeg.call(this,SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL,"t",t),this._x=e,this._y=n},SVGPathSegCurvetoQuadraticSmoothRel.prototype=Object.create(SVGPathSeg.prototype),SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString=function(){return"[object SVGPathSegCurvetoQuadraticSmoothRel]"},SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString=function(){return this.pathSegTypeAsLetter+" "+this._x+" "+this._y},SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone=function(){return new SVGPathSegCurvetoQuadraticSmoothRel((void 0),this._x,this._y)},Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothRel.prototype,"x",{get:function(){return this._x},set:function(t){this._x=t,this._segmentChanged()},enumerable:!0}),Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothRel.prototype,"y",{get:function(){return this._y},set:function(t){this._y=t,this._segmentChanged()},enumerable:!0}),SVGPathElement.prototype.createSVGPathSegClosePath=function(){return new SVGPathSegClosePath((void 0))},SVGPathElement.prototype.createSVGPathSegMovetoAbs=function(t,e){return new SVGPathSegMovetoAbs((void 0),t,e)},SVGPathElement.prototype.createSVGPathSegMovetoRel=function(t,e){return new SVGPathSegMovetoRel((void 0),t,e); -},SVGPathElement.prototype.createSVGPathSegLinetoAbs=function(t,e){return new SVGPathSegLinetoAbs((void 0),t,e)},SVGPathElement.prototype.createSVGPathSegLinetoRel=function(t,e){return new SVGPathSegLinetoRel((void 0),t,e)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs=function(t,e,n,i,r,a){return new SVGPathSegCurvetoCubicAbs((void 0),t,e,n,i,r,a)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel=function(t,e,n,i,r,a){return new SVGPathSegCurvetoCubicRel((void 0),t,e,n,i,r,a)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs=function(t,e,n,i){return new SVGPathSegCurvetoQuadraticAbs((void 0),t,e,n,i)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel=function(t,e,n,i){return new SVGPathSegCurvetoQuadraticRel((void 0),t,e,n,i)},SVGPathElement.prototype.createSVGPathSegArcAbs=function(t,e,n,i,r,a,o){return new SVGPathSegArcAbs((void 0),t,e,n,i,r,a,o)},SVGPathElement.prototype.createSVGPathSegArcRel=function(t,e,n,i,r,a,o){return new SVGPathSegArcRel((void 0),t,e,n,i,r,a,o)},SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs=function(t){return new SVGPathSegLinetoHorizontalAbs((void 0),t)},SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel=function(t){return new SVGPathSegLinetoHorizontalRel((void 0),t)},SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs=function(t){return new SVGPathSegLinetoVerticalAbs((void 0),t)},SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel=function(t){return new SVGPathSegLinetoVerticalRel((void 0),t)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs=function(t,e,n,i){return new SVGPathSegCurvetoCubicSmoothAbs((void 0),t,e,n,i)},SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel=function(t,e,n,i){return new SVGPathSegCurvetoCubicSmoothRel((void 0),t,e,n,i)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs=function(t,e){return new SVGPathSegCurvetoQuadraticSmoothAbs((void 0),t,e)},SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel=function(t,e){return new SVGPathSegCurvetoQuadraticSmoothRel((void 0),t,e)}),"SVGPathSegList"in t||(t.SVGPathSegList=function(t){this._pathElement=t,this._list=this._parsePath(this._pathElement.getAttribute("d")),this._mutationObserverConfig={attributes:!0,attributeFilter:["d"]},this._pathElementMutationObserver=new MutationObserver(this._updateListFromPathMutations.bind(this)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)},Object.defineProperty(SVGPathSegList.prototype,"numberOfItems",{get:function(){return this._checkPathSynchronizedToList(),this._list.length},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"pathSegList",{get:function(){return this._pathSegList||(this._pathSegList=new SVGPathSegList(this)),this._pathSegList},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"normalizedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"animatedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),Object.defineProperty(SVGPathElement.prototype,"animatedNormalizedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),SVGPathSegList.prototype._checkPathSynchronizedToList=function(){this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords())},SVGPathSegList.prototype._updateListFromPathMutations=function(t){if(this._pathElement){var e=!1;t.forEach(function(t){"d"==t.attributeName&&(e=!0)}),e&&(this._list=this._parsePath(this._pathElement.getAttribute("d")))}},SVGPathSegList.prototype._writeListToPath=function(){this._pathElementMutationObserver.disconnect(),this._pathElement.setAttribute("d",SVGPathSegList._pathSegArrayAsString(this._list)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)},SVGPathSegList.prototype.segmentChanged=function(t){this._writeListToPath()},SVGPathSegList.prototype.clear=function(){this._checkPathSynchronizedToList(),this._list.forEach(function(t){t._owningPathSegList=null}),this._list=[],this._writeListToPath()},SVGPathSegList.prototype.initialize=function(t){return this._checkPathSynchronizedToList(),this._list=[t],t._owningPathSegList=this,this._writeListToPath(),t},SVGPathSegList.prototype._checkValidIndex=function(t){if(isNaN(t)||t<0||t>=this.numberOfItems)throw"INDEX_SIZE_ERR"},SVGPathSegList.prototype.getItem=function(t){return this._checkPathSynchronizedToList(),this._checkValidIndex(t),this._list[t]},SVGPathSegList.prototype.insertItemBefore=function(t,e){return this._checkPathSynchronizedToList(),e>this.numberOfItems&&(e=this.numberOfItems),t._owningPathSegList&&(t=t.clone()),this._list.splice(e,0,t),t._owningPathSegList=this,this._writeListToPath(),t},SVGPathSegList.prototype.replaceItem=function(t,e){return this._checkPathSynchronizedToList(),t._owningPathSegList&&(t=t.clone()),this._checkValidIndex(e),this._list[e]=t,t._owningPathSegList=this,this._writeListToPath(),t},SVGPathSegList.prototype.removeItem=function(t){this._checkPathSynchronizedToList(),this._checkValidIndex(t);var e=this._list[t];return this._list.splice(t,1),this._writeListToPath(),e},SVGPathSegList.prototype.appendItem=function(t){return this._checkPathSynchronizedToList(),t._owningPathSegList&&(t=t.clone()),this._list.push(t),t._owningPathSegList=this,this._writeListToPath(),t},SVGPathSegList._pathSegArrayAsString=function(t){var e="",n=!0;return t.forEach(function(t){n?(n=!1,e+=t._asPathString()):e+=" "+t._asPathString()}),e},SVGPathSegList.prototype._parsePath=function(t){if(!t||0==t.length)return[];var e=this,n=function(){this.pathSegList=[]};n.prototype.appendSegment=function(t){this.pathSegList.push(t)};var i=function(t){this._string=t,this._currentIndex=0,this._endIndex=this._string.length,this._previousCommand=SVGPathSeg.PATHSEG_UNKNOWN,this._skipOptionalSpaces()};i.prototype._isCurrentSpace=function(){var t=this._string[this._currentIndex];return t<=" "&&(" "==t||"\n"==t||"\t"==t||"\r"==t||"\f"==t)},i.prototype._skipOptionalSpaces=function(){for(;this._currentIndex="0"&&t<="9")&&e!=SVGPathSeg.PATHSEG_CLOSEPATH?e==SVGPathSeg.PATHSEG_MOVETO_ABS?SVGPathSeg.PATHSEG_LINETO_ABS:e==SVGPathSeg.PATHSEG_MOVETO_REL?SVGPathSeg.PATHSEG_LINETO_REL:e:SVGPathSeg.PATHSEG_UNKNOWN},i.prototype.initialCommandIsMoveTo=function(){if(!this.hasMoreData())return!0;var t=this.peekSegmentType();return t==SVGPathSeg.PATHSEG_MOVETO_ABS||t==SVGPathSeg.PATHSEG_MOVETO_REL},i.prototype._parseNumber=function(){var t=0,e=0,n=1,i=0,r=1,a=1,o=this._currentIndex;if(this._skipOptionalSpaces(),this._currentIndex"9")&&"."!=this._string.charAt(this._currentIndex))){for(var s=this._currentIndex;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)this._currentIndex++;if(this._currentIndex!=s)for(var l=this._currentIndex-1,u=1;l>=s;)e+=u*(this._string.charAt(l--)-"0"),u*=10;if(this._currentIndex=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)i+=(this._string.charAt(this._currentIndex++)-"0")*(n*=.1)}if(this._currentIndex!=o&&this._currentIndex+1=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)t*=10,t+=this._string.charAt(this._currentIndex)-"0",this._currentIndex++}var c=e+i;if(c*=r,t&&(c*=Math.pow(10,a*t)),o!=this._currentIndex)return this._skipOptionalSpacesOrDelimiter(),c}},i.prototype._parseArcFlag=function(){if(!(this._currentIndex>=this._endIndex)){var t=!1,e=this._string.charAt(this._currentIndex++);if("0"==e)t=!1;else{if("1"!=e)return;t=!0}return this._skipOptionalSpacesOrDelimiter(),t}},i.prototype.parseSegment=function(){var t=this._string[this._currentIndex],n=this._pathSegTypeFromChar(t);if(n==SVGPathSeg.PATHSEG_UNKNOWN){if(this._previousCommand==SVGPathSeg.PATHSEG_UNKNOWN)return null;if(n=this._nextCommandHelper(t,this._previousCommand),n==SVGPathSeg.PATHSEG_UNKNOWN)return null}else this._currentIndex++;switch(this._previousCommand=n,n){case SVGPathSeg.PATHSEG_MOVETO_REL:return new SVGPathSegMovetoRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_MOVETO_ABS:return new SVGPathSegMovetoAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_REL:return new SVGPathSegLinetoRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_ABS:return new SVGPathSegLinetoAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:return new SVGPathSegLinetoHorizontalRel(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:return new SVGPathSegLinetoHorizontalAbs(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:return new SVGPathSegLinetoVerticalRel(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:return new SVGPathSegLinetoVerticalAbs(e,this._parseNumber());case SVGPathSeg.PATHSEG_CLOSEPATH:return this._skipOptionalSpaces(),new SVGPathSegClosePath(e);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:var i={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicRel(e,i.x,i.y,i.x1,i.y1,i.x2,i.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:var i={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicAbs(e,i.x,i.y,i.x1,i.y1,i.x2,i.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:var i={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicSmoothRel(e,i.x,i.y,i.x2,i.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:var i={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicSmoothAbs(e,i.x,i.y,i.x2,i.y2);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:var i={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoQuadraticRel(e,i.x,i.y,i.x1,i.y1);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:var i={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoQuadraticAbs(e,i.x,i.y,i.x1,i.y1);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:return new SVGPathSegCurvetoQuadraticSmoothRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:return new SVGPathSegCurvetoQuadraticSmoothAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_ARC_REL:var i={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegArcRel(e,i.x,i.y,i.x1,i.y1,i.arcAngle,i.arcLarge,i.arcSweep);case SVGPathSeg.PATHSEG_ARC_ABS:var i={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegArcAbs(e,i.x,i.y,i.x1,i.y1,i.arcAngle,i.arcLarge,i.arcSweep);default:throw"Unknown path seg type."}};var r=new n,a=new i(t);if(!a.initialCommandIsMoveTo())return[];for(;a.hasMoreData();){var o=a.parseSegment();if(!o)return[];r.appendSegment(o)}return r.pathSegList})}(),"function"==typeof define&&define.amd?define("c3",["d3"],function(){return c}):"undefined"!=typeof exports&&"undefined"!=typeof module?module.exports=c:t.c3=c}(window),function(t,e){"function"==typeof define&&define.amd?define("sifter",e):"object"==typeof exports?module.exports=e():t.Sifter=e()}(this,function(){var t=function(t,e){this.items=t,this.settings=e||{diacritics:!0}};t.prototype.tokenize=function(t){if(t=i(String(t||"").toLowerCase()),!t||!t.length)return[];var e,n,a,s,l=[],u=t.split(/ +/);for(e=0,n=u.length;e0)&&i.items.push({score:n,id:r})}):o.iterator(o.items,function(t,e){i.items.push({score:1,id:e})}),r=o.getSortFunction(i,e),r&&i.items.sort(r),i.total=i.items.length,"number"==typeof e.limit&&(i.items=i.items.slice(0,e.limit)),i};var e=function(t,e){return"number"==typeof t&&"number"==typeof e?t>e?1:te?1:e>t?-1:0)},n=function(t,e){var n,i,r,a;for(n=1,i=arguments.length;n=0&&t.data.length>0){var a=t.data.match(n),o=document.createElement("span");o.className="highlight";var s=t.splitText(r),l=(s.splitText(a[0].length),s.cloneNode(!0));o.appendChild(l),s.parentNode.replaceChild(o,s),e=1}}else if(1===t.nodeType&&t.childNodes&&!/(script|style)/i.test(t.tagName))for(var u=0;u/g,">").replace(/"/g,""")},k=function(t){return(t+"").replace(/\$/g,"$$$$")},P={};P.before=function(t,e,n){var i=t[e];t[e]=function(){return n.apply(t,arguments),i.apply(t,arguments)}},P.after=function(t,e,n){var i=t[e];t[e]=function(){var e=i.apply(t,arguments);return n.apply(t,arguments),e}};var M=function(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}},E=function(t,e){var n;return function(){var i=this,r=arguments;window.clearTimeout(n),n=window.setTimeout(function(){t.apply(i,r)},e)}},D=function(t,e,n){var i,r=t.trigger,a={};t.trigger=function(){var n=arguments[0];return e.indexOf(n)===-1?r.apply(t,arguments):void(a[n]=arguments)},n.apply(t,[]),t.trigger=r;for(i in a)a.hasOwnProperty(i)&&r.apply(t,a[i])},O=function(t,e,n,i){t.on(e,n,function(e){for(var n=e.target;n&&n.parentNode!==t[0];)n=n.parentNode;return e.currentTarget=n,i.apply(this,[e])})},L=function(t){var e={};if("selectionStart"in t)e.start=t.selectionStart,e.length=t.selectionEnd-e.start;else if(document.selection){t.focus();var n=document.selection.createRange(),i=document.selection.createRange().text.length;n.moveStart("character",-t.value.length),e.start=n.text.length-i,e.length=i}return e},I=function(t,e,n){var i,r,a={};if(n)for(i=0,r=n.length;i").css({position:"absolute",top:-99999,left:-99999,width:"auto",padding:0,whiteSpace:"pre"}).text(e).appendTo("body");I(n,i,["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"]);var r=i.width();return i.remove(),r},R=function(t){var e=null,n=function(n,i){var r,a,o,s,l,u,c,d;n=n||window.event||{},i=i||{},n.metaKey||n.altKey||(i.force||t.data("grow")!==!1)&&(r=t.val(),n.type&&"keydown"===n.type.toLowerCase()&&(a=n.keyCode,o=a>=97&&a<=122||a>=65&&a<=90||a>=48&&a<=57||32===a,a===m||a===g?(d=L(t[0]),d.length?r=r.substring(0,d.start)+r.substring(d.start+d.length):a===g&&d.start?r=r.substring(0,d.start-1)+r.substring(d.start+1):a===m&&"undefined"!=typeof d.start&&(r=r.substring(0,d.start)+r.substring(d.start+1))):o&&(u=n.shiftKey,c=String.fromCharCode(n.keyCode),c=u?c.toUpperCase():c.toLowerCase(),r+=c)),s=t.attr("placeholder"),!r&&s&&(r=s),l=N(r,t)+4,l!==e&&(e=l,t.width(l),t.triggerHandler("resize")))};t.on("keydown keyup update blur",n),n()},F=function(n,i){var r,a,o,s,l=this;s=n[0],s.selectize=l;var u=window.getComputedStyle&&window.getComputedStyle(s,null);if(o=u?u.getPropertyValue("direction"):s.currentStyle&&s.currentStyle.direction,o=o||n.parents("[dir]:first").attr("dir")||"",t.extend(l,{order:0,settings:i,$input:n,tabIndex:n.attr("tabindex")||"",tagType:"select"===s.tagName.toLowerCase()?b:w,rtl:/rtl/i.test(o),eventNS:".selectize"+ ++F.count,highlightedValue:null,isOpen:!1,isDisabled:!1,isRequired:n.is("[required]"),isInvalid:!1,isLocked:!1,isFocused:!1,isInputHidden:!1,isSetup:!1,isShiftDown:!1,isCmdDown:!1,isCtrlDown:!1,ignoreFocus:!1,ignoreBlur:!1,ignoreHover:!1,hasOptions:!1,currentResults:null,lastValue:"",caretPos:0,loading:0,loadedSearches:{},$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:null===i.loadThrottle?l.onSearchChange:E(l.onSearchChange,i.loadThrottle)}),l.sifter=new e(this.options,{diacritics:i.diacritics}),l.settings.options){for(r=0,a=l.settings.options.length;r").addClass(h.wrapperClass).addClass(u).addClass(l),n=t("
    ").addClass(h.inputClass).addClass("items").appendTo(e),i=t('').appendTo(n).attr("tabindex",m.is(":disabled")?"-1":d.tabIndex),s=t(h.dropdownParent||e),r=t("
    ").addClass(h.dropdownClass).addClass(l).hide().appendTo(s),o=t("
    ").addClass(h.dropdownContentClass).appendTo(r),d.settings.copyClassesToDropdown&&r.addClass(u),e.css({width:m[0].style.width}),d.plugins.names.length&&(c="plugin-"+d.plugins.names.join(" plugin-"),e.addClass(c),r.addClass(c)),(null===h.maxItems||h.maxItems>1)&&d.tagType===b&&m.attr("multiple","multiple"),d.settings.placeholder&&i.attr("placeholder",h.placeholder),!d.settings.splitOn&&d.settings.delimiter){var _=d.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");d.settings.splitOn=new RegExp("\\s*"+_+"+\\s*")}m.attr("autocorrect")&&i.attr("autocorrect",m.attr("autocorrect")),m.attr("autocapitalize")&&i.attr("autocapitalize",m.attr("autocapitalize")),d.$wrapper=e,d.$control=n,d.$control_input=i,d.$dropdown=r,d.$dropdown_content=o,r.on("mouseenter","[data-selectable]",function(){return d.onOptionHover.apply(d,arguments)}),r.on("mousedown click","[data-selectable]",function(){return d.onOptionSelect.apply(d,arguments)}),O(n,"mousedown","*:not(input)",function(){return d.onItemSelect.apply(d,arguments)}),R(i),n.on({mousedown:function(){return d.onMouseDown.apply(d,arguments)},click:function(){return d.onClick.apply(d,arguments)}}),i.on({mousedown:function(t){t.stopPropagation()},keydown:function(){return d.onKeyDown.apply(d,arguments)},keyup:function(){return d.onKeyUp.apply(d,arguments)},keypress:function(){return d.onKeyPress.apply(d,arguments)},resize:function(){d.positionDropdown.apply(d,[])},blur:function(){return d.onBlur.apply(d,arguments)},focus:function(){return d.ignoreBlur=!1,d.onFocus.apply(d,arguments)},paste:function(){return d.onPaste.apply(d,arguments)}}),g.on("keydown"+f,function(t){d.isCmdDown=t[a?"metaKey":"ctrlKey"],d.isCtrlDown=t[a?"altKey":"ctrlKey"],d.isShiftDown=t.shiftKey}),g.on("keyup"+f,function(t){t.keyCode===x&&(d.isCtrlDown=!1),t.keyCode===v&&(d.isShiftDown=!1),t.keyCode===y&&(d.isCmdDown=!1)}),g.on("mousedown"+f,function(t){if(d.isFocused){if(t.target===d.$dropdown[0]||t.target.parentNode===d.$dropdown[0])return!1;d.$control.has(t.target).length||t.target===d.$control[0]||d.blur(t.target)}}),p.on(["scroll"+f,"resize"+f].join(" "),function(){d.isOpen&&d.positionDropdown.apply(d,arguments)}),p.on("mousemove"+f,function(){d.ignoreHover=!1}),this.revertSettings={$children:m.children().detach(),tabindex:m.attr("tabindex")},m.attr("tabindex",-1).hide().after(d.$wrapper),t.isArray(h.items)&&(d.setValue(h.items),delete h.items),S&&m.on("invalid"+f,function(t){t.preventDefault(),d.isInvalid=!0,d.refreshState()}),d.updateOriginalInput(),d.refreshItems(),d.refreshState(),d.updatePlaceholder(),d.isSetup=!0,m.is(":disabled")&&d.disable(),d.on("change",this.onChange),m.data("selectize",d),m.addClass("selectized"),d.trigger("initialize"),h.preload===!0&&d.onSearchChange("")},setupTemplates:function(){var e=this,n=e.settings.labelField,i=e.settings.optgroupLabelField,r={optgroup:function(t){return'
    '+t.html+"
    "},optgroup_header:function(t,e){return'
    '+e(t[i])+"
    "},option:function(t,e){return'
    '+e(t[n])+"
    "},item:function(t,e){return'
    '+e(t[n])+"
    "},option_create:function(t,e){return'
    Add '+e(t.input)+"
    "}};e.settings.render=t.extend({},r,e.settings.render)},setupCallbacks:function(){var t,e,n={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(t in n)n.hasOwnProperty(t)&&(e=this.settings[n[t]],e&&this.on(t,e))},onClick:function(t){var e=this;e.isFocused||(e.focus(),t.preventDefault())},onMouseDown:function(e){var n=this,i=e.isDefaultPrevented();t(e.target);if(n.isFocused){if(e.target!==n.$control_input[0])return"single"===n.settings.mode?n.isOpen?n.close():n.open():i||n.setActiveItem(null),!1}else i||window.setTimeout(function(){n.focus()},0)},onChange:function(){this.$input.trigger("change")},onPaste:function(e){var n=this;n.isFull()||n.isInputHidden||n.isLocked?e.preventDefault():n.settings.splitOn&&setTimeout(function(){for(var e=t.trim(n.$control_input.val()||"").split(n.settings.splitOn),i=0,r=e.length;is&&(u=o,o=s,s=u),r=o;r<=s;r++)l=d.$control[0].childNodes[r],d.$activeItems.indexOf(l)===-1&&(t(l).addClass("active"),d.$activeItems.push(l));n.preventDefault()}else"mousedown"===i&&d.isCtrlDown||"keydown"===i&&this.isShiftDown?e.hasClass("active")?(a=d.$activeItems.indexOf(e[0]),d.$activeItems.splice(a,1),e.removeClass("active")):d.$activeItems.push(e.addClass("active")[0]):(t(d.$activeItems).removeClass("active"),d.$activeItems=[e.addClass("active")[0]]);d.hideInput(),this.isFocused||d.focus()}},setActiveOption:function(e,n,i){var r,a,o,s,l,u=this;u.$activeOption&&u.$activeOption.removeClass("active"),u.$activeOption=null,e=t(e),e.length&&(u.$activeOption=e.addClass("active"),!n&&T(n)||(r=u.$dropdown_content.height(),a=u.$activeOption.outerHeight(!0),n=u.$dropdown_content.scrollTop()||0,o=u.$activeOption.offset().top-u.$dropdown_content.offset().top+n,s=o,l=o-r+a,o+a>r+n?u.$dropdown_content.stop().animate({scrollTop:l},i?u.settings.scrollDuration:0):o=0;n--)a.items.indexOf(C(i.items[n].id))!==-1&&i.items.splice(n,1);return i},refreshOptions:function(e){var n,r,a,o,s,l,u,c,d,h,f,p,g,m,v,y;"undefined"==typeof e&&(e=!0);var x=this,_=t.trim(x.$control_input.val()),b=x.search(_),w=x.$dropdown_content,S=x.$activeOption&&C(x.$activeOption.attr("data-value"));for(o=b.items.length,"number"==typeof x.settings.maxOptions&&(o=Math.min(o,x.settings.maxOptions)),s={},l=[],n=0;n0||g,x.hasOptions?(b.items.length>0?(v=S&&x.getOption(S),v&&v.length?m=v:"single"===x.settings.mode&&x.items.length&&(m=x.getOption(x.items[0])),m&&m.length||(m=y&&!x.settings.addPrecedence?x.getAdjacentOption(y,1):w.find("[data-selectable]:first"))):m=y,x.setActiveOption(m),e&&!x.isOpen&&x.open()):(x.setActiveOption(null),e&&x.isOpen&&x.close())},addOption:function(e){var n,i,r,a=this;if(t.isArray(e))for(n=0,i=e.length;n=0&&r0),e.$control_input.data("grow",!n&&!i)},isFull:function(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(t){var e,n,i,r,a=this;if(t=t||{},a.tagType===b){for(i=[],e=0,n=a.items.length;e'+A(r)+"");i.length||this.$input.attr("multiple")||i.push(''),a.$input.html(i.join(""))}else a.$input.val(a.getValue()),a.$input.attr("value",a.$input.val());a.isSetup&&(t.silent||a.trigger("change",a.$input.val()))},updatePlaceholder:function(){if(this.settings.placeholder){var t=this.$control_input;this.items.length?t.removeAttr("placeholder"):t.attr("placeholder",this.settings.placeholder),t.triggerHandler("update",{force:!0})}},open:function(){var t=this;t.isLocked||t.isOpen||"multi"===t.settings.mode&&t.isFull()||(t.focus(),t.isOpen=!0,t.refreshState(),t.$dropdown.css({visibility:"hidden",display:"block"}),t.positionDropdown(),t.$dropdown.css({visibility:"visible"}),t.trigger("dropdown_open",t.$dropdown))},close:function(){var t=this,e=t.isOpen;"single"===t.settings.mode&&t.items.length&&t.hideInput(),t.isOpen=!1,t.$dropdown.hide(),t.setActiveOption(null),t.refreshState(),e&&t.trigger("dropdown_close",t.$dropdown)},positionDropdown:function(){var t=this.$control,e="body"===this.settings.dropdownParent?t.offset():t.position();e.top+=t.outerHeight(!0),this.$dropdown.css({width:t.outerWidth(),top:e.top,left:e.left})},clear:function(t){var e=this;e.items.length&&(e.$control.children(":not(input)").remove(),e.items=[],e.lastQuery=null,e.setCaret(0),e.setActiveItem(null),e.updatePlaceholder(),e.updateOriginalInput({silent:t}),e.refreshState(),e.showInput(),e.trigger("clear"))},insertAtCaret:function(e){var n=Math.min(this.caretPos,this.items.length);0===n?this.$control.prepend(e):t(this.$control[0].childNodes[n]).before(e),this.setCaret(n+1)},deleteSelection:function(e){var n,i,r,a,o,s,l,u,c,d=this;if(r=e&&e.keyCode===g?-1:1,a=L(d.$control_input[0]),d.$activeOption&&!d.settings.hideSelected&&(l=d.getAdjacentOption(d.$activeOption,-1).attr("data-value")),o=[],d.$activeItems.length){for(c=d.$control.children(".active:"+(r>0?"last":"first")),s=d.$control.children(":not(input)").index(c),r>0&&s++,n=0,i=d.$activeItems.length;n0&&a.start===d.$control_input.val().length&&o.push(d.items[d.caretPos]));if(!o.length||"function"==typeof d.settings.onDelete&&d.settings.onDelete.apply(d,[o])===!1)return!1;for("undefined"!=typeof s&&d.setCaret(s);o.length;)d.removeItem(o.pop());return d.showInput(),d.positionDropdown(),d.refreshOptions(!0),l&&(u=d.getOption(l),u.length&&d.setActiveOption(u)),!0},advanceSelection:function(t,e){var n,i,r,a,o,s,l=this;0!==t&&(l.rtl&&(t*=-1),n=t>0?"last":"first",i=L(l.$control_input[0]),l.isFocused&&!l.isInputHidden?(a=l.$control_input.val().length,o=t<0?0===i.start&&0===i.length:i.start===a,o&&!a&&l.advanceCaret(t,e)):(s=l.$control.children(".active:"+n),s.length&&(r=l.$control.children(":not(input)").index(s),l.setActiveItem(null),l.setCaret(t>0?r+1:r))))},advanceCaret:function(t,e){var n,i,r=this;0!==t&&(n=t>0?"next":"prev",r.isShiftDown?(i=r.$control_input[n](),i.length&&(r.hideInput(),r.setActiveItem(i),e&&e.preventDefault())):r.setCaret(r.caretPos+t))},setCaret:function(e){var n=this;if(e="single"===n.settings.mode?n.items.length:Math.max(0,Math.min(n.items.length,e)),!n.isPending){var i,r,a,o;for(a=n.$control.children(":not(input)"),i=0,r=a.length;i
    '}},e),n.setup=function(){var i=n.setup;return function(){i.apply(n,arguments),n.$dropdown_header=t(e.html(e)),n.$dropdown.prepend(n.$dropdown_header)}}()}),F.define("optgroup_columns",function(e){var n=this;e=t.extend({equalizeWidth:!0,equalizeHeight:!0},e),this.getAdjacentOption=function(e,n){var i=e.closest("[data-group]").find("[data-selectable]"),r=i.index(e)+n;return r>=0&&r
    ',t=t.firstChild,n.body.appendChild(t),e=i.width=t.offsetWidth-t.clientWidth,n.body.removeChild(t)),e},r=function(){var r,a,o,s,l,u,c;if(c=t("[data-group]",n.$dropdown_content),a=c.length,a&&n.$dropdown_content.width()){if(e.equalizeHeight){for(o=0,r=0;r1&&(l=u-s*(a-1),c.eq(a-1).css({width:l})))}};(e.equalizeHeight||e.equalizeWidth)&&(P.after(this,"positionDropdown",r),P.after(this,"refreshOptions",r))}),F.define("remove_button",function(e){if("single"!==this.settings.mode){e=t.extend({label:"×",title:"Remove",className:"remove",append:!0},e);var n=this,i=''+e.label+"",r=function(t,e){var n=t.search(/(<\/[^>]+>\s*)$/);return t.substring(0,n)+e+t.substring(n)};this.setup=function(){var a=n.setup;return function(){if(e.append){var o=n.settings.render.item;n.settings.render.item=function(t){return r(o.apply(this,arguments),i)}}a.apply(this,arguments),this.$control.on("click","."+e.className,function(e){if(e.preventDefault(),!n.isLocked){var i=t(e.currentTarget).parent();n.setActiveItem(i),n.deleteSelection()&&n.setCaret(n.items.length)}})}}()}}),F.define("restore_on_backspace",function(t){var e=this;t.text=t.text||function(t){return t[this.settings.labelField]},this.onKeyDown=function(){var n=e.onKeyDown;return function(e){var i,r;return e.keyCode===g&&""===this.$control_input.val()&&!this.$activeItems.length&&(i=this.caretPos-1,i>=0&&i",options:{disabled:!1,create:null},_createWidget:function(n,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=e++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),n),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(e,n){var i,r,a,o=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(o={},i=e.split("."),e=i.shift(),i.length){for(r=o[e]=t.widget.extend({},this.options[e]),a=0;a'),i.attr("accept-charset",n.formAcceptCharset),a=/\?/.test(n.url)?"&":"?","DELETE"===n.type?(n.url=n.url+a+"_method=DELETE",n.type="POST"):"PUT"===n.type?(n.url=n.url+a+"_method=PUT",n.type="POST"):"PATCH"===n.type&&(n.url=n.url+a+"_method=PATCH",n.type="POST"),e+=1,r=t('').bind("load",function(){ -var e,a=t.isArray(n.paramName)?n.paramName:[n.paramName];r.unbind("load").bind("load",function(){var e;try{if(e=r.contents(),!e.length||!e[0].firstChild)throw new Error}catch(n){e=void 0}l(200,"success",{iframe:e}),t('').appendTo(i),window.setTimeout(function(){i.remove()},0)}),i.prop("target",r.prop("name")).prop("action",n.url).prop("method",n.type),n.formData&&t.each(n.formData,function(e,n){t('').prop("name",n.name).val(n.value).appendTo(i)}),n.fileInput&&n.fileInput.length&&"POST"===n.type&&(e=n.fileInput.clone(),n.fileInput.after(function(t){return e[t]}),n.paramName&&n.fileInput.each(function(e){t(this).prop("name",a[e]||n.paramName)}),i.append(n.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),n.fileInput.removeAttr("form")),i.submit(),e&&e.length&&n.fileInput.each(function(n,i){var r=t(e[n]);t(i).prop("name",r.prop("name")).attr("form",r.attr("form")),r.replaceWith(i)})}),i.append(r).appendTo(document.body)},abort:function(){r&&r.unbind("load").prop("src",o),i&&i.remove()}}}}),t.ajaxSetup({converters:{"iframe text":function(e){return e&&t(e[0].body).text()},"iframe json":function(e){return e&&t.parseJSON(t(e[0].body).text())},"iframe html":function(e){return e&&t(e[0].body).html()},"iframe xml":function(e){var n=e&&e[0];return n&&t.isXMLDoc(n)?n:t.parseXML(n.XMLDocument&&n.XMLDocument.xml||t(n.body).html())},"iframe script":function(e){return e&&t.globalEval(t(e[0].body).text())}}})}),function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery","jquery.ui.widget"],t):"object"==typeof exports?t(require("jquery"),require("./vendor/jquery.ui.widget")):t(window.jQuery)}(function(t){"use strict";function e(e){var n="dragover"===e;return function(i){i.dataTransfer=i.originalEvent&&i.originalEvent.dataTransfer;var r=i.dataTransfer;r&&t.inArray("Files",r.types)!==-1&&this._trigger(e,t.Event(e,{delegatedEvent:i}))!==!1&&(i.preventDefault(),n&&(r.dropEffect="copy"))}}t.support.fileInput=!(new RegExp("(Android (1\\.[0156]|2\\.[01]))|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)|(w(eb)?OSBrowser)|(webOS)|(Kindle/(1\\.0|2\\.[05]|3\\.0))").test(window.navigator.userAgent)||t('').prop("disabled")),t.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),t.support.xhrFormDataFileUpload=!!window.FormData,t.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),t.widget("blueimp.fileupload",{options:{dropZone:t(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(e,n){return e=this.messages[e]||e.toString(),n&&t.each(n,function(t,n){e=e.replace("{"+t+"}",n)}),e},formData:function(t){return t.serializeArray()},add:function(e,n){return!e.isDefaultPrevented()&&void((n.autoUpload||n.autoUpload!==!1&&t(this).fileupload("option","autoUpload"))&&n.process().done(function(){n.submit()}))},processData:!1,contentType:!1,cache:!1,timeout:0},_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:t.support.blobSlice&&function(){var t=this.slice||this.webkitSlice||this.mozSlice;return t.apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(t,e,n){var i=t-this.timestamp;return(!this.bitrate||!n||i>n)&&(this.bitrate=(e-this.loaded)*(1e3/i)*8,this.loaded=e,this.timestamp=t),this.bitrate}},_isXHRUpload:function(e){return!e.forceIframeTransport&&(!e.multipart&&t.support.xhrFileUpload||t.support.xhrFormDataFileUpload)},_getFormData:function(e){var n;return"function"===t.type(e.formData)?e.formData(e.form):t.isArray(e.formData)?e.formData:"object"===t.type(e.formData)?(n=[],t.each(e.formData,function(t,e){n.push({name:t,value:e})}),n):[]},_getTotal:function(e){var n=0;return t.each(e,function(t,e){n+=e.size||1}),n},_initProgressObject:function(e){var n={loaded:0,total:0,bitrate:0};e._progress?t.extend(e._progress,n):e._progress=n},_initResponseObject:function(t){var e;if(t._response)for(e in t._response)t._response.hasOwnProperty(e)&&delete t._response[e];else t._response={}},_onProgress:function(e,n){if(e.lengthComputable){var i,r=Date.now?Date.now():(new Date).getTime();if(n._time&&n.progressInterval&&r-n._time").prop("href",e.url).prop("host");e.dataType="iframe "+(e.dataType||""),e.formData=this._getFormData(e),e.redirect&&n&&n!==location.host&&e.formData.push({name:e.redirectParamName||"redirect",value:e.redirect})},_initDataSettings:function(t){this._isXHRUpload(t)?(this._chunkedUpload(t,!0)||(t.data||this._initXHRData(t),this._initProgressListener(t)),t.postMessage&&(t.dataType="postmessage "+(t.dataType||""))):this._initIframeSettings(t)},_getParamName:function(e){var n=t(e.fileInput),i=e.paramName;return i?t.isArray(i)||(i=[i]):(i=[],n.each(function(){for(var e=t(this),n=e.prop("name")||"files[]",r=(e.prop("files")||[1]).length;r;)i.push(n),r-=1}),i.length||(i=[n.prop("name")||"files[]"])),i},_initFormSettings:function(e){e.form&&e.form.length||(e.form=t(e.fileInput.prop("form")),e.form.length||(e.form=t(this.options.fileInput.prop("form")))),e.paramName=this._getParamName(e),e.url||(e.url=e.form.prop("action")||location.href),e.type=(e.type||"string"===t.type(e.form.prop("method"))&&e.form.prop("method")||"").toUpperCase(),"POST"!==e.type&&"PUT"!==e.type&&"PATCH"!==e.type&&(e.type="POST"),e.formAcceptCharset||(e.formAcceptCharset=e.form.attr("accept-charset"))},_getAJAXSettings:function(e){var n=t.extend({},this.options,e);return this._initFormSettings(n),this._initDataSettings(n),n},_getDeferredState:function(t){return t.state?t.state():t.isResolved()?"resolved":t.isRejected()?"rejected":"pending"},_enhancePromise:function(t){return t.success=t.done,t.error=t.fail,t.complete=t.always,t},_getXHRPromise:function(e,n,i){var r=t.Deferred(),a=r.promise();return n=n||this.options.context||a,e===!0?r.resolveWith(n,i):e===!1&&r.rejectWith(n,i),a.abort=r.promise,this._enhancePromise(a)},_addConvenienceMethods:function(e,n){var i=this,r=function(e){return t.Deferred().resolveWith(i,e).promise()};n.process=function(e,a){return(e||a)&&(n._processQueue=this._processQueue=(this._processQueue||r([this])).then(function(){return n.errorThrown?t.Deferred().rejectWith(i,[n]).promise():r(arguments)}).then(e,a)),this._processQueue||r([this])},n.submit=function(){return"pending"!==this.state()&&(n.jqXHR=this.jqXHR=i._trigger("submit",t.Event("submit",{delegatedEvent:e}),this)!==!1&&i._onSend(e,this)),this.jqXHR||i._getXHRPromise()},n.abort=function(){return this.jqXHR?this.jqXHR.abort():(this.errorThrown="abort",i._trigger("fail",null,this),i._getXHRPromise(!1))},n.state=function(){return this.jqXHR?i._getDeferredState(this.jqXHR):this._processQueue?i._getDeferredState(this._processQueue):void 0},n.processing=function(){return!this.jqXHR&&this._processQueue&&"pending"===i._getDeferredState(this._processQueue)},n.progress=function(){return this._progress},n.response=function(){return this._response}},_getUploadedBytes:function(t){var e=t.getResponseHeader("Range"),n=e&&e.split("-"),i=n&&n.length>1&&parseInt(n[1],10);return i&&i+1},_chunkedUpload:function(e,n){e.uploadedBytes=e.uploadedBytes||0;var i,r,a=this,o=e.files[0],s=o.size,l=e.uploadedBytes,u=e.maxChunkSize||s,c=this._blobSlice,d=t.Deferred(),h=d.promise();return!(!(this._isXHRUpload(e)&&c&&(l||u=s?(o.error=e.i18n("uploadedBytes"),this._getXHRPromise(!1,e.context,[null,"error",o.error])):(r=function(){var n=t.extend({},e),h=n._progress.loaded;n.blob=c.call(o,l,l+u,o.type),n.chunkSize=n.blob.size,n.contentRange="bytes "+l+"-"+(l+n.chunkSize-1)+"/"+s,a._initXHRData(n),a._initProgressListener(n),i=(a._trigger("chunksend",null,n)!==!1&&t.ajax(n)||a._getXHRPromise(!1,n.context)).done(function(i,o,u){l=a._getUploadedBytes(u)||l+n.chunkSize,h+n.chunkSize-n._progress.loaded&&a._onProgress(t.Event("progress",{lengthComputable:!0,loaded:l-n.uploadedBytes,total:l-n.uploadedBytes}),n),e.uploadedBytes=n.uploadedBytes=l,n.result=i,n.textStatus=o,n.jqXHR=u,a._trigger("chunkdone",null,n),a._trigger("chunkalways",null,n),ls._sending)for(var i=s._slots.shift();i;){if("pending"===s._getDeferredState(i)){i.resolve();break}i=s._slots.shift()}0===s._active&&s._trigger("stop")})};return this._beforeSend(e,l),this.options.sequentialUploads||this.options.limitConcurrentUploads&&this.options.limitConcurrentUploads<=this._sending?(this.options.limitConcurrentUploads>1?(a=t.Deferred(),this._slots.push(a),o=a.then(u)):(this._sequence=this._sequence.then(u,u),o=this._sequence),o.abort=function(){return r=[void 0,"abort","abort"],i?i.abort():(a&&a.rejectWith(l.context,r),u())},this._enhancePromise(o)):u()},_onAdd:function(e,n){var i,r,a,o,s=this,l=!0,u=t.extend({},this.options,n),c=n.files,d=c.length,h=u.limitMultiFileUploads,f=u.limitMultiFileUploadSize,p=u.limitMultiFileUploadSizeOverhead,g=0,m=this._getParamName(u),v=0;if(!d)return!1;if(f&&void 0===c[0].size&&(f=void 0),(u.singleFileUploads||h||f)&&this._isXHRUpload(u))if(u.singleFileUploads||f||!h)if(!u.singleFileUploads&&f)for(a=[],i=[],o=0;of||h&&o+1-v>=h)&&(a.push(c.slice(v,o+1)),r=m.slice(v,o+1),r.length||(r=m),i.push(r),v=o+1,g=0);else i=m;else for(a=[],i=[],o=0;o").append(i)[0].reset(),n.after(i).detach(),r&&i.focus(),t.cleanData(n.unbind("remove")),this.options.fileInput=this.options.fileInput.map(function(t,e){return e===n[0]?i[0]:e}),n[0]===this.element[0]&&(this.element=i)},_handleFileTreeEntry:function(e,n){var i,r=this,a=t.Deferred(),o=function(t){t&&!t.entry&&(t.entry=e),a.resolve([t])},s=function(t){r._handleFileTreeEntries(t,n+e.name+"/").done(function(t){a.resolve(t)}).fail(o)},l=function(){i.readEntries(function(t){t.length?(u=u.concat(t),l()):s(u)},o)},u=[];return n=n||"",e.isFile?e._file?(e._file.relativePath=n,a.resolve(e._file)):e.file(function(t){t.relativePath=n,a.resolve(t)},o):e.isDirectory?(i=e.createReader(),l()):a.resolve([]),a.promise()},_handleFileTreeEntries:function(e,n){var i=this;return t.when.apply(t,t.map(e,function(t){return i._handleFileTreeEntry(t,n)})).then(function(){return Array.prototype.concat.apply([],arguments)})},_getDroppedFiles:function(e){e=e||{};var n=e.items;return n&&n.length&&(n[0].webkitGetAsEntry||n[0].getAsEntry)?this._handleFileTreeEntries(t.map(n,function(t){var e;return t.webkitGetAsEntry?(e=t.webkitGetAsEntry(),e&&(e._file=t.getAsFile()),e):t.getAsEntry()})):t.Deferred().resolve(t.makeArray(e.files)).promise()},_getSingleFileInputFiles:function(e){e=t(e);var n,i,r=e.prop("webkitEntries")||e.prop("entries");if(r&&r.length)return this._handleFileTreeEntries(r);if(n=t.makeArray(e.prop("files")),n.length)void 0===n[0].name&&n[0].fileName&&t.each(n,function(t,e){e.name=e.fileName,e.size=e.fileSize});else{if(i=e.prop("value"),!i)return t.Deferred().resolve([]).promise();n=[{name:i.replace(/^.*\\/,"")}]}return t.Deferred().resolve(n).promise()},_getFileInputFiles:function(e){return e instanceof t&&1!==e.length?t.when.apply(t,t.map(e,this._getSingleFileInputFiles)).then(function(){return Array.prototype.concat.apply([],arguments)}):this._getSingleFileInputFiles(e)},_onChange:function(e){var n=this,i={fileInput:t(e.target),form:t(e.target.form)};this._getFileInputFiles(i.fileInput).always(function(r){i.files=r,n.options.replaceFileInput&&n._replaceFileInput(i),n._trigger("change",t.Event("change",{delegatedEvent:e}),i)!==!1&&n._onAdd(e,i)})},_onPaste:function(e){var n=e.originalEvent&&e.originalEvent.clipboardData&&e.originalEvent.clipboardData.items,i={files:[]};n&&n.length&&(t.each(n,function(t,e){var n=e.getAsFile&&e.getAsFile();n&&i.files.push(n)}),this._trigger("paste",t.Event("paste",{delegatedEvent:e}),i)!==!1&&this._onAdd(e,i))},_onDrop:function(e){e.dataTransfer=e.originalEvent&&e.originalEvent.dataTransfer;var n=this,i=e.dataTransfer,r={};i&&i.files&&i.files.length&&(e.preventDefault(),this._getDroppedFiles(i).always(function(i){r.files=i,n._trigger("drop",t.Event("drop",{delegatedEvent:e}),r)!==!1&&n._onAdd(e,r)}))},_onDragOver:e("dragover"),_onDragEnter:e("dragenter"),_onDragLeave:e("dragleave"),_initEventHandlers:function(){this._isXHRUpload(this.options)&&(this._on(this.options.dropZone,{dragover:this._onDragOver,drop:this._onDrop,dragenter:this._onDragEnter,dragleave:this._onDragLeave}),this._on(this.options.pasteZone,{paste:this._onPaste})),t.support.fileInput&&this._on(this.options.fileInput,{change:this._onChange})},_destroyEventHandlers:function(){this._off(this.options.dropZone,"dragenter dragleave dragover drop"),this._off(this.options.pasteZone,"paste"),this._off(this.options.fileInput,"change")},_setOption:function(e,n){var i=t.inArray(e,this._specialOptions)!==-1;i&&this._destroyEventHandlers(),this._super(e,n),i&&(this._initSpecialOptions(),this._initEventHandlers())},_initSpecialOptions:function(){var e=this.options;void 0===e.fileInput?e.fileInput=this.element.is('input[type="file"]')?this.element:this.element.find('input[type="file"]'):e.fileInput instanceof t||(e.fileInput=t(e.fileInput)),e.dropZone instanceof t||(e.dropZone=t(e.dropZone)),e.pasteZone instanceof t||(e.pasteZone=t(e.pasteZone))},_getRegExp:function(t){var e=t.split("/"),n=e.pop();return e.shift(),new RegExp(e.join("/"),n)},_isRegExpOption:function(e,n){return"url"!==e&&"string"===t.type(n)&&/^\/.*\/[igm]{0,3}$/.test(n)},_initDataAttributes:function(){var e=this,n=this.options,i=this.element.data();t.each(this.element[0].attributes,function(t,r){var a,o=r.name.toLowerCase();/^data-/.test(o)&&(o=o.slice(5).replace(/-[a-z]/g,function(t){return t.charAt(1).toUpperCase()}),a=i[o],e._isRegExpOption(o,a)&&(a=e._getRegExp(a)),n[o]=a)})},_create:function(){this._initDataAttributes(),this._initSpecialOptions(),this._slots=[],this._sequence=this._getXHRPromise(!0),this._sending=this._active=0,this._initProgressObject(this),this._initEventHandlers()},active:function(){return this._active},progress:function(){return this._progress},add:function(e){var n=this;e&&!this.options.disabled&&(e.fileInput&&!e.files?this._getFileInputFiles(e.fileInput).always(function(t){e.files=t,n._onAdd(null,e)}):(e.files=t.makeArray(e.files),this._onAdd(null,e)))},send:function(e){if(e&&!this.options.disabled){if(e.fileInput&&!e.files){var n,i,r=this,a=t.Deferred(),o=a.promise();return o.abort=function(){return i=!0,n?n.abort():(a.reject(null,"abort","abort"),o)},this._getFileInputFiles(e.fileInput).always(function(t){if(!i){if(!t.length)return void a.reject();e.files=t,n=r._onSend(null,e),n.then(function(t,e,n){a.resolve(t,e,n)},function(t,e,n){a.reject(t,e,n)})}}),this._enhancePromise(o)}if(e.files=t.makeArray(e.files),e.files.length)return this._onSend(null,e)}return this._getXHRPromise(!1,e&&e.context)}})});var Collejo=Collejo||{settings:{alertInClass:"bounceInDown",alertOutClass:"fadeOutUp"},lang:{},templates:{},form:{},link:{},modal:{},dynamics:{},browser:{},components:{},image:{},ready:{push:function(t,e){C.f.push({callback:t,recall:e===!0})},call:function(t){$.each(C.f,function(e,n){n.callback(t)})},recall:function(t){$.each(C.f,function(e,n){n.recall&&n.callback(t)})}}};jQuery.events=function(t){var e,n=[];return jQuery(t).each(function(){(e=jQuery._data(this,"events"))&&n.push({element:this,events:e})}),n.length>0?n:null},$(function(){Collejo.ready.call($(document))}),Collejo.browser.isOpera=!!window.opr&&!!opr.addons||!!window.opera||navigator.userAgent.indexOf(" OPR/")>=0,Collejo.browser.isFirefox="undefined"!=typeof InstallTrigger,Collejo.browser.isSafari=Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0,Collejo.browser.isIE=!!document.documentMode,Collejo.browser.isEdge=!Collejo.browser.isIE&&!!window.StyleMedia,Collejo.browser.isChrome=!!window.chrome&&!!window.chrome.webstore,Collejo.browser.isBlink=(Collejo.browser.isChrome||Collejo.browser.isOpera)&&!!window.CSS,Collejo.templates.spinnerTemplate=function(){return $('')},Collejo.templates.alertTemplate=function(t,e,n){return $('")},Collejo.templates.alertWrap=function(){return $('
    ')},Collejo.templates.alertContainer=function(){return $('
    ')},Collejo.templates.ajaxLoader=function(){return $('
    ')},Collejo.templates.dateTimePickerIcons=function(){return{time:"fa fa-clock-o",date:"fa fa-calendar",up:"fa fa-chevron-up",down:"fa fa-chevron-down",previous:"fa fa-chevron-left",next:"fa fa-chevron-right",today:"fa fa-calendar-check-o",clear:"fa fa-trash-o",close:"fa fa-close"}},$.ajaxSetup({headers:{"X-CSRF-Token":$('meta[name="token"]').attr("content"),"X-User-Time":new Date}}),Collejo.ajaxComplete=function(t,e,n){var i,r,a,o=0;try{o=$.parseJSON(e.responseText)}catch(s){console.log(s)}if(r=0==o?e.status:o,403!=r&&401!=r||(Collejo.alert("danger",Collejo.lang.ajax_unauthorize,3e3),$(".modal,.modal-backdrop").remove(),window.location=n.url),400==r&&(Collejo.alert("warning",o.message,!1),$(".modal,.modal-backdrop").remove()),0!=r&&null!=r){var i=void 0!=r.code?r.code:0;if(0==i){if(void 0!=o.data&&void 0!=o.data.partial){var l=o.data.target?o.data.target:"ajax-target",l=$("#"+l),u=$(o.data.partial);Collejo.dynamics.prependRow(u,l),Collejo.ready.recall(u)}if(void 0!=o.data&&void 0!=o.data.redir&&(null!=o.message&&(Collejo.alert(o.success?"success":"warning",o.message+". redirecting…",1e3),a=0),setTimeout(function(){window.location=o.data.redir},a)),void 0!=o.message&&null!=o.message&&o.message.length>0&&void 0==o.data.redir&&Collejo.alert(o.success?"success":"warning",o.message,3e3),void 0!=o.data&&void 0!=o.data.errors){var c=""+Collejo.lang.validation_failed+" "+Collejo.lang.validation_correct+"
    ";$.each(o.data.errors,function(t,e){$.each(e,function(t,e){c=c+e+"
    "})}),Collejo.alert("warning",c,5e3)}}}$(window).resize()},$(document).ajaxComplete(Collejo.ajaxComplete),Collejo.image.lazyLoad=function(t){t.hide(),t.each(function(t){this.complete?$(this).fadeIn():$(this).load(function(){$(this).fadeIn(500)})})},Collejo.ready.push(function(t){Collejo.image.lazyLoad($(t).find("img.img-lazy"))}),$.fn.datetimepicker.defaults.icons=Collejo.templates.dateTimePickerIcons(),Collejo.ready.push(function(t){$(t).find('[data-toggle="date-input"]').datetimepicker({format:"YYYY-MM-DD"})},!0),Collejo.ready.push(function(t){$(t).find('[data-toggle="time-input"]').datetimepicker({format:"HH:i:s"})},!0),Collejo.ready.push(function(t){$(t).find('[data-toggle="date-time-input"]').datetimepicker({format:"YYYY-MM-DD HH:i:s"})},!0),Selectize.define("allow-clear",function(t){var e=this,n=$('');this.setup=function(){var t=e.setup;return function(){t.apply(this,arguments),""==this.getValue()&&n.addClass("disabled"),this.$wrapper.append(n),this.$wrapper.on("click",".clear-selection",function(t){t.preventDefault(),e.isLocked||(e.clear(),e.$control_input.focus())}),this.on("change",function(t){""==t?this.$wrapper.find(".clear-selection").addClass("disabled"):this.$wrapper.find(".clear-selection").removeClass("disabled")})}}()}),Collejo.ready.push(function(t){Collejo.components.dropDown($(t).find('[data-toggle="select-dropdown"]')),Collejo.components.searchDropDown($(t).find('[data-toggle="search-dropdown"]'))},!0),Collejo.components.dropDown=function(t){if(t.each(function(){var t=$(this);null==t.data("toggle")&&t.data("toggle","select-dropdown");var e=[];1==t.data("allow-clear")&&e.push("allow-clear"),t.selectize({placeholder:Collejo.lang.select,plugins:e});var n=t[0].selectize;n.on("change",function(){t.valid()})}),1==t.length){var e=t[0].selectize;return e}},Collejo.components.searchDropDown=function(t){if(t.each(function(){var t=$(this);null==t.data("toggle")&&t.data("toggle","search-dropdown");var e=[];1==t.data("allow-clear")&&e.push("allow-clear"),t.selectize({placeholder:Collejo.lang.search,valueField:"id",labelField:"name",searchField:"name",options:[],create:!1,plugins:e,render:{option:function(t,e){return"
    "+t.name+"
    "},item:function(t,e){return"
    "+t.name+"
    "}},load:function(e,n){return e.length?(Collejo.templates.spinnerTemplate().addClass("inline").insertAfter(t),void $.ajax({url:t.data("url"),type:"GET",dataType:"json",data:{q:e},error:function(){n(),t.siblings(".spinner-wrap").remove()},success:function(e){n(e.data),t.siblings(".spinner-wrap").remove()}})):n()}});var n=t[0].selectize;n.on("change",function(){t.valid()})}),1==t.length){var e=t[0].selectize;return e}},Collejo.ready.push(function(t){$(t).on("click",'[data-toggle="ajax-link"]',function(t){t.preventDefault(),Collejo.link.ajax($(this))})}),Collejo.link.ajax=function(t,e){function n(t){$.getJSON(t.attr("href"),function(n){if(null==t.data("success-callback"))"function"==typeof e&&e(t,n);else{var i=window[t.data("success-callback")];"function"==typeof i&&i(t,n)}})}null==t.data("confirm")?n(t):bootbox.confirm({message:t.data("confirm"),buttons:{cancel:{label:Collejo.lang.no,className:"btn-default"},confirm:{label:Collejo.lang.yes,className:"btn-danger"}},callback:function(e){e&&n(t)}})},Collejo.alert=function(t,e,n){var i=Collejo.templates.alertWrap(),r=Collejo.templates.alertContainer();i.css({position:"fixed",top:"60px",width:"100%",height:0,"z-index":99999}),r.css({width:"400px",margin:"0 auto"}),i.append(r);var a=Collejo.templates.alertTemplate(t,e,n);0==$("#alert-wrap").length&&$("body").append(i);var r=$("#alert-wrap").find(".alert-container");n===!1&&r.empty(),a.appendTo(r).addClass("animated "+Collejo.settings.alertInClass),n!==!1&&window.setTimeout(function(){Collejo.browser.isFirefox||Collejo.browser.isChrome?a.removeClass(Collejo.settings.alertInClass).addClass(Collejo.settings.alertOutClass).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){a.remove()}):a.remove()},n)},Collejo.form.lock=function(t){$(t).find("input").attr("readonly",!0),$(t).find(".selectized").each(function(){$(this)[0].selectize.lock()}),$(t).find(".fileinput-button").each(function(){$(this).addClass("disabled").find("input").attr("disabled",!0)}),$(t).find('button[type="submit"]').attr("disabled",!0).append(Collejo.templates.spinnerTemplate()),$(t).find('input[type="checkbox"]').attr("readonly",!0).parent(".checkbox-row").addClass("disabled")},Collejo.form.unlock=function(t){$(t).find("input").attr("readonly",!1),$(t).find(".selectized").each(function(){$(this)[0].selectize.unlock()}),$(t).find(".fileinput-button").each(function(){$(this).removeClass("disabled").find("input").attr("disabled",!1)}),$(t).find('button[type="submit"]').attr("disabled",!1).find(".spinner-wrap").remove(),$(t).find('input[type="checkbox"]').attr("readonly",!1).parent(".checkbox-row").removeClass("disabled")},Collejo.ready.push(function(t){$.validator.setDefaults({ignore:$(".selectize"),errorPlacement:function(t,e){$(e).parents(".input-group").length?t.insertAfter($(e).parents(".input-group")):"select-dropdown"==$(e).data("toggle")||"search-dropdown"==$(e).data("toggle")?t.insertAfter($(e).siblings(".selectize-control")):t.insertAfter(e)},highlight:function(t,e,n){"radio"===t.type?this.findByName(t.name).addClass(e).removeClass(n):"select-dropdown"==$(t).data("toggle")||"search-dropdown"==$(t).data("toggle")?$(t).siblings(".selectize-control").addClass(e).removeClass(n):$(t).addClass(e).removeClass(n)},unhighlight:function(t,e,n){"radio"===t.type?this.findByName(t.name).removeClass(e).addClass(n):"select-dropdown"==$(t).data("toggle")||"search-dropdown"==$(t).data("toggle")?$(t).siblings(".selectize-control").removeClass(e).addClass(n):$(t).removeClass(e).addClass(n)}})}),Collejo.ready.push(function(t){$(t).on("click",'[data-toggle="dynamic-delete"]',function(t){t.preventDefault(),Collejo.dynamics["delete"]($(this))}),Collejo.dynamics.checkRowCount($(t).find(".table-list")),Collejo.dynamics.checkRowCount($(t).find(".column-list"))}),Collejo.dynamics["delete"]=function(t){Collejo.link.ajax(t,function(t,e){t.parents(".table-list");t.closest("."+t.data("delete-block")).fadeOut().remove(),Collejo.dynamics.checkRowCount(t.parents(".table-list"))})},Collejo.dynamics.prependRow=function(t,e){var n=Collejo.dynamics.getListType(e),i=t.prop("id"),r=e.find("#"+i);r.length?r.replaceWith(t):"table"==n?t.hide().insertAfter(e.find("th").parent()).fadeIn():"columns"==n?t.hide().prependTo(e.find(".columns")).fadeIn():t.hide().prependTo(e).fadeIn(),Collejo.dynamics.checkRowCount(e)},Collejo.dynamics.getListType=function(t){var e;return t.find("table").length||"TABLE"==t.prop("tagName")?e="table":t.find("columns").length&&(e="columns"),e},Collejo.dynamics.checkRowCount=function(t){var e=Collejo.dynamics.getListType(t);if(e="table"){var n=t.find("table");1==n.find("tr").length?(t.find(".placeholder").show(),n.hide()):(t.find(".placeholder").hide(),n.show())}if(e="columns"){var i=t.find("columns");0==i.find(".col-md-6").children().length?(i.siblings(".col-md-6").show(),i.hide()):(t.siblings(".col-md-6").hide(),i.show())}},Collejo.modal.open=function(t){var e=null!=t.data("modal-id")?t.data("modal-id"):"ajax-modal-"+moment(),n=null!=t.data("modal-size")?" modal-"+t.data("modal-size")+" ":"",i=null==t.data("modal-backdrop")||t.data("modal-backdrop"),r=null==t.data("modal-keyboard")||t.data("modal-keyboard"),a=$(''),o=Collejo.templates.ajaxLoader();null!=o&&o.appendTo(a),$("body").append(a),a.on("show.bs.modal",function(){$.ajax({url:t.attr("href"),type:"GET",success:function(t){1==t.success&&t.data&&t.data.content&&(a.find(".modal-dialog").html(t.data.content),a.removeClass("loading"),null!=o&&o.remove(),Collejo.ready.recall(a))}})}).on("hidden.bs.modal",function(){a.remove()}).modal({backdrop:i,keyboard:r})},Collejo.modal.close=function(t){$(document).find("#"+$(t).prop("id")).closest(".modal").modal("hide")},Collejo.ready.push(function(t){$(t).on("click",'[data-toggle="ajax-modal"]',function(t){t.preventDefault(),Collejo.modal.open($(this))}),$(t).on("DOMNodeInserted",".modal-backdrop",function(t){$(".modal-backdrop").length>1&&$(".modal-backdrop").last().css({"z-index":parseInt($(".modal").last().prev().css("z-index"))+10})}),$(t).on("DOMNodeInserted",".modal",function(t){$(".modal").length>1&&$(".modal").last().css({"z-index":parseInt($(".modal-backdrop").last().prev().css("z-index"))+10})})}),$(function(){$(window).resize(),$(".dash-content a").click(function(t){var e=$(this).prop("href");"#"==e.substr(e.length-1)&&t.preventDefault()})}),$(window).on("resize",function(){var t=$(".dash-content .tab-content");t&&t.offset()&&t.css({"min-height":$(document).height()-t.offset().top-35+"px"});var e=$(".tabs-left");e&&t&&e.css({height:t.height()+"px"});var n=$(".section-content,.landing-screen");n&&n.offset()&&n.css({"min-height":$(document).height()-n.offset().top-35+"px" -})}); \ No newline at end of file diff --git a/src/resources/assets/css/collejo.css b/src/resources/assets/css/collejo.css deleted file mode 100644 index f150e3f..0000000 --- a/src/resources/assets/css/collejo.css +++ /dev/null @@ -1,9217 +0,0 @@ -@charset "UTF-8"; -/*! - * animate.css -http://daneden.me/animate - * Version - 3.5.1 - * Licensed under the MIT license - http://opensource.org/licenses/MIT - * - * Copyright (c) 2016 Daniel Eden - */ -.animated { - animation-duration: 1s; - animation-fill-mode: both; } - .animated.infinite { - animation-iteration-count: infinite; } - .animated.hinge { - animation-duration: 2s; } - .animated.flipOutX, .animated.flipOutY, .animated.bounceIn, .animated.bounceOut { - animation-duration: .75s; } - -@keyframes bounce { - from, 20%, 53%, 80%, to { - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - transform: translate3d(0, 0, 0); } - 40%, 43% { - animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - transform: translate3d(0, -30px, 0); } - 70% { - animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - transform: translate3d(0, -15px, 0); } - 90% { - transform: translate3d(0, -4px, 0); } } - -.bounce { - animation-name: bounce; - transform-origin: center bottom; } - -@keyframes flash { - from, 50%, to { - opacity: 1; } - 25%, 75% { - opacity: 0; } } - -.flash { - animation-name: flash; } - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@keyframes pulse { - from { - transform: scale3d(1, 1, 1); } - 50% { - transform: scale3d(1.05, 1.05, 1.05); } - to { - transform: scale3d(1, 1, 1); } } - -.pulse { - animation-name: pulse; } - -@keyframes rubberBand { - from { - transform: scale3d(1, 1, 1); } - 30% { - transform: scale3d(1.25, 0.75, 1); } - 40% { - transform: scale3d(0.75, 1.25, 1); } - 50% { - transform: scale3d(1.15, 0.85, 1); } - 65% { - transform: scale3d(0.95, 1.05, 1); } - 75% { - transform: scale3d(1.05, 0.95, 1); } - to { - transform: scale3d(1, 1, 1); } } - -.rubberBand { - animation-name: rubberBand; } - -@keyframes shake { - from, to { - transform: translate3d(0, 0, 0); } - 10%, 30%, 50%, 70%, 90% { - transform: translate3d(-10px, 0, 0); } - 20%, 40%, 60%, 80% { - transform: translate3d(10px, 0, 0); } } - -.shake { - animation-name: shake; } - -@keyframes headShake { - 0% { - transform: translateX(0); } - 6.5% { - transform: translateX(-6px) rotateY(-9deg); } - 18.5% { - transform: translateX(5px) rotateY(7deg); } - 31.5% { - transform: translateX(-3px) rotateY(-5deg); } - 43.5% { - transform: translateX(2px) rotateY(3deg); } - 50% { - transform: translateX(0); } } - -.headShake { - animation-timing-function: ease-in-out; - animation-name: headShake; } - -@keyframes swing { - 20% { - transform: rotate3d(0, 0, 1, 15deg); } - 40% { - transform: rotate3d(0, 0, 1, -10deg); } - 60% { - transform: rotate3d(0, 0, 1, 5deg); } - 80% { - transform: rotate3d(0, 0, 1, -5deg); } - to { - transform: rotate3d(0, 0, 1, 0deg); } } - -.swing { - transform-origin: top center; - animation-name: swing; } - -@keyframes tada { - from { - transform: scale3d(1, 1, 1); } - 10%, 20% { - transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); } - 30%, 50%, 70%, 90% { - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); } - 40%, 60%, 80% { - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); } - to { - transform: scale3d(1, 1, 1); } } - -.tada { - animation-name: tada; } - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@keyframes wobble { - from { - transform: none; } - 15% { - transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); } - 30% { - transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); } - 45% { - transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); } - 60% { - transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); } - 75% { - transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); } - to { - transform: none; } } - -.wobble { - animation-name: wobble; } - -@keyframes jello { - from, 11.1%, to { - transform: none; } - 22.2% { - transform: skewX(-12.5deg) skewY(-12.5deg); } - 33.3% { - transform: skewX(6.25deg) skewY(6.25deg); } - 44.4% { - transform: skewX(-3.125deg) skewY(-3.125deg); } - 55.5% { - transform: skewX(1.5625deg) skewY(1.5625deg); } - 66.6% { - transform: skewX(-0.78125deg) skewY(-0.78125deg); } - 77.7% { - transform: skewX(0.39063deg) skewY(0.39063deg); } - 88.8% { - transform: skewX(-0.19531deg) skewY(-0.19531deg); } } - -.jello { - animation-name: jello; - transform-origin: center; } - -@keyframes bounceIn { - from, 20%, 40%, 60%, 80%, to { - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } - 0% { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); } - 20% { - transform: scale3d(1.1, 1.1, 1.1); } - 40% { - transform: scale3d(0.9, 0.9, 0.9); } - 60% { - opacity: 1; - transform: scale3d(1.03, 1.03, 1.03); } - 80% { - transform: scale3d(0.97, 0.97, 0.97); } - to { - opacity: 1; - transform: scale3d(1, 1, 1); } } - -.bounceIn { - animation-name: bounceIn; } - -@keyframes bounceInDown { - from, 60%, 75%, 90%, to { - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } - 0% { - opacity: 0; - transform: translate3d(0, -3000px, 0); } - 60% { - opacity: 1; - transform: translate3d(0, 25px, 0); } - 75% { - transform: translate3d(0, -10px, 0); } - 90% { - transform: translate3d(0, 5px, 0); } - to { - transform: none; } } - -.bounceInDown { - animation-name: bounceInDown; } - -@keyframes bounceInLeft { - from, 60%, 75%, 90%, to { - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } - 0% { - opacity: 0; - transform: translate3d(-3000px, 0, 0); } - 60% { - opacity: 1; - transform: translate3d(25px, 0, 0); } - 75% { - transform: translate3d(-10px, 0, 0); } - 90% { - transform: translate3d(5px, 0, 0); } - to { - transform: none; } } - -.bounceInLeft { - animation-name: bounceInLeft; } - -@keyframes bounceInRight { - from, 60%, 75%, 90%, to { - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } - from { - opacity: 0; - transform: translate3d(3000px, 0, 0); } - 60% { - opacity: 1; - transform: translate3d(-25px, 0, 0); } - 75% { - transform: translate3d(10px, 0, 0); } - 90% { - transform: translate3d(-5px, 0, 0); } - to { - transform: none; } } - -.bounceInRight { - animation-name: bounceInRight; } - -@keyframes bounceInUp { - from, 60%, 75%, 90%, to { - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } - from { - opacity: 0; - transform: translate3d(0, 3000px, 0); } - 60% { - opacity: 1; - transform: translate3d(0, -20px, 0); } - 75% { - transform: translate3d(0, 10px, 0); } - 90% { - transform: translate3d(0, -5px, 0); } - to { - transform: translate3d(0, 0, 0); } } - -.bounceInUp { - animation-name: bounceInUp; } - -@keyframes bounceOut { - 20% { - transform: scale3d(0.9, 0.9, 0.9); } - 50%, 55% { - opacity: 1; - transform: scale3d(1.1, 1.1, 1.1); } - to { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); } } - -.bounceOut { - animation-name: bounceOut; } - -@keyframes bounceOutDown { - 20% { - transform: translate3d(0, 10px, 0); } - 40%, 45% { - opacity: 1; - transform: translate3d(0, -20px, 0); } - to { - opacity: 0; - transform: translate3d(0, 2000px, 0); } } - -.bounceOutDown { - animation-name: bounceOutDown; } - -@keyframes bounceOutLeft { - 20% { - opacity: 1; - transform: translate3d(20px, 0, 0); } - to { - opacity: 0; - transform: translate3d(-2000px, 0, 0); } } - -.bounceOutLeft { - animation-name: bounceOutLeft; } - -@keyframes bounceOutRight { - 20% { - opacity: 1; - transform: translate3d(-20px, 0, 0); } - to { - opacity: 0; - transform: translate3d(2000px, 0, 0); } } - -.bounceOutRight { - animation-name: bounceOutRight; } - -@keyframes bounceOutUp { - 20% { - transform: translate3d(0, -10px, 0); } - 40%, 45% { - opacity: 1; - transform: translate3d(0, 20px, 0); } - to { - opacity: 0; - transform: translate3d(0, -2000px, 0); } } - -.bounceOutUp { - animation-name: bounceOutUp; } - -@keyframes fadeIn { - from { - opacity: 0; } - to { - opacity: 1; } } - -.fadeIn { - animation-name: fadeIn; } - -@keyframes fadeInDown { - from { - opacity: 0; - transform: translate3d(0, -100%, 0); } - to { - opacity: 1; - transform: none; } } - -.fadeInDown { - animation-name: fadeInDown; } - -@keyframes fadeInDownBig { - from { - opacity: 0; - transform: translate3d(0, -2000px, 0); } - to { - opacity: 1; - transform: none; } } - -.fadeInDownBig { - animation-name: fadeInDownBig; } - -@keyframes fadeInLeft { - from { - opacity: 0; - transform: translate3d(-100%, 0, 0); } - to { - opacity: 1; - transform: none; } } - -.fadeInLeft { - animation-name: fadeInLeft; } - -@keyframes fadeInLeftBig { - from { - opacity: 0; - transform: translate3d(-2000px, 0, 0); } - to { - opacity: 1; - transform: none; } } - -.fadeInLeftBig { - animation-name: fadeInLeftBig; } - -@keyframes fadeInRight { - from { - opacity: 0; - transform: translate3d(100%, 0, 0); } - to { - opacity: 1; - transform: none; } } - -.fadeInRight { - animation-name: fadeInRight; } - -@keyframes fadeInRightBig { - from { - opacity: 0; - transform: translate3d(2000px, 0, 0); } - to { - opacity: 1; - transform: none; } } - -.fadeInRightBig { - animation-name: fadeInRightBig; } - -@keyframes fadeInUp { - from { - opacity: 0; - transform: translate3d(0, 100%, 0); } - to { - opacity: 1; - transform: none; } } - -.fadeInUp { - animation-name: fadeInUp; } - -@keyframes fadeInUpBig { - from { - opacity: 0; - transform: translate3d(0, 2000px, 0); } - to { - opacity: 1; - transform: none; } } - -.fadeInUpBig { - animation-name: fadeInUpBig; } - -@keyframes fadeOut { - from { - opacity: 1; } - to { - opacity: 0; } } - -.fadeOut { - animation-name: fadeOut; } - -@keyframes fadeOutDown { - from { - opacity: 1; } - to { - opacity: 0; - transform: translate3d(0, 100%, 0); } } - -.fadeOutDown { - animation-name: fadeOutDown; } - -@keyframes fadeOutDownBig { - from { - opacity: 1; } - to { - opacity: 0; - transform: translate3d(0, 2000px, 0); } } - -.fadeOutDownBig { - animation-name: fadeOutDownBig; } - -@keyframes fadeOutLeft { - from { - opacity: 1; } - to { - opacity: 0; - transform: translate3d(-100%, 0, 0); } } - -.fadeOutLeft { - animation-name: fadeOutLeft; } - -@keyframes fadeOutLeftBig { - from { - opacity: 1; } - to { - opacity: 0; - transform: translate3d(-2000px, 0, 0); } } - -.fadeOutLeftBig { - animation-name: fadeOutLeftBig; } - -@keyframes fadeOutRight { - from { - opacity: 1; } - to { - opacity: 0; - transform: translate3d(100%, 0, 0); } } - -.fadeOutRight { - animation-name: fadeOutRight; } - -@keyframes fadeOutRightBig { - from { - opacity: 1; } - to { - opacity: 0; - transform: translate3d(2000px, 0, 0); } } - -.fadeOutRightBig { - animation-name: fadeOutRightBig; } - -@keyframes fadeOutUp { - from { - opacity: 1; } - to { - opacity: 0; - transform: translate3d(0, -100%, 0); } } - -.fadeOutUp { - animation-name: fadeOutUp; } - -@keyframes fadeOutUpBig { - from { - opacity: 1; } - to { - opacity: 0; - transform: translate3d(0, -2000px, 0); } } - -.fadeOutUpBig { - animation-name: fadeOutUpBig; } - -@keyframes flip { - from { - transform: perspective(400px) rotate3d(0, 1, 0, -360deg); - animation-timing-function: ease-out; } - 40% { - transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); - animation-timing-function: ease-out; } - 50% { - transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); - animation-timing-function: ease-in; } - 80% { - transform: perspective(400px) scale3d(0.95, 0.95, 0.95); - animation-timing-function: ease-in; } - to { - transform: perspective(400px); - animation-timing-function: ease-in; } } - -.animated.flip { - backface-visibility: visible; - animation-name: flip; } - -@keyframes flipInX { - from { - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - animation-timing-function: ease-in; - opacity: 0; } - 40% { - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - animation-timing-function: ease-in; } - 60% { - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; } - 80% { - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); } - to { - transform: perspective(400px); } } - -.flipInX { - backface-visibility: visible !important; - animation-name: flipInX; } - -@keyframes flipInY { - from { - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - animation-timing-function: ease-in; - opacity: 0; } - 40% { - transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - animation-timing-function: ease-in; } - 60% { - transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - opacity: 1; } - 80% { - transform: perspective(400px) rotate3d(0, 1, 0, -5deg); } - to { - transform: perspective(400px); } } - -.flipInY { - backface-visibility: visible !important; - animation-name: flipInY; } - -@keyframes flipOutX { - from { - transform: perspective(400px); } - 30% { - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; } - to { - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; } } - -.flipOutX { - animation-name: flipOutX; - backface-visibility: visible !important; } - -@keyframes flipOutY { - from { - transform: perspective(400px); } - 30% { - transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - opacity: 1; } - to { - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - opacity: 0; } } - -.flipOutY { - backface-visibility: visible !important; - animation-name: flipOutY; } - -@keyframes lightSpeedIn { - from { - transform: translate3d(100%, 0, 0) skewX(-30deg); - opacity: 0; } - 60% { - transform: skewX(20deg); - opacity: 1; } - 80% { - transform: skewX(-5deg); - opacity: 1; } - to { - transform: none; - opacity: 1; } } - -.lightSpeedIn { - animation-name: lightSpeedIn; - animation-timing-function: ease-out; } - -@keyframes lightSpeedOut { - from { - opacity: 1; } - to { - transform: translate3d(100%, 0, 0) skewX(30deg); - opacity: 0; } } - -.lightSpeedOut { - animation-name: lightSpeedOut; - animation-timing-function: ease-in; } - -@keyframes rotateIn { - from { - transform-origin: center; - transform: rotate3d(0, 0, 1, -200deg); - opacity: 0; } - to { - transform-origin: center; - transform: none; - opacity: 1; } } - -.rotateIn { - animation-name: rotateIn; } - -@keyframes rotateInDownLeft { - from { - transform-origin: left bottom; - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; } - to { - transform-origin: left bottom; - transform: none; - opacity: 1; } } - -.rotateInDownLeft { - animation-name: rotateInDownLeft; } - -@keyframes rotateInDownRight { - from { - transform-origin: right bottom; - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; } - to { - transform-origin: right bottom; - transform: none; - opacity: 1; } } - -.rotateInDownRight { - animation-name: rotateInDownRight; } - -@keyframes rotateInUpLeft { - from { - transform-origin: left bottom; - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; } - to { - transform-origin: left bottom; - transform: none; - opacity: 1; } } - -.rotateInUpLeft { - animation-name: rotateInUpLeft; } - -@keyframes rotateInUpRight { - from { - transform-origin: right bottom; - transform: rotate3d(0, 0, 1, -90deg); - opacity: 0; } - to { - transform-origin: right bottom; - transform: none; - opacity: 1; } } - -.rotateInUpRight { - animation-name: rotateInUpRight; } - -@keyframes rotateOut { - from { - transform-origin: center; - opacity: 1; } - to { - transform-origin: center; - transform: rotate3d(0, 0, 1, 200deg); - opacity: 0; } } - -.rotateOut { - animation-name: rotateOut; } - -@keyframes rotateOutDownLeft { - from { - transform-origin: left bottom; - opacity: 1; } - to { - transform-origin: left bottom; - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; } } - -.rotateOutDownLeft { - animation-name: rotateOutDownLeft; } - -@keyframes rotateOutDownRight { - from { - transform-origin: right bottom; - opacity: 1; } - to { - transform-origin: right bottom; - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; } } - -.rotateOutDownRight { - animation-name: rotateOutDownRight; } - -@keyframes rotateOutUpLeft { - from { - transform-origin: left bottom; - opacity: 1; } - to { - transform-origin: left bottom; - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; } } - -.rotateOutUpLeft { - animation-name: rotateOutUpLeft; } - -@keyframes rotateOutUpRight { - from { - transform-origin: right bottom; - opacity: 1; } - to { - transform-origin: right bottom; - transform: rotate3d(0, 0, 1, 90deg); - opacity: 0; } } - -.rotateOutUpRight { - animation-name: rotateOutUpRight; } - -@keyframes hinge { - 0% { - transform-origin: top left; - animation-timing-function: ease-in-out; } - 20%, 60% { - transform: rotate3d(0, 0, 1, 80deg); - transform-origin: top left; - animation-timing-function: ease-in-out; } - 40%, 80% { - transform: rotate3d(0, 0, 1, 60deg); - transform-origin: top left; - animation-timing-function: ease-in-out; - opacity: 1; } - to { - transform: translate3d(0, 700px, 0); - opacity: 0; } } - -.hinge { - animation-name: hinge; } - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@keyframes rollIn { - from { - opacity: 0; - transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); } - to { - opacity: 1; - transform: none; } } - -.rollIn { - animation-name: rollIn; } - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@keyframes rollOut { - from { - opacity: 1; } - to { - opacity: 0; - transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } } - -.rollOut { - animation-name: rollOut; } - -@keyframes zoomIn { - from { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); } - 50% { - opacity: 1; } } - -.zoomIn { - animation-name: zoomIn; } - -@keyframes zoomInDown { - from { - opacity: 0; - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } - 60% { - opacity: 1; - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } - -.zoomInDown { - animation-name: zoomInDown; } - -@keyframes zoomInLeft { - from { - opacity: 0; - transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } - 60% { - opacity: 1; - transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } - -.zoomInLeft { - animation-name: zoomInLeft; } - -@keyframes zoomInRight { - from { - opacity: 0; - transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } - 60% { - opacity: 1; - transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } - -.zoomInRight { - animation-name: zoomInRight; } - -@keyframes zoomInUp { - from { - opacity: 0; - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } - 60% { - opacity: 1; - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } - -.zoomInUp { - animation-name: zoomInUp; } - -@keyframes zoomOut { - from { - opacity: 1; } - 50% { - opacity: 0; - transform: scale3d(0.3, 0.3, 0.3); } - to { - opacity: 0; } } - -.zoomOut { - animation-name: zoomOut; } - -@keyframes zoomOutDown { - 40% { - opacity: 1; - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } - to { - opacity: 0; - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); - transform-origin: center bottom; - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } - -.zoomOutDown { - animation-name: zoomOutDown; } - -@keyframes zoomOutLeft { - 40% { - opacity: 1; - transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); } - to { - opacity: 0; - transform: scale(0.1) translate3d(-2000px, 0, 0); - transform-origin: left center; } } - -.zoomOutLeft { - animation-name: zoomOutLeft; } - -@keyframes zoomOutRight { - 40% { - opacity: 1; - transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); } - to { - opacity: 0; - transform: scale(0.1) translate3d(2000px, 0, 0); - transform-origin: right center; } } - -.zoomOutRight { - animation-name: zoomOutRight; } - -@keyframes zoomOutUp { - 40% { - opacity: 1; - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } - to { - opacity: 0; - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); - transform-origin: center bottom; - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } - -.zoomOutUp { - animation-name: zoomOutUp; } - -@keyframes slideInDown { - from { - transform: translate3d(0, -100%, 0); - visibility: visible; } - to { - transform: translate3d(0, 0, 0); } } - -.slideInDown { - animation-name: slideInDown; } - -@keyframes slideInLeft { - from { - transform: translate3d(-100%, 0, 0); - visibility: visible; } - to { - transform: translate3d(0, 0, 0); } } - -.slideInLeft { - animation-name: slideInLeft; } - -@keyframes slideInRight { - from { - transform: translate3d(100%, 0, 0); - visibility: visible; } - to { - transform: translate3d(0, 0, 0); } } - -.slideInRight { - animation-name: slideInRight; } - -@keyframes slideInUp { - from { - transform: translate3d(0, 100%, 0); - visibility: visible; } - to { - transform: translate3d(0, 0, 0); } } - -.slideInUp { - animation-name: slideInUp; } - -@keyframes slideOutDown { - from { - transform: translate3d(0, 0, 0); } - to { - visibility: hidden; - transform: translate3d(0, 100%, 0); } } - -.slideOutDown { - animation-name: slideOutDown; } - -@keyframes slideOutLeft { - from { - transform: translate3d(0, 0, 0); } - to { - visibility: hidden; - transform: translate3d(-100%, 0, 0); } } - -.slideOutLeft { - animation-name: slideOutLeft; } - -@keyframes slideOutRight { - from { - transform: translate3d(0, 0, 0); } - to { - visibility: hidden; - transform: translate3d(100%, 0, 0); } } - -.slideOutRight { - animation-name: slideOutRight; } - -@keyframes slideOutUp { - from { - transform: translate3d(0, 0, 0); } - to { - visibility: hidden; - transform: translate3d(0, -100%, 0); } } - -.slideOutUp { - animation-name: slideOutUp; } - -/** - * selectize.bootstrap3.css (v0.12.1) - Bootstrap 3 Theme - * Copyright (c) 2013–2015 Brian Reavis & contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this - * file except in compliance with the License. You may obtain a copy of the License at: - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under - * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF - * ANY KIND, either express or implied. See the License for the specific language - * governing permissions and limitations under the License. - * - * @author Brian Reavis - */ -.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder { - visibility: visible !important; - background: #f2f2f2 !important; - background: rgba(0, 0, 0, 0.06) !important; - border: 0 none !important; - box-shadow: inset 0 0 12px 4px #ffffff; } - -.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after { - content: '!'; - visibility: hidden; } - -.selectize-control.plugin-drag_drop .ui-sortable-helper { - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); } - -.selectize-dropdown-header { - position: relative; - padding: 3px 12px; - border-bottom: 1px solid #d0d0d0; - background: #f8f8f8; - border-radius: 4px 4px 0 0; } - -.selectize-dropdown-header-close { - position: absolute; - right: 12px; - top: 50%; - color: #333333; - opacity: 0.4; - margin-top: -12px; - line-height: 20px; - font-size: 20px !important; } - -.selectize-dropdown-header-close:hover { - color: #000000; } - -.selectize-dropdown.plugin-optgroup_columns .optgroup { - border-right: 1px solid #f2f2f2; - border-top: 0 none; - float: left; - box-sizing: border-box; } - -.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child { - border-right: 0 none; } - -.selectize-dropdown.plugin-optgroup_columns .optgroup:before { - display: none; } - -.selectize-dropdown.plugin-optgroup_columns .optgroup-header { - border-top: 0 none; } - -.selectize-control.plugin-remove_button [data-value] { - position: relative; - padding-right: 24px !important; } - -.selectize-control.plugin-remove_button [data-value] .remove { - z-index: 1; - /* fixes ie bug (see #392) */ - position: absolute; - top: 0; - right: 0; - bottom: 0; - width: 17px; - text-align: center; - font-weight: bold; - font-size: 12px; - color: inherit; - text-decoration: none; - vertical-align: middle; - display: inline-block; - padding: 1px 0 0 0; - border-left: 1px solid transparent; - border-radius: 0 2px 2px 0; - box-sizing: border-box; } - -.selectize-control.plugin-remove_button [data-value] .remove:hover { - background: rgba(0, 0, 0, 0.05); } - -.selectize-control.plugin-remove_button [data-value].active .remove { - border-left-color: transparent; } - -.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover { - background: none; } - -.selectize-control.plugin-remove_button .disabled [data-value] .remove { - border-left-color: rgba(77, 77, 77, 0); } - -.selectize-control { - position: relative; } - -.selectize-dropdown, -.selectize-input, -.selectize-input input { - color: #333333; - font-family: inherit; - font-size: inherit; - line-height: 20px; - -webkit-font-smoothing: inherit; } - -.selectize-input, -.selectize-control.single .selectize-input.input-active { - background: #ffffff; - cursor: text; - display: inline-block; } - -.selectize-input { - border: 1px solid #cccccc; - padding: 6px 12px; - display: inline-block; - width: 100%; - overflow: hidden; - position: relative; - z-index: 1; - box-sizing: border-box; - box-shadow: none; - border-radius: 4px; } - -.selectize-control.multi .selectize-input.has-items { - padding: 5px 12px 2px; } - -.selectize-input.full { - background-color: #ffffff; } - -.selectize-input.disabled, -.selectize-input.disabled * { - cursor: default !important; } - -.selectize-input.focus { - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); } - -.selectize-input.dropdown-active { - border-radius: 4px 4px 0 0; } - -.selectize-input > * { - vertical-align: baseline; - display: -moz-inline-stack; - display: inline-block; - zoom: 1; - *display: inline; } - -.selectize-control.multi .selectize-input > div { - cursor: pointer; - margin: 0 3px 3px 0; - padding: 1px 3px; - background: #efefef; - color: #333333; - border: 0 solid transparent; } - -.selectize-control.multi .selectize-input > div.active { - background: #428bca; - color: #ffffff; - border: 0 solid transparent; } - -.selectize-control.multi .selectize-input.disabled > div, -.selectize-control.multi .selectize-input.disabled > div.active { - color: #808080; - background: #ffffff; - border: 0 solid rgba(77, 77, 77, 0); } - -.selectize-input > input { - display: inline-block !important; - padding: 0 !important; - min-height: 0 !important; - max-height: none !important; - max-width: 100% !important; - margin: 0 !important; - text-indent: 0 !important; - border: 0 none !important; - background: none !important; - line-height: inherit !important; - -webkit-user-select: auto !important; - box-shadow: none !important; } - -.selectize-input > input::-ms-clear { - display: none; } - -.selectize-input > input:focus { - outline: none !important; } - -.selectize-input::after { - content: ' '; - display: block; - clear: left; } - -.selectize-input.dropdown-active::before { - content: ' '; - display: block; - position: absolute; - background: #ffffff; - height: 1px; - bottom: 0; - left: 0; - right: 0; } - -.selectize-dropdown { - position: absolute; - z-index: 10; - border: 1px solid #d0d0d0; - background: #ffffff; - margin: -1px 0 0 0; - border-top: 0 none; - box-sizing: border-box; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - border-radius: 0 0 4px 4px; } - -.selectize-dropdown [data-selectable] { - cursor: pointer; - overflow: hidden; } - -.selectize-dropdown [data-selectable] .highlight { - background: rgba(255, 237, 40, 0.4); - border-radius: 1px; } - -.selectize-dropdown [data-selectable], -.selectize-dropdown .optgroup-header { - padding: 3px 12px; } - -.selectize-dropdown .optgroup:first-child .optgroup-header { - border-top: 0 none; } - -.selectize-dropdown .optgroup-header { - color: #777777; - background: #ffffff; - cursor: default; } - -.selectize-dropdown .active { - background-color: #f5f5f5; - color: #262626; } - -.selectize-dropdown .active.create { - color: #262626; } - -.selectize-dropdown .create { - color: rgba(51, 51, 51, 0.5); } - -.selectize-dropdown-content { - overflow-y: auto; - overflow-x: hidden; - max-height: 200px; } - -.selectize-control.single .selectize-input, -.selectize-control.single .selectize-input input { - cursor: pointer; } - -.selectize-control.single .selectize-input.input-active, -.selectize-control.single .selectize-input.input-active input { - cursor: text; } - -.selectize-control.single .selectize-input:after { - content: ' '; - display: block; - position: absolute; - top: 50%; - right: 17px; - margin-top: -3px; - width: 0; - height: 0; - border-style: solid; - border-width: 5px 5px 0 5px; - border-color: #333333 transparent transparent transparent; } - -.selectize-control.single .selectize-input.dropdown-active:after { - margin-top: -4px; - border-width: 0 5px 5px 5px; - border-color: transparent transparent #333333 transparent; } - -.selectize-control.rtl.single .selectize-input:after { - left: 17px; - right: auto; } - -.selectize-control.rtl .selectize-input > input { - margin: 0 4px 0 -2px !important; } - -.selectize-control .selectize-input.disabled { - opacity: 0.5; - background-color: #ffffff; } - -.selectize-dropdown, -.selectize-dropdown.form-control { - height: auto; - padding: 0; - margin: 2px 0 0 0; - z-index: 1000; - background: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); } - -.selectize-dropdown .optgroup-header { - font-size: 12px; - line-height: 1.42857143; } - -.selectize-dropdown .optgroup:first-child:before { - display: none; } - -.selectize-dropdown .optgroup:before { - content: ' '; - display: block; - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; - margin-left: -12px; - margin-right: -12px; } - -.selectize-dropdown-content { - padding: 5px 0; } - -.selectize-dropdown-header { - padding: 6px 12px; } - -.selectize-input { - min-height: 34px; } - -.selectize-input.dropdown-active { - border-radius: 4px; } - -.selectize-input.dropdown-active::before { - display: none; } - -.selectize-input.focus { - border-color: #66afe9; - outline: 0; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } - -.has-error .selectize-input { - border-color: #a94442; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } - -.has-error .selectize-input:focus { - border-color: #843534; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; } - -.selectize-control.multi .selectize-input.has-items { - padding-left: 9px; - padding-right: 9px; } - -.selectize-control.multi .selectize-input > div { - border-radius: 3px; } - -.form-control.selectize-control { - padding: 0; - border: none; - background: none; - box-shadow: none; - border-radius: 0; } - -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; } - -body { - margin: 0; } - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; } - -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; } - -audio:not([controls]) { - display: none; - height: 0; } - -[hidden], -template { - display: none; } - -a { - background-color: transparent; } - -a:active, -a:hover { - outline: 0; } - -abbr[title] { - border-bottom: 1px dotted; } - -b, -strong { - font-weight: bold; } - -dfn { - font-style: italic; } - -h1 { - font-size: 2em; - margin: 0.67em 0; } - -mark { - background: #ff0; - color: #000; } - -small { - font-size: 80%; } - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -img { - border: 0; } - -svg:not(:root) { - overflow: hidden; } - -figure { - margin: 1em 40px; } - -hr { - box-sizing: content-box; - height: 0; } - -pre { - overflow: auto; } - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; } - -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; } - -button { - overflow: visible; } - -button, -select { - text-transform: none; } - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; } - -button[disabled], -html input[disabled] { - cursor: default; } - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; } - -input { - line-height: normal; } - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; } - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; } - -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; } - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; } - -legend { - border: 0; - padding: 0; } - -textarea { - overflow: auto; } - -optgroup { - font-weight: bold; } - -table { - border-collapse: collapse; - border-spacing: 0; } - -td, -th { - padding: 0; } - -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - background: transparent !important; - color: #000 !important; - box-shadow: none !important; - text-shadow: none !important; } - a, - a:visited { - text-decoration: underline; } - a[href]:after { - content: " (" attr(href) ")"; } - abbr[title]:after { - content: " (" attr(title) ")"; } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; } - thead { - display: table-header-group; } - tr, - img { - page-break-inside: avoid; } - img { - max-width: 100% !important; } - p, - h2, - h3 { - orphans: 3; - widows: 3; } - h2, - h3 { - page-break-after: avoid; } - .navbar { - display: none; } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; } - .label { - border: 1px solid #000; } - .table { - border-collapse: collapse !important; } - .table td, - .table th { - background-color: #fff !important; } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; } } - -* { - box-sizing: border-box; } - -*:before, -*:after { - box-sizing: border-box; } - -html { - font-size: 10px; - -webkit-tap-highlight-color: transparent; } - -body { - font-family: "Roboto", sans-serif; - font-size: 14px; - line-height: 1.428571429; - color: #333333; - background-color: #fff; } - -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; } - -a { - color: #2487ca; - text-decoration: none; } - a:hover, a:focus { - color: #185c89; - text-decoration: underline; } - a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; } - -figure { - margin: 0; } - -img { - vertical-align: middle; } - -.img-responsive { - display: block; - max-width: 100%; - height: auto; } - -.img-rounded { - border-radius: 6px; } - -.img-thumbnail { - padding: 4px; - line-height: 1.428571429; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; } - -.img-circle { - border-radius: 50%; } - -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; } - -.sr-only, .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after, .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after, .bootstrap-datetimepicker-widget .btn[data-action="today"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; } - -.sr-only-focusable:active, .sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; } - -[role="button"] { - cursor: pointer; } - -h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5, .h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; } - h1 small, - h1 .small, h2 small, - h2 .small, h3 small, - h3 .small, h4 small, - h4 .small, h5 small, - h5 .small, h6 small, - h6 .small, - .h1 small, - .h1 .small, .h2 small, - .h2 .small, .h3 small, - .h3 .small, .h4 small, - .h4 .small, .h5 small, - .h5 .small, .h6 small, - .h6 .small { - font-weight: normal; - line-height: 1; - color: #777777; } - -h1, .h1, -h2, .h2, -h3, .h3 { - margin-top: 20px; - margin-bottom: 10px; } - h1 small, - h1 .small, .h1 small, - .h1 .small, - h2 small, - h2 .small, .h2 small, - .h2 .small, - h3 small, - h3 .small, .h3 small, - .h3 .small { - font-size: 65%; } - -h4, .h4, -h5, .h5, -h6, .h6 { - margin-top: 10px; - margin-bottom: 10px; } - h4 small, - h4 .small, .h4 small, - .h4 .small, - h5 small, - h5 .small, .h5 small, - .h5 .small, - h6 small, - h6 .small, .h6 small, - .h6 .small { - font-size: 75%; } - -h1, .h1 { - font-size: 36px; } - -h2, .h2 { - font-size: 30px; } - -h3, .h3 { - font-size: 24px; } - -h4, .h4 { - font-size: 18px; } - -h5, .h5 { - font-size: 14px; } - -h6, .h6 { - font-size: 12px; } - -p { - margin: 0 0 10px; } - -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; } - @media (min-width: 768px) { - .lead { - font-size: 21px; } } - -small, -.small { - font-size: 85%; } - -mark, -.mark { - background-color: #fcf8e3; - padding: .2em; } - -.text-left { - text-align: left; } - -.text-right, .dash-content .table td.tools-column { - text-align: right; } - -.text-center { - text-align: center; } - -.text-justify { - text-align: justify; } - -.text-nowrap { - white-space: nowrap; } - -.text-lowercase { - text-transform: lowercase; } - -.text-uppercase, .initialism { - text-transform: uppercase; } - -.text-capitalize { - text-transform: capitalize; } - -.text-muted { - color: #777777; } - -.text-primary { - color: #2487ca; } - -a.text-primary:hover, -a.text-primary:focus { - color: #1c6a9f; } - -.text-success { - color: #3c763d; } - -a.text-success:hover, -a.text-success:focus { - color: #2b542c; } - -.text-info { - color: #31708f; } - -a.text-info:hover, -a.text-info:focus { - color: #245269; } - -.text-warning { - color: #8a6d3b; } - -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; } - -.text-danger { - color: #a94442; } - -a.text-danger:hover, -a.text-danger:focus { - color: #843534; } - -.bg-primary { - color: #fff; } - -.bg-primary { - background-color: #2487ca; } - -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #1c6a9f; } - -.bg-success { - background-color: #dff0d8; } - -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; } - -.bg-info { - background-color: #d9edf7; } - -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; } - -.bg-warning { - background-color: #fcf8e3; } - -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; } - -.bg-danger { - background-color: #f2dede; } - -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; } - -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; } - -ul, -ol { - margin-top: 0; - margin-bottom: 10px; } - ul ul, - ul ol, - ol ul, - ol ol { - margin-bottom: 0; } - -.list-unstyled { - padding-left: 0; - list-style: none; } - -.list-inline { - padding-left: 0; - list-style: none; - margin-left: -5px; } - .list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; } - -dl { - margin-top: 0; - margin-bottom: 20px; } - -dt, -dd { - line-height: 1.428571429; } - -dt { - font-weight: bold; } - -dd { - margin-left: 0; } - -.dl-horizontal dd:before, .dl-horizontal dd:after { - content: " "; - display: table; } - -.dl-horizontal dd:after { - clear: both; } - -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; } - .dl-horizontal dd { - margin-left: 180px; } } - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777777; } - -.initialism { - font-size: 90%; } - -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eeeeee; } - blockquote p:last-child, - blockquote ul:last-child, - blockquote ol:last-child { - margin-bottom: 0; } - blockquote footer, - blockquote small, - blockquote .small { - display: block; - font-size: 80%; - line-height: 1.428571429; - color: #777777; } - blockquote footer:before, - blockquote small:before, - blockquote .small:before { - content: '\2014 \00A0'; } - -.blockquote-reverse, -blockquote.pull-right, -.panel .panel-footer blockquote.tools-footer { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; - text-align: right; } - .blockquote-reverse footer:before, - .blockquote-reverse small:before, - .blockquote-reverse .small:before, - blockquote.pull-right footer:before, .panel .panel-footer blockquote.tools-footer footer:before, - blockquote.pull-right small:before, .panel .panel-footer blockquote.tools-footer small:before, - blockquote.pull-right .small:before, .panel .panel-footer blockquote.tools-footer .small:before { - content: ''; } - .blockquote-reverse footer:after, - .blockquote-reverse small:after, - .blockquote-reverse .small:after, - blockquote.pull-right footer:after, .panel .panel-footer blockquote.tools-footer footer:after, - blockquote.pull-right small:after, .panel .panel-footer blockquote.tools-footer small:after, - blockquote.pull-right .small:after, .panel .panel-footer blockquote.tools-footer .small:after { - content: '\00A0 \2014'; } - -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.428571429; } - -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; } - -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; } - -kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); } - kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - box-shadow: none; } - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.428571429; - word-break: break-all; - word-wrap: break-word; - color: #333333; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px; } - pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; } - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; } - -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; } - .container:before, .container:after { - content: " "; - display: table; } - .container:after { - clear: both; } - @media (min-width: 768px) { - .container { - width: 750px; } } - @media (min-width: 992px) { - .container { - width: 970px; } } - @media (min-width: 1200px) { - .container { - width: 1170px; } } - -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; } - .container-fluid:before, .container-fluid:after { - content: " "; - display: table; } - .container-fluid:after { - clear: both; } - -.row { - margin-left: -15px; - margin-right: -15px; } - .row:before, .row:after { - content: " "; - display: table; } - .row:after { - clear: both; } - -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; } - -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; } - -.col-xs-1 { - width: 8.3333333333%; } - -.col-xs-2 { - width: 16.6666666667%; } - -.col-xs-3 { - width: 25%; } - -.col-xs-4 { - width: 33.3333333333%; } - -.col-xs-5 { - width: 41.6666666667%; } - -.col-xs-6 { - width: 50%; } - -.col-xs-7 { - width: 58.3333333333%; } - -.col-xs-8 { - width: 66.6666666667%; } - -.col-xs-9 { - width: 75%; } - -.col-xs-10 { - width: 83.3333333333%; } - -.col-xs-11 { - width: 91.6666666667%; } - -.col-xs-12 { - width: 100%; } - -.col-xs-pull-0 { - right: auto; } - -.col-xs-pull-1 { - right: 8.3333333333%; } - -.col-xs-pull-2 { - right: 16.6666666667%; } - -.col-xs-pull-3 { - right: 25%; } - -.col-xs-pull-4 { - right: 33.3333333333%; } - -.col-xs-pull-5 { - right: 41.6666666667%; } - -.col-xs-pull-6 { - right: 50%; } - -.col-xs-pull-7 { - right: 58.3333333333%; } - -.col-xs-pull-8 { - right: 66.6666666667%; } - -.col-xs-pull-9 { - right: 75%; } - -.col-xs-pull-10 { - right: 83.3333333333%; } - -.col-xs-pull-11 { - right: 91.6666666667%; } - -.col-xs-pull-12 { - right: 100%; } - -.col-xs-push-0 { - left: auto; } - -.col-xs-push-1 { - left: 8.3333333333%; } - -.col-xs-push-2 { - left: 16.6666666667%; } - -.col-xs-push-3 { - left: 25%; } - -.col-xs-push-4 { - left: 33.3333333333%; } - -.col-xs-push-5 { - left: 41.6666666667%; } - -.col-xs-push-6 { - left: 50%; } - -.col-xs-push-7 { - left: 58.3333333333%; } - -.col-xs-push-8 { - left: 66.6666666667%; } - -.col-xs-push-9 { - left: 75%; } - -.col-xs-push-10 { - left: 83.3333333333%; } - -.col-xs-push-11 { - left: 91.6666666667%; } - -.col-xs-push-12 { - left: 100%; } - -.col-xs-offset-0 { - margin-left: 0%; } - -.col-xs-offset-1 { - margin-left: 8.3333333333%; } - -.col-xs-offset-2 { - margin-left: 16.6666666667%; } - -.col-xs-offset-3 { - margin-left: 25%; } - -.col-xs-offset-4 { - margin-left: 33.3333333333%; } - -.col-xs-offset-5 { - margin-left: 41.6666666667%; } - -.col-xs-offset-6 { - margin-left: 50%; } - -.col-xs-offset-7 { - margin-left: 58.3333333333%; } - -.col-xs-offset-8 { - margin-left: 66.6666666667%; } - -.col-xs-offset-9 { - margin-left: 75%; } - -.col-xs-offset-10 { - margin-left: 83.3333333333%; } - -.col-xs-offset-11 { - margin-left: 91.6666666667%; } - -.col-xs-offset-12 { - margin-left: 100%; } - -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; } - .col-sm-1 { - width: 8.3333333333%; } - .col-sm-2 { - width: 16.6666666667%; } - .col-sm-3 { - width: 25%; } - .col-sm-4 { - width: 33.3333333333%; } - .col-sm-5 { - width: 41.6666666667%; } - .col-sm-6 { - width: 50%; } - .col-sm-7 { - width: 58.3333333333%; } - .col-sm-8 { - width: 66.6666666667%; } - .col-sm-9 { - width: 75%; } - .col-sm-10 { - width: 83.3333333333%; } - .col-sm-11 { - width: 91.6666666667%; } - .col-sm-12 { - width: 100%; } - .col-sm-pull-0 { - right: auto; } - .col-sm-pull-1 { - right: 8.3333333333%; } - .col-sm-pull-2 { - right: 16.6666666667%; } - .col-sm-pull-3 { - right: 25%; } - .col-sm-pull-4 { - right: 33.3333333333%; } - .col-sm-pull-5 { - right: 41.6666666667%; } - .col-sm-pull-6 { - right: 50%; } - .col-sm-pull-7 { - right: 58.3333333333%; } - .col-sm-pull-8 { - right: 66.6666666667%; } - .col-sm-pull-9 { - right: 75%; } - .col-sm-pull-10 { - right: 83.3333333333%; } - .col-sm-pull-11 { - right: 91.6666666667%; } - .col-sm-pull-12 { - right: 100%; } - .col-sm-push-0 { - left: auto; } - .col-sm-push-1 { - left: 8.3333333333%; } - .col-sm-push-2 { - left: 16.6666666667%; } - .col-sm-push-3 { - left: 25%; } - .col-sm-push-4 { - left: 33.3333333333%; } - .col-sm-push-5 { - left: 41.6666666667%; } - .col-sm-push-6 { - left: 50%; } - .col-sm-push-7 { - left: 58.3333333333%; } - .col-sm-push-8 { - left: 66.6666666667%; } - .col-sm-push-9 { - left: 75%; } - .col-sm-push-10 { - left: 83.3333333333%; } - .col-sm-push-11 { - left: 91.6666666667%; } - .col-sm-push-12 { - left: 100%; } - .col-sm-offset-0 { - margin-left: 0%; } - .col-sm-offset-1 { - margin-left: 8.3333333333%; } - .col-sm-offset-2 { - margin-left: 16.6666666667%; } - .col-sm-offset-3 { - margin-left: 25%; } - .col-sm-offset-4 { - margin-left: 33.3333333333%; } - .col-sm-offset-5 { - margin-left: 41.6666666667%; } - .col-sm-offset-6 { - margin-left: 50%; } - .col-sm-offset-7 { - margin-left: 58.3333333333%; } - .col-sm-offset-8 { - margin-left: 66.6666666667%; } - .col-sm-offset-9 { - margin-left: 75%; } - .col-sm-offset-10 { - margin-left: 83.3333333333%; } - .col-sm-offset-11 { - margin-left: 91.6666666667%; } - .col-sm-offset-12 { - margin-left: 100%; } } - -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; } - .col-md-1 { - width: 8.3333333333%; } - .col-md-2 { - width: 16.6666666667%; } - .col-md-3 { - width: 25%; } - .col-md-4 { - width: 33.3333333333%; } - .col-md-5 { - width: 41.6666666667%; } - .col-md-6 { - width: 50%; } - .col-md-7 { - width: 58.3333333333%; } - .col-md-8 { - width: 66.6666666667%; } - .col-md-9 { - width: 75%; } - .col-md-10 { - width: 83.3333333333%; } - .col-md-11 { - width: 91.6666666667%; } - .col-md-12 { - width: 100%; } - .col-md-pull-0 { - right: auto; } - .col-md-pull-1 { - right: 8.3333333333%; } - .col-md-pull-2 { - right: 16.6666666667%; } - .col-md-pull-3 { - right: 25%; } - .col-md-pull-4 { - right: 33.3333333333%; } - .col-md-pull-5 { - right: 41.6666666667%; } - .col-md-pull-6 { - right: 50%; } - .col-md-pull-7 { - right: 58.3333333333%; } - .col-md-pull-8 { - right: 66.6666666667%; } - .col-md-pull-9 { - right: 75%; } - .col-md-pull-10 { - right: 83.3333333333%; } - .col-md-pull-11 { - right: 91.6666666667%; } - .col-md-pull-12 { - right: 100%; } - .col-md-push-0 { - left: auto; } - .col-md-push-1 { - left: 8.3333333333%; } - .col-md-push-2 { - left: 16.6666666667%; } - .col-md-push-3 { - left: 25%; } - .col-md-push-4 { - left: 33.3333333333%; } - .col-md-push-5 { - left: 41.6666666667%; } - .col-md-push-6 { - left: 50%; } - .col-md-push-7 { - left: 58.3333333333%; } - .col-md-push-8 { - left: 66.6666666667%; } - .col-md-push-9 { - left: 75%; } - .col-md-push-10 { - left: 83.3333333333%; } - .col-md-push-11 { - left: 91.6666666667%; } - .col-md-push-12 { - left: 100%; } - .col-md-offset-0 { - margin-left: 0%; } - .col-md-offset-1 { - margin-left: 8.3333333333%; } - .col-md-offset-2 { - margin-left: 16.6666666667%; } - .col-md-offset-3 { - margin-left: 25%; } - .col-md-offset-4 { - margin-left: 33.3333333333%; } - .col-md-offset-5 { - margin-left: 41.6666666667%; } - .col-md-offset-6 { - margin-left: 50%; } - .col-md-offset-7 { - margin-left: 58.3333333333%; } - .col-md-offset-8 { - margin-left: 66.6666666667%; } - .col-md-offset-9 { - margin-left: 75%; } - .col-md-offset-10 { - margin-left: 83.3333333333%; } - .col-md-offset-11 { - margin-left: 91.6666666667%; } - .col-md-offset-12 { - margin-left: 100%; } } - -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; } - .col-lg-1 { - width: 8.3333333333%; } - .col-lg-2 { - width: 16.6666666667%; } - .col-lg-3 { - width: 25%; } - .col-lg-4 { - width: 33.3333333333%; } - .col-lg-5 { - width: 41.6666666667%; } - .col-lg-6 { - width: 50%; } - .col-lg-7 { - width: 58.3333333333%; } - .col-lg-8 { - width: 66.6666666667%; } - .col-lg-9 { - width: 75%; } - .col-lg-10 { - width: 83.3333333333%; } - .col-lg-11 { - width: 91.6666666667%; } - .col-lg-12 { - width: 100%; } - .col-lg-pull-0 { - right: auto; } - .col-lg-pull-1 { - right: 8.3333333333%; } - .col-lg-pull-2 { - right: 16.6666666667%; } - .col-lg-pull-3 { - right: 25%; } - .col-lg-pull-4 { - right: 33.3333333333%; } - .col-lg-pull-5 { - right: 41.6666666667%; } - .col-lg-pull-6 { - right: 50%; } - .col-lg-pull-7 { - right: 58.3333333333%; } - .col-lg-pull-8 { - right: 66.6666666667%; } - .col-lg-pull-9 { - right: 75%; } - .col-lg-pull-10 { - right: 83.3333333333%; } - .col-lg-pull-11 { - right: 91.6666666667%; } - .col-lg-pull-12 { - right: 100%; } - .col-lg-push-0 { - left: auto; } - .col-lg-push-1 { - left: 8.3333333333%; } - .col-lg-push-2 { - left: 16.6666666667%; } - .col-lg-push-3 { - left: 25%; } - .col-lg-push-4 { - left: 33.3333333333%; } - .col-lg-push-5 { - left: 41.6666666667%; } - .col-lg-push-6 { - left: 50%; } - .col-lg-push-7 { - left: 58.3333333333%; } - .col-lg-push-8 { - left: 66.6666666667%; } - .col-lg-push-9 { - left: 75%; } - .col-lg-push-10 { - left: 83.3333333333%; } - .col-lg-push-11 { - left: 91.6666666667%; } - .col-lg-push-12 { - left: 100%; } - .col-lg-offset-0 { - margin-left: 0%; } - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - .col-lg-offset-3 { - margin-left: 25%; } - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - .col-lg-offset-6 { - margin-left: 50%; } - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - .col-lg-offset-9 { - margin-left: 75%; } - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - .col-lg-offset-12 { - margin-left: 100%; } } - -table { - background-color: transparent; } - -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777777; - text-align: left; } - -th { - text-align: left; } - -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; } - .table > thead > tr > th, - .table > thead > tr > td, - .table > tbody > tr > th, - .table > tbody > tr > td, - .table > tfoot > tr > th, - .table > tfoot > tr > td { - padding: 8px; - line-height: 1.428571429; - vertical-align: top; - border-top: 1px solid #ddd; } - .table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; } - .table > caption + thead > tr:first-child > th, - .table > caption + thead > tr:first-child > td, - .table > colgroup + thead > tr:first-child > th, - .table > colgroup + thead > tr:first-child > td, - .table > thead:first-child > tr:first-child > th, - .table > thead:first-child > tr:first-child > td { - border-top: 0; } - .table > tbody + tbody { - border-top: 2px solid #ddd; } - .table .table { - background-color: #fff; } - -.table-condensed > thead > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > th, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > th, -.table-condensed > tfoot > tr > td { - padding: 5px; } - -.table-bordered { - border: 1px solid #ddd; } - .table-bordered > thead > tr > th, - .table-bordered > thead > tr > td, - .table-bordered > tbody > tr > th, - .table-bordered > tbody > tr > td, - .table-bordered > tfoot > tr > th, - .table-bordered > tfoot > tr > td { - border: 1px solid #ddd; } - .table-bordered > thead > tr > th, - .table-bordered > thead > tr > td { - border-bottom-width: 2px; } - -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; } - -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; } - -table col[class*="col-"] { - position: static; - float: none; - display: table-column; } - -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; } - -.table > thead > tr > td.active, -.table > thead > tr > th.active, -.table > thead > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr > td.active, -.table > tbody > tr > th.active, -.table > tbody > tr.active > td, -.table > tbody > tr.active > th, -.table > tfoot > tr > td.active, -.table > tfoot > tr > th.active, -.table > tfoot > tr.active > td, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; } - -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; } - -.table > thead > tr > td.success, -.table > thead > tr > th.success, -.table > thead > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr > td.success, -.table > tbody > tr > th.success, -.table > tbody > tr.success > td, -.table > tbody > tr.success > th, -.table > tfoot > tr > td.success, -.table > tfoot > tr > th.success, -.table > tfoot > tr.success > td, -.table > tfoot > tr.success > th { - background-color: #dff0d8; } - -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; } - -.table > thead > tr > td.info, -.table > thead > tr > th.info, -.table > thead > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr > td.info, -.table > tbody > tr > th.info, -.table > tbody > tr.info > td, -.table > tbody > tr.info > th, -.table > tfoot > tr > td.info, -.table > tfoot > tr > th.info, -.table > tfoot > tr.info > td, -.table > tfoot > tr.info > th { - background-color: #d9edf7; } - -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; } - -.table > thead > tr > td.warning, -.table > thead > tr > th.warning, -.table > thead > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr > td.warning, -.table > tbody > tr > th.warning, -.table > tbody > tr.warning > td, -.table > tbody > tr.warning > th, -.table > tfoot > tr > td.warning, -.table > tfoot > tr > th.warning, -.table > tfoot > tr.warning > td, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; } - -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; } - -.table > thead > tr > td.danger, -.table > thead > tr > th.danger, -.table > thead > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr > td.danger, -.table > tbody > tr > th.danger, -.table > tbody > tr.danger > td, -.table > tbody > tr.danger > th, -.table > tfoot > tr > td.danger, -.table > tfoot > tr > th.danger, -.table > tfoot > tr.danger > td, -.table > tfoot > tr.danger > th { - background-color: #f2dede; } - -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; } - -.table-responsive { - overflow-x: auto; - min-height: 0.01%; } - @media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd; } - .table-responsive > .table { - margin-bottom: 0; } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; } - .table-responsive > .table-bordered { - border: 0; } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; } } - -fieldset { - padding: 0; - margin: 0; - border: 0; - min-width: 0; } - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; } - -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; } - -input[type="search"] { - box-sizing: border-box; } - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; } - -input[type="file"] { - display: block; } - -input[type="range"] { - display: block; - width: 100%; } - -select[multiple], -select[size] { - height: auto; } - -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; } - -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.428571429; - color: #555555; } - -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.428571429; - color: #555555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; } - .form-control:focus { - border-color: #66afe9; - outline: 0; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } - .form-control::-moz-placeholder { - color: #999; - opacity: 1; } - .form-control:-ms-input-placeholder { - color: #999; } - .form-control::-webkit-input-placeholder { - color: #999; } - .form-control::-ms-expand { - border: 0; - background-color: transparent; } - .form-control[disabled], .form-control[readonly], - fieldset[disabled] .form-control { - background-color: #eeeeee; - opacity: 1; } - .form-control[disabled], - fieldset[disabled] .form-control { - cursor: not-allowed; } - -textarea.form-control { - height: auto; } - -input[type="search"] { - -webkit-appearance: none; } - -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 34px; } - input[type="date"].input-sm, .input-group-sm > input[type="date"].form-control, - .input-group-sm > input[type="date"].input-group-addon, - .input-group-sm > .input-group-btn > input[type="date"].btn, - .input-group-sm input[type="date"], - input[type="time"].input-sm, - .input-group-sm > input[type="time"].form-control, - .input-group-sm > input[type="time"].input-group-addon, - .input-group-sm > .input-group-btn > input[type="time"].btn, - .input-group-sm - input[type="time"], - input[type="datetime-local"].input-sm, - .input-group-sm > input[type="datetime-local"].form-control, - .input-group-sm > input[type="datetime-local"].input-group-addon, - .input-group-sm > .input-group-btn > input[type="datetime-local"].btn, - .input-group-sm - input[type="datetime-local"], - input[type="month"].input-sm, - .input-group-sm > input[type="month"].form-control, - .input-group-sm > input[type="month"].input-group-addon, - .input-group-sm > .input-group-btn > input[type="month"].btn, - .input-group-sm - input[type="month"] { - line-height: 30px; } - input[type="date"].input-lg, .input-group-lg > input[type="date"].form-control, - .input-group-lg > input[type="date"].input-group-addon, - .input-group-lg > .input-group-btn > input[type="date"].btn, - .input-group-lg input[type="date"], - input[type="time"].input-lg, - .input-group-lg > input[type="time"].form-control, - .input-group-lg > input[type="time"].input-group-addon, - .input-group-lg > .input-group-btn > input[type="time"].btn, - .input-group-lg - input[type="time"], - input[type="datetime-local"].input-lg, - .input-group-lg > input[type="datetime-local"].form-control, - .input-group-lg > input[type="datetime-local"].input-group-addon, - .input-group-lg > .input-group-btn > input[type="datetime-local"].btn, - .input-group-lg - input[type="datetime-local"], - input[type="month"].input-lg, - .input-group-lg > input[type="month"].form-control, - .input-group-lg > input[type="month"].input-group-addon, - .input-group-lg > .input-group-btn > input[type="month"].btn, - .input-group-lg - input[type="month"] { - line-height: 46px; } } - -.form-group { - margin-bottom: 15px; } - -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; } - .radio label, - .checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; } - -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; } - -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; } - -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; } - -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; } - -input[type="radio"][disabled], input[type="radio"].disabled, -fieldset[disabled] input[type="radio"], -input[type="checkbox"][disabled], -input[type="checkbox"].disabled, -fieldset[disabled] -input[type="checkbox"] { - cursor: not-allowed; } - -.radio-inline.disabled, -fieldset[disabled] .radio-inline, -.checkbox-inline.disabled, -fieldset[disabled] -.checkbox-inline { - cursor: not-allowed; } - -.radio.disabled label, -fieldset[disabled] .radio label, -.checkbox.disabled label, -fieldset[disabled] -.checkbox label { - cursor: not-allowed; } - -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; - min-height: 34px; } - .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control, - .input-group-lg > .form-control-static.input-group-addon, - .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control, - .input-group-sm > .form-control-static.input-group-addon, - .input-group-sm > .input-group-btn > .form-control-static.btn { - padding-left: 0; - padding-right: 0; } - -.input-sm, .input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; } - -select.input-sm, .input-group-sm > select.form-control, -.input-group-sm > select.input-group-addon, -.input-group-sm > .input-group-btn > select.btn { - height: 30px; - line-height: 30px; } - -textarea.input-sm, .input-group-sm > textarea.form-control, -.input-group-sm > textarea.input-group-addon, -.input-group-sm > .input-group-btn > textarea.btn, -select[multiple].input-sm, -.input-group-sm > select[multiple].form-control, -.input-group-sm > select[multiple].input-group-addon, -.input-group-sm > .input-group-btn > select[multiple].btn { - height: auto; } - -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; } - -.form-group-sm select.form-control { - height: 30px; - line-height: 30px; } - -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; } - -.form-group-sm .form-control-static { - height: 30px; - min-height: 32px; - padding: 6px 10px; - font-size: 12px; - line-height: 1.5; } - -.input-lg, .input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; } - -select.input-lg, .input-group-lg > select.form-control, -.input-group-lg > select.input-group-addon, -.input-group-lg > .input-group-btn > select.btn { - height: 46px; - line-height: 46px; } - -textarea.input-lg, .input-group-lg > textarea.form-control, -.input-group-lg > textarea.input-group-addon, -.input-group-lg > .input-group-btn > textarea.btn, -select[multiple].input-lg, -.input-group-lg > select[multiple].form-control, -.input-group-lg > select[multiple].input-group-addon, -.input-group-lg > .input-group-btn > select[multiple].btn { - height: auto; } - -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; } - -.form-group-lg select.form-control { - height: 46px; - line-height: 46px; } - -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; } - -.form-group-lg .form-control-static { - height: 46px; - min-height: 38px; - padding: 11px 16px; - font-size: 18px; - line-height: 1.3333333; } - -.has-feedback { - position: relative; } - .has-feedback .form-control { - padding-right: 42.5px; } - -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; } - -.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback, -.input-group-lg > .input-group-addon + .form-control-feedback, -.input-group-lg > .input-group-btn > .btn + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; } - -.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback, -.input-group-sm > .input-group-addon + .form-control-feedback, -.input-group-sm > .input-group-btn > .btn + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; } - -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; } - -.has-success .form-control { - border-color: #3c763d; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } - .has-success .form-control:focus { - border-color: #2b542c; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; } - -.has-success .input-group-addon { - color: #3c763d; - border-color: #3c763d; - background-color: #dff0d8; } - -.has-success .form-control-feedback { - color: #3c763d; } - -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; } - -.has-warning .form-control { - border-color: #8a6d3b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } - .has-warning .form-control:focus { - border-color: #66512c; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; } - -.has-warning .input-group-addon { - color: #8a6d3b; - border-color: #8a6d3b; - background-color: #fcf8e3; } - -.has-warning .form-control-feedback { - color: #8a6d3b; } - -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; } - -.has-error .form-control { - border-color: #a94442; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } - .has-error .form-control:focus { - border-color: #843534; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; } - -.has-error .input-group-addon { - color: #a94442; - border-color: #a94442; - background-color: #f2dede; } - -.has-error .form-control-feedback { - color: #a94442; } - -.has-feedback label ~ .form-control-feedback { - top: 25px; } - -.has-feedback label.sr-only ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action="incrementHours"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action="incrementHours"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action="incrementMinutes"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action="incrementMinutes"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action="decrementHours"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action="decrementHours"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action="decrementMinutes"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action="decrementMinutes"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action="showHours"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action="showHours"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action="showMinutes"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action="showMinutes"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action="togglePeriod"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action="togglePeriod"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action="clear"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action="clear"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action="today"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action="today"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.picker-switch::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.picker-switch::after ~ .form-control-feedback { - top: 0; } - -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; } - -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; } - .form-inline .form-control-static { - display: inline-block; } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; } - .form-inline .input-group > .form-control { - width: 100%; } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; } - .form-inline .has-feedback .form-control-feedback { - top: 0; } } - -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 7px; } - -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; } - -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; } - .form-horizontal .form-group:before, .form-horizontal .form-group:after { - content: " "; - display: table; } - .form-horizontal .form-group:after { - clear: both; } - -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 7px; } } - -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; } - -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 18px; } } - -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 12px; } } - -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 6px 12px; - font-size: 14px; - line-height: 1.428571429; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; } - .btn:hover, .btn:focus, .btn.focus { - color: #333; - text-decoration: none; } - .btn:active, .btn.active { - outline: 0; - background-image: none; - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } - .btn.disabled, .btn[disabled], - fieldset[disabled] .btn { - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - box-shadow: none; } - -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; } - -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; } - .btn-default:focus, .btn-default.focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c; } - .btn-default:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; } - .btn-default:active, .btn-default.active, - .open > .btn-default.dropdown-toggle { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; } - .btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus, - .open > .btn-default.dropdown-toggle:hover, - .open > .btn-default.dropdown-toggle:focus, - .open > .btn-default.dropdown-toggle.focus { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c; } - .btn-default:active, .btn-default.active, - .open > .btn-default.dropdown-toggle { - background-image: none; } - .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus, - fieldset[disabled] .btn-default:hover, - fieldset[disabled] .btn-default:focus, - fieldset[disabled] .btn-default.focus { - background-color: #fff; - border-color: #ccc; } - .btn-default .badge { - color: #fff; - background-color: #333; } - -.btn-primary { - color: #fff; - background-color: #2487ca; - border-color: #2079b4; } - .btn-primary:focus, .btn-primary.focus { - color: #fff; - background-color: #1c6a9f; - border-color: #0d3048; } - .btn-primary:hover { - color: #fff; - background-color: #1c6a9f; - border-color: #175680; } - .btn-primary:active, .btn-primary.active, - .open > .btn-primary.dropdown-toggle { - color: #fff; - background-color: #1c6a9f; - border-color: #175680; } - .btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus, - .open > .btn-primary.dropdown-toggle:hover, - .open > .btn-primary.dropdown-toggle:focus, - .open > .btn-primary.dropdown-toggle.focus { - color: #fff; - background-color: #175680; - border-color: #0d3048; } - .btn-primary:active, .btn-primary.active, - .open > .btn-primary.dropdown-toggle { - background-image: none; } - .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus, - fieldset[disabled] .btn-primary:hover, - fieldset[disabled] .btn-primary:focus, - fieldset[disabled] .btn-primary.focus { - background-color: #2487ca; - border-color: #2079b4; } - .btn-primary .badge { - color: #2487ca; - background-color: #fff; } - -.btn-success { - color: #fff; - background-color: #27ae60; - border-color: #229955; } - .btn-success:focus, .btn-success.focus { - color: #fff; - background-color: #1e8449; - border-color: #0b311b; } - .btn-success:hover { - color: #fff; - background-color: #1e8449; - border-color: #176739; } - .btn-success:active, .btn-success.active, - .open > .btn-success.dropdown-toggle { - color: #fff; - background-color: #1e8449; - border-color: #176739; } - .btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus, - .open > .btn-success.dropdown-toggle:hover, - .open > .btn-success.dropdown-toggle:focus, - .open > .btn-success.dropdown-toggle.focus { - color: #fff; - background-color: #176739; - border-color: #0b311b; } - .btn-success:active, .btn-success.active, - .open > .btn-success.dropdown-toggle { - background-image: none; } - .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus, - fieldset[disabled] .btn-success:hover, - fieldset[disabled] .btn-success:focus, - fieldset[disabled] .btn-success.focus { - background-color: #27ae60; - border-color: #229955; } - .btn-success .badge { - color: #27ae60; - background-color: #fff; } - -.btn-info { - color: #fff; - background-color: #2980b9; - border-color: #2472a4; } - .btn-info:focus, .btn-info.focus { - color: #fff; - background-color: #20638f; - border-color: #0d293c; } - .btn-info:hover { - color: #fff; - background-color: #20638f; - border-color: #194f72; } - .btn-info:active, .btn-info.active, - .open > .btn-info.dropdown-toggle { - color: #fff; - background-color: #20638f; - border-color: #194f72; } - .btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus, - .open > .btn-info.dropdown-toggle:hover, - .open > .btn-info.dropdown-toggle:focus, - .open > .btn-info.dropdown-toggle.focus { - color: #fff; - background-color: #194f72; - border-color: #0d293c; } - .btn-info:active, .btn-info.active, - .open > .btn-info.dropdown-toggle { - background-image: none; } - .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus, - fieldset[disabled] .btn-info:hover, - fieldset[disabled] .btn-info:focus, - fieldset[disabled] .btn-info.focus { - background-color: #2980b9; - border-color: #2472a4; } - .btn-info .badge { - color: #2980b9; - background-color: #fff; } - -.btn-warning { - color: #fff; - background-color: #e67e22; - border-color: #d67118; } - .btn-warning:focus, .btn-warning.focus { - color: #fff; - background-color: #bf6516; - border-color: #64350b; } - .btn-warning:hover { - color: #fff; - background-color: #bf6516; - border-color: #9f5412; } - .btn-warning:active, .btn-warning.active, - .open > .btn-warning.dropdown-toggle { - color: #fff; - background-color: #bf6516; - border-color: #9f5412; } - .btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus, - .open > .btn-warning.dropdown-toggle:hover, - .open > .btn-warning.dropdown-toggle:focus, - .open > .btn-warning.dropdown-toggle.focus { - color: #fff; - background-color: #9f5412; - border-color: #64350b; } - .btn-warning:active, .btn-warning.active, - .open > .btn-warning.dropdown-toggle { - background-image: none; } - .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus, - fieldset[disabled] .btn-warning:hover, - fieldset[disabled] .btn-warning:focus, - fieldset[disabled] .btn-warning.focus { - background-color: #e67e22; - border-color: #d67118; } - .btn-warning .badge { - color: #e67e22; - background-color: #fff; } - -.btn-danger { - color: #fff; - background-color: #c0392b; - border-color: #ab3326; } - .btn-danger:focus, .btn-danger.focus { - color: #fff; - background-color: #962d22; - border-color: #43140f; } - .btn-danger:hover { - color: #fff; - background-color: #962d22; - border-color: #79241b; } - .btn-danger:active, .btn-danger.active, - .open > .btn-danger.dropdown-toggle { - color: #fff; - background-color: #962d22; - border-color: #79241b; } - .btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus, - .open > .btn-danger.dropdown-toggle:hover, - .open > .btn-danger.dropdown-toggle:focus, - .open > .btn-danger.dropdown-toggle.focus { - color: #fff; - background-color: #79241b; - border-color: #43140f; } - .btn-danger:active, .btn-danger.active, - .open > .btn-danger.dropdown-toggle { - background-image: none; } - .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus, - fieldset[disabled] .btn-danger:hover, - fieldset[disabled] .btn-danger:focus, - fieldset[disabled] .btn-danger.focus { - background-color: #c0392b; - border-color: #ab3326; } - .btn-danger .badge { - color: #c0392b; - background-color: #fff; } - -.btn-link { - color: #2487ca; - font-weight: normal; - border-radius: 0; } - .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled], - fieldset[disabled] .btn-link { - background-color: transparent; - box-shadow: none; } - .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { - border-color: transparent; } - .btn-link:hover, .btn-link:focus { - color: #185c89; - text-decoration: underline; - background-color: transparent; } - .btn-link[disabled]:hover, .btn-link[disabled]:focus, - fieldset[disabled] .btn-link:hover, - fieldset[disabled] .btn-link:focus { - color: #777777; - text-decoration: none; } - -.btn-lg, .btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; } - -.btn-sm, .btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; } - -.btn-xs, .btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; } - -.btn-block { - display: block; - width: 100%; } - -.btn-block + .btn-block { - margin-top: 5px; } - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; } - -.fade { - opacity: 0; - transition: opacity 0.15s linear; } - .fade.in { - opacity: 1; } - -.collapse { - display: none; } - .collapse.in { - display: block; } - -tr.collapse.in { - display: table-row; } - -tbody.collapse.in { - display: table-row-group; } - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - transition-property: height, visibility; - transition-duration: 0.35s; - transition-timing-function: ease; } - -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; } - -.dropup, -.dropdown { - position: relative; } - -.dropdown-toggle:focus { - outline: 0; } - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 14px; - text-align: left; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; } - .dropdown-menu.pull-right, .panel .panel-footer .dropdown-menu.tools-footer { - right: 0; - left: auto; } - .dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; } - .dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.428571429; - color: #333333; - white-space: nowrap; } - -.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - text-decoration: none; - color: #262626; - background-color: #f5f5f5; } - -.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - outline: 0; - background-color: #2487ca; } - -.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - color: #777777; } - -.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; } - -.open > .dropdown-menu { - display: block; } - -.open > a { - outline: 0; } - -.dropdown-menu-right { - left: auto; - right: 0; } - -.dropdown-menu-left { - left: 0; - right: auto; } - -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.428571429; - color: #777777; - white-space: nowrap; } - -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; } - -.pull-right > .dropdown-menu, .panel .panel-footer .tools-footer > .dropdown-menu { - right: 0; - left: auto; } - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; - content: ""; } - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; } - -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; } } - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; } - .btn-group > .btn, - .btn-group-vertical > .btn { - position: relative; - float: left; } - .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, - .btn-group-vertical > .btn:hover, - .btn-group-vertical > .btn:focus, - .btn-group-vertical > .btn:active, - .btn-group-vertical > .btn.active { - z-index: 2; } - -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; } - -.btn-toolbar { - margin-left: -5px; } - .btn-toolbar:before, .btn-toolbar:after { - content: " "; - display: table; } - .btn-toolbar:after { - clear: both; } - .btn-toolbar .btn, - .btn-toolbar .btn-group, - .btn-toolbar .input-group { - float: left; } - .btn-toolbar > .btn, - .btn-toolbar > .btn-group, - .btn-toolbar > .input-group { - margin-left: 5px; } - -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; } - -.btn-group > .btn:first-child { - margin-left: 0; } - .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - -.btn-group > .btn-group { - float: left; } - -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; } - -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; } - -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; } - -.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; } - -.btn-group.open .dropdown-toggle { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } - .btn-group.open .dropdown-toggle.btn-link { - box-shadow: none; } - -.btn .caret { - margin-left: 0; } - -.btn-lg .caret, .btn-group-lg > .btn .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; } - -.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret { - border-width: 0 5px 5px; } - -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; } - -.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after { - content: " "; - display: table; } - -.btn-group-vertical > .btn-group:after { - clear: both; } - -.btn-group-vertical > .btn-group > .btn { - float: none; } - -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; } - -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; } - -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; } - -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; } - -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; } - -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; } - -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; } - -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; } - .btn-group-justified > .btn, - .btn-group-justified > .btn-group { - float: none; - display: table-cell; - width: 1%; } - .btn-group-justified > .btn-group .btn { - width: 100%; } - .btn-group-justified > .btn-group .dropdown-menu { - left: auto; } - -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; } - -.input-group { - position: relative; - display: table; - border-collapse: separate; } - .input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; } - .input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; } - .input-group .form-control:focus { - z-index: 3; } - -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; } - .input-group-addon:not(:first-child):not(:last-child), - .input-group-btn:not(:first-child):not(:last-child), - .input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; } - -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; } - -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555555; - text-align: center; - background-color: #eeeeee; - border: 1px solid #ccc; - border-radius: 4px; } - .input-group-addon.input-sm, - .input-group-sm > .input-group-addon, - .input-group-sm > .input-group-btn > .input-group-addon.btn { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; } - .input-group-addon.input-lg, - .input-group-lg > .input-group-addon, - .input-group-lg > .input-group-btn > .input-group-addon.btn { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; } - .input-group-addon input[type="radio"], - .input-group-addon input[type="checkbox"] { - margin-top: 0; } - -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-top-right-radius: 0; } - -.input-group-addon:first-child { - border-right: 0; } - -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; - border-top-left-radius: 0; } - -.input-group-addon:last-child { - border-left: 0; } - -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; } - .input-group-btn > .btn { - position: relative; } - .input-group-btn > .btn + .btn { - margin-left: -1px; } - .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { - z-index: 2; } - .input-group-btn:first-child > .btn, - .input-group-btn:first-child > .btn-group { - margin-right: -1px; } - .input-group-btn:last-child > .btn, - .input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; } - -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; } - .nav:before, .nav:after { - content: " "; - display: table; } - .nav:after { - clear: both; } - .nav > li { - position: relative; - display: block; } - .nav > li > a { - position: relative; - display: block; - padding: 10px 15px; } - .nav > li > a:hover, .nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; } - .nav > li.disabled > a { - color: #777777; } - .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { - color: #777777; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; } - .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { - background-color: #eeeeee; - border-color: #2487ca; } - .nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; } - .nav > li > a > img { - max-width: none; } - -.nav-tabs { - border-bottom: 1px solid #ddd; } - .nav-tabs > li { - float: left; - margin-bottom: -1px; } - .nav-tabs > li > a { - margin-right: 2px; - line-height: 1.428571429; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; } - .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #ddd; } - .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { - color: #555555; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; } - -.nav-pills > li { - float: left; } - .nav-pills > li > a { - border-radius: 4px; } - .nav-pills > li + li { - margin-left: 2px; } - .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { - color: #fff; - background-color: #2487ca; } - -.nav-stacked > li { - float: none; } - .nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; } - -.nav-justified, .nav-tabs.nav-justified { - width: 100%; } - .nav-justified > li, .nav-tabs.nav-justified > li { - float: none; } - .nav-justified > li > a, .nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; } - .nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; } - @media (min-width: 768px) { - .nav-justified > li, .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; } - .nav-justified > li > a, .nav-tabs.nav-justified > li > a { - margin-bottom: 0; } } - -.nav-tabs-justified, .nav-tabs.nav-justified { - border-bottom: 0; } - .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; } - .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, - .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #ddd; } - @media (min-width: 768px) { - .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; } - .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, - .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #fff; } } - -.tab-content > .tab-pane { - display: none; } - -.tab-content > .active { - display: block; } - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; } - -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; } - .navbar:before, .navbar:after { - content: " "; - display: table; } - .navbar:after { - clear: both; } - @media (min-width: 768px) { - .navbar { - border-radius: 4px; } } - -.navbar-header:before, .navbar-header:after { - content: " "; - display: table; } - -.navbar-header:after { - clear: both; } - -@media (min-width: 768px) { - .navbar-header { - float: left; } } - -.navbar-collapse { - overflow-x: visible; - padding-right: 15px; - padding-left: 15px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; } - .navbar-collapse:before, .navbar-collapse:after { - content: " "; - display: table; } - .navbar-collapse:after { - clear: both; } - .navbar-collapse.in { - overflow-y: auto; } - @media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; } - .navbar-collapse.in { - overflow-y: visible; } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; } } - -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; } - @media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; } } - -.container > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-header, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; } - @media (min-width: 768px) { - .container > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-header, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; } } - -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; } - @media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; } } - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; } - @media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; } } - -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; } - -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; } - -.navbar-brand { - float: left; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; - height: 50px; } - .navbar-brand:hover, .navbar-brand:focus { - text-decoration: none; } - .navbar-brand > img { - display: block; } - @media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; } } - -.navbar-toggle { - position: relative; - float: right; - margin-right: 15px; - padding: 9px 10px; - margin-top: 8px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; } - .navbar-toggle:focus { - outline: 0; } - .navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; } - .navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; } - @media (min-width: 768px) { - .navbar-toggle { - display: none; } } - -.navbar-nav { - margin: 7.5px -15px; } - .navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; } - @media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; } - .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; } } - @media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; } - .navbar-nav > li { - float: left; } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; } } - -.navbar-form { - margin-left: -15px; - margin-right: -15px; - padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 8px; - margin-bottom: 8px; } - @media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; } - .navbar-form .form-control-static { - display: inline-block; } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; } - .navbar-form .input-group > .form-control { - width: 100%; } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; } - .navbar-form .has-feedback .form-control-feedback { - top: 0; } } - @media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; } - .navbar-form .form-group:last-child { - margin-bottom: 0; } } - @media (min-width: 768px) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - box-shadow: none; } } - -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; } - -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; } - -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; } - .navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn { - margin-top: 10px; - margin-bottom: 10px; } - .navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn { - margin-top: 14px; - margin-bottom: 14px; } - -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; } - @media (min-width: 768px) { - .navbar-text { - float: left; - margin-left: 15px; - margin-right: 15px; } } - -@media (min-width: 768px) { - .navbar-left { - float: left !important; } - .navbar-right { - float: right !important; - margin-right: -15px; } - .navbar-right ~ .navbar-right { - margin-right: 0; } } - -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; } - .navbar-default .navbar-brand { - color: #777; } - .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; } - .navbar-default .navbar-text { - color: #777; } - .navbar-default .navbar-nav > li > a { - color: #777; } - .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { - color: #333; - background-color: transparent; } - .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { - color: #555; - background-color: #e7e7e7; } - .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; } - .navbar-default .navbar-toggle { - border-color: #ddd; } - .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { - background-color: #ddd; } - .navbar-default .navbar-toggle .icon-bar { - background-color: #888; } - .navbar-default .navbar-collapse, - .navbar-default .navbar-form { - border-color: #e7e7e7; } - .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { - background-color: #e7e7e7; - color: #555; } - @media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777; } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333; - background-color: transparent; } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555; - background-color: #e7e7e7; } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; } } - .navbar-default .navbar-link { - color: #777; } - .navbar-default .navbar-link:hover { - color: #333; } - .navbar-default .btn-link { - color: #777; } - .navbar-default .btn-link:hover, .navbar-default .btn-link:focus { - color: #333; } - .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus, - fieldset[disabled] .navbar-default .btn-link:hover, - fieldset[disabled] .navbar-default .btn-link:focus { - color: #ccc; } - -.navbar-inverse { - background-color: #222; - border-color: #090909; } - .navbar-inverse .navbar-brand { - color: #9d9d9d; } - .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; } - .navbar-inverse .navbar-text { - color: #9d9d9d; } - .navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; } - .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; } - .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #090909; } - .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; } - .navbar-inverse .navbar-toggle { - border-color: #333; } - .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { - background-color: #333; } - .navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff; } - .navbar-inverse .navbar-collapse, - .navbar-inverse .navbar-form { - border-color: #101010; } - .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { - background-color: #090909; - color: #fff; } - @media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #090909; } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #090909; } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-color: #090909; } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; } } - .navbar-inverse .navbar-link { - color: #9d9d9d; } - .navbar-inverse .navbar-link:hover { - color: #fff; } - .navbar-inverse .btn-link { - color: #9d9d9d; } - .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { - color: #fff; } - .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus, - fieldset[disabled] .navbar-inverse .btn-link:hover, - fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444; } - -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; } - .breadcrumb > li { - display: inline-block; } - .breadcrumb > li + li:before { - content: "/ "; - padding: 0 5px; - color: #ccc; } - .breadcrumb > .active { - color: #777777; } - -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; } - .pagination > li { - display: inline; } - .pagination > li > a, - .pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - line-height: 1.428571429; - text-decoration: none; - color: #2487ca; - background-color: #fff; - border: 1px solid #ddd; - margin-left: -1px; } - .pagination > li:first-child > a, - .pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; } - .pagination > li:last-child > a, - .pagination > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; } - .pagination > li > a:hover, .pagination > li > a:focus, - .pagination > li > span:hover, - .pagination > li > span:focus { - z-index: 2; - color: #185c89; - background-color: #eeeeee; - border-color: #ddd; } - .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, - .pagination > .active > span, - .pagination > .active > span:hover, - .pagination > .active > span:focus { - z-index: 3; - color: #fff; - background-color: #2487ca; - border-color: #2487ca; - cursor: default; } - .pagination > .disabled > span, - .pagination > .disabled > span:hover, - .pagination > .disabled > span:focus, - .pagination > .disabled > a, - .pagination > .disabled > a:hover, - .pagination > .disabled > a:focus { - color: #777777; - background-color: #fff; - border-color: #ddd; - cursor: not-allowed; } - -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; } - -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; } - -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 6px; - border-top-right-radius: 6px; } - -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; } - -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; } - -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; } - -.pager { - padding-left: 0; - margin: 20px 0; - list-style: none; - text-align: center; } - .pager:before, .pager:after { - content: " "; - display: table; } - .pager:after { - clear: both; } - .pager li { - display: inline; } - .pager li > a, - .pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; } - .pager li > a:hover, - .pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; } - .pager .next > a, - .pager .next > span { - float: right; } - .pager .previous > a, - .pager .previous > span { - float: left; } - .pager .disabled > a, - .pager .disabled > a:hover, - .pager .disabled > a:focus, - .pager .disabled > span { - color: #777777; - background-color: #fff; - cursor: not-allowed; } - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; } - .label:empty { - display: none; } - .btn .label { - position: relative; - top: -1px; } - -a.label:hover, a.label:focus { - color: #fff; - text-decoration: none; - cursor: pointer; } - -.label-default { - background-color: #777777; } - .label-default[href]:hover, .label-default[href]:focus { - background-color: #5e5e5e; } - -.label-primary { - background-color: #2487ca; } - .label-primary[href]:hover, .label-primary[href]:focus { - background-color: #1c6a9f; } - -.label-success { - background-color: #27ae60; } - .label-success[href]:hover, .label-success[href]:focus { - background-color: #1e8449; } - -.label-info { - background-color: #2980b9; } - .label-info[href]:hover, .label-info[href]:focus { - background-color: #20638f; } - -.label-warning { - background-color: #e67e22; } - .label-warning[href]:hover, .label-warning[href]:focus { - background-color: #bf6516; } - -.label-danger { - background-color: #c0392b; } - .label-danger[href]:hover, .label-danger[href]:focus { - background-color: #962d22; } - -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - color: #fff; - line-height: 1; - vertical-align: middle; - white-space: nowrap; - text-align: center; - background-color: #777777; - border-radius: 10px; } - .badge:empty { - display: none; } - .btn .badge { - position: relative; - top: -1px; } - .btn-xs .badge, .btn-group-xs > .btn .badge, - .btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; } - .list-group-item.active > .badge, - .nav-pills > .active > a > .badge { - color: #2487ca; - background-color: #fff; } - .list-group-item > .badge { - float: right; } - .list-group-item > .badge + .badge { - margin-right: 5px; } - .nav-pills > li > a > .badge { - margin-left: 3px; } - -a.badge:hover, a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; } - -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eeeeee; } - .jumbotron h1, - .jumbotron .h1 { - color: inherit; } - .jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; } - .jumbotron > hr { - border-top-color: #d5d5d5; } - .container .jumbotron, - .container-fluid .jumbotron { - border-radius: 6px; - padding-left: 15px; - padding-right: 15px; } - .jumbotron .container { - max-width: 100%; } - @media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; } - .container .jumbotron, - .container-fluid .jumbotron { - padding-left: 60px; - padding-right: 60px; } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; } } - -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.428571429; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - transition: border 0.2s ease-in-out; } - .thumbnail > img, - .thumbnail a > img { - display: block; - max-width: 100%; - height: auto; - margin-left: auto; - margin-right: auto; } - .thumbnail .caption { - padding: 9px; - color: #333333; } - -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #2487ca; } - -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; } - .alert h4 { - margin-top: 0; - color: inherit; } - .alert .alert-link { - font-weight: bold; } - .alert > p, - .alert > ul { - margin-bottom: 0; } - .alert > p + p { - margin-top: 5px; } - -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; } - .alert-dismissable .close, - .alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; } - -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #3c763d; } - .alert-success hr { - border-top-color: #c9e2b3; } - .alert-success .alert-link { - color: #2b542c; } - -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #31708f; } - .alert-info hr { - border-top-color: #a6e1ec; } - .alert-info .alert-link { - color: #245269; } - -.alert-warning { - background-color: #fcf8e3; - border-color: #faebcc; - color: #8a6d3b; } - .alert-warning hr { - border-top-color: #f7e1b5; } - .alert-warning .alert-link { - color: #66512c; } - -.alert-danger { - background-color: #f2dede; - border-color: #ebccd1; - color: #a94442; } - .alert-danger hr { - border-top-color: #e4b9c0; } - .alert-danger .alert-link { - color: #843534; } - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; } - to { - background-position: 0 0; } } - -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-radius: 4px; - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } - -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #2487ca; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - transition: width 0.6s ease; } - -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; } - -.progress.active .progress-bar, -.progress-bar.active { - animation: progress-bar-stripes 2s linear infinite; } - -.progress-bar-success { - background-color: #27ae60; } - .progress-striped .progress-bar-success { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } - -.progress-bar-info { - background-color: #2980b9; } - .progress-striped .progress-bar-info { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } - -.progress-bar-warning { - background-color: #e67e22; } - .progress-striped .progress-bar-warning { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } - -.progress-bar-danger { - background-color: #c0392b; } - .progress-striped .progress-bar-danger { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } - -.media { - margin-top: 15px; } - .media:first-child { - margin-top: 0; } - -.media, -.media-body { - zoom: 1; - overflow: hidden; } - -.media-body { - width: 10000px; } - -.media-object { - display: block; } - .media-object.img-thumbnail { - max-width: none; } - -.media-right, -.media > .pull-right, .panel .panel-footer -.media > .tools-footer { - padding-left: 10px; } - -.media-left, -.media > .pull-left { - padding-right: 10px; } - -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; } - -.media-middle { - vertical-align: middle; } - -.media-bottom { - vertical-align: bottom; } - -.media-heading { - margin-top: 0; - margin-bottom: 5px; } - -.media-list { - padding-left: 0; - list-style: none; } - -.list-group { - margin-bottom: 20px; - padding-left: 0; } - -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; } - .list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; } - .list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; } - -a.list-group-item, -button.list-group-item { - color: #555; } - a.list-group-item .list-group-item-heading, - button.list-group-item .list-group-item-heading { - color: #333; } - a.list-group-item:hover, a.list-group-item:focus, - button.list-group-item:hover, - button.list-group-item:focus { - text-decoration: none; - color: #555; - background-color: #f5f5f5; } - -button.list-group-item { - width: 100%; - text-align: left; } - -.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { - background-color: #eeeeee; - color: #777777; - cursor: not-allowed; } - .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading { - color: inherit; } - .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { - color: #777777; } - -.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #2487ca; - border-color: #2487ca; } - .list-group-item.active .list-group-item-heading, - .list-group-item.active .list-group-item-heading > small, - .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading, - .list-group-item.active:hover .list-group-item-heading > small, - .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading, - .list-group-item.active:focus .list-group-item-heading > small, - .list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; } - .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { - color: #c5e2f5; } - -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; } - -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; } - a.list-group-item-success .list-group-item-heading, - button.list-group-item-success .list-group-item-heading { - color: inherit; } - a.list-group-item-success:hover, a.list-group-item-success:focus, - button.list-group-item-success:hover, - button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; } - a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus, - button.list-group-item-success.active, - button.list-group-item-success.active:hover, - button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; } - -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; } - -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; } - a.list-group-item-info .list-group-item-heading, - button.list-group-item-info .list-group-item-heading { - color: inherit; } - a.list-group-item-info:hover, a.list-group-item-info:focus, - button.list-group-item-info:hover, - button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; } - a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus, - button.list-group-item-info.active, - button.list-group-item-info.active:hover, - button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; } - -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; } - -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; } - a.list-group-item-warning .list-group-item-heading, - button.list-group-item-warning .list-group-item-heading { - color: inherit; } - a.list-group-item-warning:hover, a.list-group-item-warning:focus, - button.list-group-item-warning:hover, - button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; } - a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus, - button.list-group-item-warning.active, - button.list-group-item-warning.active:hover, - button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; } - -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; } - -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; } - a.list-group-item-danger .list-group-item-heading, - button.list-group-item-danger .list-group-item-heading { - color: inherit; } - a.list-group-item-danger:hover, a.list-group-item-danger:focus, - button.list-group-item-danger:hover, - button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; } - a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus, - button.list-group-item-danger.active, - button.list-group-item-danger.active:hover, - button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; } - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; } - -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; } - -.panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); } - -.panel-body { - padding: 15px; } - .panel-body:before, .panel-body:after { - content: " "; - display: table; } - .panel-body:after { - clear: both; } - -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; } - .panel-heading > .dropdown .dropdown-toggle { - color: inherit; } - -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; } - .panel-title > a, - .panel-title > small, - .panel-title > .small, - .panel-title > small > a, - .panel-title > .small > a { - color: inherit; } - -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; } - -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; } - .panel > .list-group .list-group-item, - .panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; } - .panel > .list-group:first-child .list-group-item:first-child, - .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; } - .panel > .list-group:last-child .list-group-item:last-child, - .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; } - -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; } - -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; } - -.list-group + .panel-footer { - border-top-width: 0; } - -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; } - .panel > .table caption, - .panel > .table-responsive > .table caption, - .panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; } - -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; } - .panel > .table:first-child > thead:first-child > tr:first-child, - .panel > .table:first-child > tbody:first-child > tr:first-child, - .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, - .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; } - .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, - .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, - .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, - .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, - .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, - .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, - .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, - .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; } - .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, - .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, - .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, - .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, - .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, - .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, - .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, - .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; } - -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; } - .panel > .table:last-child > tbody:last-child > tr:last-child, - .panel > .table:last-child > tfoot:last-child > tr:last-child, - .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, - .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; } - .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, - .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, - .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, - .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, - .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, - .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, - .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, - .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; } - .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, - .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, - .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, - .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, - .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, - .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, - .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, - .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; } - -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #ddd; } - -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; } - -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; } - .panel > .table-bordered > thead > tr > th:first-child, - .panel > .table-bordered > thead > tr > td:first-child, - .panel > .table-bordered > tbody > tr > th:first-child, - .panel > .table-bordered > tbody > tr > td:first-child, - .panel > .table-bordered > tfoot > tr > th:first-child, - .panel > .table-bordered > tfoot > tr > td:first-child, - .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, - .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, - .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, - .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, - .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; } - .panel > .table-bordered > thead > tr > th:last-child, - .panel > .table-bordered > thead > tr > td:last-child, - .panel > .table-bordered > tbody > tr > th:last-child, - .panel > .table-bordered > tbody > tr > td:last-child, - .panel > .table-bordered > tfoot > tr > th:last-child, - .panel > .table-bordered > tfoot > tr > td:last-child, - .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, - .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, - .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, - .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, - .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; } - .panel > .table-bordered > thead > tr:first-child > td, - .panel > .table-bordered > thead > tr:first-child > th, - .panel > .table-bordered > tbody > tr:first-child > td, - .panel > .table-bordered > tbody > tr:first-child > th, - .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, - .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, - .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, - .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; } - .panel > .table-bordered > tbody > tr:last-child > td, - .panel > .table-bordered > tbody > tr:last-child > th, - .panel > .table-bordered > tfoot > tr:last-child > td, - .panel > .table-bordered > tfoot > tr:last-child > th, - .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, - .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, - .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, - .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; } - -.panel > .table-responsive { - border: 0; - margin-bottom: 0; } - -.panel-group { - margin-bottom: 20px; } - .panel-group .panel { - margin-bottom: 0; - border-radius: 4px; } - .panel-group .panel + .panel { - margin-top: 5px; } - .panel-group .panel-heading { - border-bottom: 0; } - .panel-group .panel-heading + .panel-collapse > .panel-body, - .panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; } - .panel-group .panel-footer { - border-top: 0; } - .panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; } - -.panel-default { - border-color: #ddd; } - .panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #ddd; } - .panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ddd; } - .panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333333; } - .panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; } - -.panel-primary { - border-color: #2487ca; } - .panel-primary > .panel-heading { - color: #fff; - background-color: #2487ca; - border-color: #2487ca; } - .panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #2487ca; } - .panel-primary > .panel-heading .badge { - color: #2487ca; - background-color: #fff; } - .panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #2487ca; } - -.panel-success { - border-color: #d6e9c6; } - .panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; } - .panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; } - .panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; } - .panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; } - -.panel-info { - border-color: #bce8f1; } - .panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; } - .panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; } - .panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; } - .panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; } - -.panel-warning { - border-color: #faebcc; } - .panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; } - .panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; } - .panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; } - .panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; } - -.panel-danger { - border-color: #ebccd1; } - .panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; } - .panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; } - .panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; } - .panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; } - -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; } - .embed-responsive .embed-responsive-item, - .embed-responsive iframe, - .embed-responsive embed, - .embed-responsive object, - .embed-responsive video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; } - -.embed-responsive-16by9 { - padding-bottom: 56.25%; } - -.embed-responsive-4by3 { - padding-bottom: 75%; } - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); } - .well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); } - -.well-lg { - padding: 24px; - border-radius: 6px; } - -.well-sm { - padding: 9px; - border-radius: 3px; } - -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: 0.2; - filter: alpha(opacity=20); } - .close:hover, .close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); } - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; } - -.modal-open { - overflow: hidden; } - -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - -webkit-overflow-scrolling: touch; - outline: 0; } - .modal.fade .modal-dialog { - transform: translate(0, -25%); - transition: transform 0.3s ease-out; } - .modal.in .modal-dialog { - transform: translate(0, 0); } - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; } - -.modal-dialog { - position: relative; - width: auto; - margin: 10px; } - -.modal-content { - position: relative; - background-color: #fff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; - outline: 0; } - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; } - .modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); } - .modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); } - -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; } - .modal-header:before, .modal-header:after { - content: " "; - display: table; } - .modal-header:after { - clear: both; } - -.modal-header .close { - margin-top: -2px; } - -.modal-title { - margin: 0; - line-height: 1.428571429; } - -.modal-body { - position: relative; - padding: 15px; } - -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; } - .modal-footer:before, .modal-footer:after { - content: " "; - display: table; } - .modal-footer:after { - clear: both; } - .modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; } - .modal-footer .btn-group .btn + .btn { - margin-left: -1px; } - .modal-footer .btn-block + .btn-block { - margin-left: 0; } - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; } - -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; } - .modal-content { - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); } - .modal-sm { - width: 300px; } } - -@media (min-width: 992px) { - .modal-lg { - width: 900px; } } - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Roboto", sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.428571429; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 12px; - opacity: 0; - filter: alpha(opacity=0); } - .tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); } - .tooltip.top { - margin-top: -3px; - padding: 5px 0; } - .tooltip.right { - margin-left: 3px; - padding: 0 5px; } - .tooltip.bottom { - margin-top: 3px; - padding: 5px 0; } - .tooltip.left { - margin-left: -3px; - padding: 0 5px; } - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 4px; } - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; } - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; } - -.tooltip.top-left .tooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; } - -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; } - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; } - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; } - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; } - -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; } - -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; } - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Roboto", sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.428571429; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 14px; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); } - .popover.top { - margin-top: -10px; } - .popover.right { - margin-left: 10px; } - .popover.bottom { - margin-top: 10px; } - .popover.left { - margin-left: -10px; } - -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; } - -.popover-content { - padding: 9px 14px; } - -.popover > .arrow, .popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; } - -.popover > .arrow { - border-width: 11px; } - -.popover > .arrow:after { - border-width: 10px; - content: ""; } - -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; } - .popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #fff; } - -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); } - .popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #fff; } - -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; } - .popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #fff; } - -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); } - .popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #fff; - bottom: -10px; } - -.carousel { - position: relative; } - -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; } - .carousel-inner > .item { - display: none; - position: relative; - transition: 0.6s ease-in-out left; } - .carousel-inner > .item > img, - .carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; - line-height: 1; } - @media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - transition: transform 0.6s ease-in-out; - backface-visibility: hidden; - perspective: 1000px; } - .carousel-inner > .item.next, .carousel-inner > .item.active.right { - transform: translate3d(100%, 0, 0); - left: 0; } - .carousel-inner > .item.prev, .carousel-inner > .item.active.left { - transform: translate3d(-100%, 0, 0); - left: 0; } - .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active { - transform: translate3d(0, 0, 0); - left: 0; } } - .carousel-inner > .active, - .carousel-inner > .next, - .carousel-inner > .prev { - display: block; } - .carousel-inner > .active { - left: 0; } - .carousel-inner > .next, - .carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; } - .carousel-inner > .next { - left: 100%; } - .carousel-inner > .prev { - left: -100%; } - .carousel-inner > .next.left, - .carousel-inner > .prev.right { - left: 0; } - .carousel-inner > .active.left { - left: -100%; } - .carousel-inner > .active.right { - left: 100%; } - -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 15%; - opacity: 0.5; - filter: alpha(opacity=50); - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - background-color: transparent; } - .carousel-control.left { - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); } - .carousel-control.right { - left: auto; - right: 0; - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); } - .carousel-control:hover, .carousel-control:focus { - outline: 0; - color: #fff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); } - .carousel-control .icon-prev, - .carousel-control .icon-next, - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - margin-top: -10px; - z-index: 5; - display: inline-block; } - .carousel-control .icon-prev, - .carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; } - .carousel-control .icon-next, - .carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; } - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 20px; - height: 20px; - line-height: 1; - font-family: serif; } - .carousel-control .icon-prev:before { - content: '\2039'; } - .carousel-control .icon-next:before { - content: '\203a'; } - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; } - .carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid #fff; - border-radius: 10px; - cursor: pointer; - background-color: #000 \9; - background-color: transparent; } - .carousel-indicators .active { - margin: 0; - width: 12px; - height: 12px; - background-color: #fff; } - -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } - .carousel-caption .btn { - text-shadow: none; } - -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px; } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px; } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px; } - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; } - .carousel-indicators { - bottom: 20px; } } - -.clearfix:before, .clearfix:after { - content: " "; - display: table; } - -.clearfix:after { - clear: both; } - -.center-block { - display: block; - margin-left: auto; - margin-right: auto; } - -.pull-right, .panel .panel-footer .tools-footer { - float: right !important; } - -.pull-left { - float: left !important; } - -.hide { - display: none !important; } - -.show { - display: block !important; } - -.invisible { - visibility: hidden; } - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; } - -.hidden { - display: none !important; } - -.affix { - position: fixed; } - -@-ms-viewport { - width: device-width; } - -.visible-xs { - display: none !important; } - -.visible-sm { - display: none !important; } - -.visible-md { - display: none !important; } - -.visible-lg { - display: none !important; } - -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; } - -@media (max-width: 767px) { - .visible-xs { - display: block !important; } - table.visible-xs { - display: table !important; } - tr.visible-xs { - display: table-row !important; } - th.visible-xs, - td.visible-xs { - display: table-cell !important; } } - -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; } } - -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; } } - -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; } - table.visible-sm { - display: table !important; } - tr.visible-sm { - display: table-row !important; } - th.visible-sm, - td.visible-sm { - display: table-cell !important; } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; } - table.visible-md { - display: table !important; } - tr.visible-md { - display: table-row !important; } - th.visible-md, - td.visible-md { - display: table-cell !important; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; } } - -@media (min-width: 1200px) { - .visible-lg { - display: block !important; } - table.visible-lg { - display: table !important; } - tr.visible-lg { - display: table-row !important; } - th.visible-lg, - td.visible-lg { - display: table-cell !important; } } - -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; } } - -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; } } - -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; } } - -@media (max-width: 767px) { - .hidden-xs { - display: none !important; } } - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; } } - -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; } } - -.visible-print { - display: none !important; } - -@media print { - .visible-print { - display: block !important; } - table.visible-print { - display: table !important; } - tr.visible-print { - display: table-row !important; } - th.visible-print, - td.visible-print { - display: table-cell !important; } } - -.visible-print-block { - display: none !important; } - @media print { - .visible-print-block { - display: block !important; } } - -.visible-print-inline { - display: none !important; } - @media print { - .visible-print-inline { - display: inline !important; } } - -.visible-print-inline-block { - display: none !important; } - @media print { - .visible-print-inline-block { - display: inline-block !important; } } - -@media print { - .hidden-print { - display: none !important; } } - -/*! - * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url("../fonts/fontawesome-webfont.eot?v=4.6.3"); - src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.6.3") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.6.3") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.6.3") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular") format("svg"); - font-weight: normal; - font-style: normal; } - -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; } - -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.3333333333em; - line-height: 0.75em; - vertical-align: -15%; } - -.fa-2x { - font-size: 2em; } - -.fa-3x { - font-size: 3em; } - -.fa-4x { - font-size: 4em; } - -.fa-5x { - font-size: 5em; } - -.fa-fw { - width: 1.2857142857em; - text-align: center; } - -.fa-ul { - padding-left: 0; - margin-left: 2.1428571429em; - list-style-type: none; } - .fa-ul > li { - position: relative; } - -.fa-li { - position: absolute; - left: -2.1428571429em; - width: 2.1428571429em; - top: 0.1428571429em; - text-align: center; } - .fa-li.fa-lg { - left: -1.8571428571em; } - -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eee; - border-radius: .1em; } - -.fa-pull-left { - float: left; } - -.fa-pull-right { - float: right; } - -.fa.fa-pull-left { - margin-right: .3em; } - -.fa.fa-pull-right { - margin-left: .3em; } - -/* Deprecated as of 4.4.0 */ -.pull-right, .panel .panel-footer .tools-footer { - float: right; } - -.pull-left { - float: left; } - -.fa.pull-left { - margin-right: .3em; } - -.fa.pull-right, .panel .panel-footer .fa.tools-footer { - margin-left: .3em; } - -.fa-spin { - animation: fa-spin 2s infinite linear; } - -.fa-pulse { - animation: fa-spin 1s infinite steps(8); } - -@keyframes fa-spin { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(359deg); } } - -.fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - transform: rotate(90deg); } - -.fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - transform: rotate(180deg); } - -.fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - transform: rotate(270deg); } - -.fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - transform: scale(-1, 1); } - -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - transform: scale(1, -1); } - -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - -webkit-filter: none; - filter: none; } - -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; } - -.fa-stack-1x, .fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; } - -.fa-stack-1x { - line-height: inherit; } - -.fa-stack-2x { - font-size: 2em; } - -.fa-inverse { - color: #fff; } - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: ""; } - -.fa-music:before { - content: ""; } - -.fa-search:before { - content: ""; } - -.fa-envelope-o:before { - content: ""; } - -.fa-heart:before { - content: ""; } - -.fa-star:before { - content: ""; } - -.fa-star-o:before { - content: ""; } - -.fa-user:before { - content: ""; } - -.fa-film:before { - content: ""; } - -.fa-th-large:before { - content: ""; } - -.fa-th:before { - content: ""; } - -.fa-th-list:before { - content: ""; } - -.fa-check:before { - content: ""; } - -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: ""; } - -.fa-search-plus:before { - content: ""; } - -.fa-search-minus:before { - content: ""; } - -.fa-power-off:before { - content: ""; } - -.fa-signal:before { - content: ""; } - -.fa-gear:before, -.fa-cog:before { - content: ""; } - -.fa-trash-o:before { - content: ""; } - -.fa-home:before { - content: ""; } - -.fa-file-o:before { - content: ""; } - -.fa-clock-o:before { - content: ""; } - -.fa-road:before { - content: ""; } - -.fa-download:before { - content: ""; } - -.fa-arrow-circle-o-down:before { - content: ""; } - -.fa-arrow-circle-o-up:before { - content: ""; } - -.fa-inbox:before { - content: ""; } - -.fa-play-circle-o:before { - content: ""; } - -.fa-rotate-right:before, -.fa-repeat:before { - content: ""; } - -.fa-refresh:before { - content: ""; } - -.fa-list-alt:before { - content: ""; } - -.fa-lock:before { - content: ""; } - -.fa-flag:before { - content: ""; } - -.fa-headphones:before { - content: ""; } - -.fa-volume-off:before { - content: ""; } - -.fa-volume-down:before { - content: ""; } - -.fa-volume-up:before { - content: ""; } - -.fa-qrcode:before { - content: ""; } - -.fa-barcode:before { - content: ""; } - -.fa-tag:before { - content: ""; } - -.fa-tags:before { - content: ""; } - -.fa-book:before { - content: ""; } - -.fa-bookmark:before { - content: ""; } - -.fa-print:before { - content: ""; } - -.fa-camera:before { - content: ""; } - -.fa-font:before { - content: ""; } - -.fa-bold:before { - content: ""; } - -.fa-italic:before { - content: ""; } - -.fa-text-height:before { - content: ""; } - -.fa-text-width:before { - content: ""; } - -.fa-align-left:before { - content: ""; } - -.fa-align-center:before { - content: ""; } - -.fa-align-right:before { - content: ""; } - -.fa-align-justify:before { - content: ""; } - -.fa-list:before { - content: ""; } - -.fa-dedent:before, -.fa-outdent:before { - content: ""; } - -.fa-indent:before { - content: ""; } - -.fa-video-camera:before { - content: ""; } - -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: ""; } - -.fa-pencil:before { - content: ""; } - -.fa-map-marker:before { - content: ""; } - -.fa-adjust:before { - content: ""; } - -.fa-tint:before { - content: ""; } - -.fa-edit:before, -.fa-pencil-square-o:before { - content: ""; } - -.fa-share-square-o:before { - content: ""; } - -.fa-check-square-o:before { - content: ""; } - -.fa-arrows:before { - content: ""; } - -.fa-step-backward:before { - content: ""; } - -.fa-fast-backward:before { - content: ""; } - -.fa-backward:before { - content: ""; } - -.fa-play:before { - content: ""; } - -.fa-pause:before { - content: ""; } - -.fa-stop:before { - content: ""; } - -.fa-forward:before { - content: ""; } - -.fa-fast-forward:before { - content: ""; } - -.fa-step-forward:before { - content: ""; } - -.fa-eject:before { - content: ""; } - -.fa-chevron-left:before { - content: ""; } - -.fa-chevron-right:before { - content: ""; } - -.fa-plus-circle:before { - content: ""; } - -.fa-minus-circle:before { - content: ""; } - -.fa-times-circle:before { - content: ""; } - -.fa-check-circle:before { - content: ""; } - -.fa-question-circle:before { - content: ""; } - -.fa-info-circle:before { - content: ""; } - -.fa-crosshairs:before { - content: ""; } - -.fa-times-circle-o:before { - content: ""; } - -.fa-check-circle-o:before { - content: ""; } - -.fa-ban:before { - content: ""; } - -.fa-arrow-left:before { - content: ""; } - -.fa-arrow-right:before { - content: ""; } - -.fa-arrow-up:before { - content: ""; } - -.fa-arrow-down:before { - content: ""; } - -.fa-mail-forward:before, -.fa-share:before { - content: ""; } - -.fa-expand:before { - content: ""; } - -.fa-compress:before { - content: ""; } - -.fa-plus:before { - content: ""; } - -.fa-minus:before { - content: ""; } - -.fa-asterisk:before { - content: ""; } - -.fa-exclamation-circle:before { - content: ""; } - -.fa-gift:before { - content: ""; } - -.fa-leaf:before { - content: ""; } - -.fa-fire:before { - content: ""; } - -.fa-eye:before { - content: ""; } - -.fa-eye-slash:before { - content: ""; } - -.fa-warning:before, -.fa-exclamation-triangle:before { - content: ""; } - -.fa-plane:before { - content: ""; } - -.fa-calendar:before { - content: ""; } - -.fa-random:before { - content: ""; } - -.fa-comment:before { - content: ""; } - -.fa-magnet:before { - content: ""; } - -.fa-chevron-up:before { - content: ""; } - -.fa-chevron-down:before { - content: ""; } - -.fa-retweet:before { - content: ""; } - -.fa-shopping-cart:before { - content: ""; } - -.fa-folder:before { - content: ""; } - -.fa-folder-open:before { - content: ""; } - -.fa-arrows-v:before { - content: ""; } - -.fa-arrows-h:before { - content: ""; } - -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: ""; } - -.fa-twitter-square:before { - content: ""; } - -.fa-facebook-square:before { - content: ""; } - -.fa-camera-retro:before { - content: ""; } - -.fa-key:before { - content: ""; } - -.fa-gears:before, -.fa-cogs:before { - content: ""; } - -.fa-comments:before { - content: ""; } - -.fa-thumbs-o-up:before { - content: ""; } - -.fa-thumbs-o-down:before { - content: ""; } - -.fa-star-half:before { - content: ""; } - -.fa-heart-o:before { - content: ""; } - -.fa-sign-out:before { - content: ""; } - -.fa-linkedin-square:before { - content: ""; } - -.fa-thumb-tack:before { - content: ""; } - -.fa-external-link:before { - content: ""; } - -.fa-sign-in:before { - content: ""; } - -.fa-trophy:before { - content: ""; } - -.fa-github-square:before { - content: ""; } - -.fa-upload:before { - content: ""; } - -.fa-lemon-o:before { - content: ""; } - -.fa-phone:before { - content: ""; } - -.fa-square-o:before { - content: ""; } - -.fa-bookmark-o:before { - content: ""; } - -.fa-phone-square:before { - content: ""; } - -.fa-twitter:before { - content: ""; } - -.fa-facebook-f:before, -.fa-facebook:before { - content: ""; } - -.fa-github:before { - content: ""; } - -.fa-unlock:before { - content: ""; } - -.fa-credit-card:before { - content: ""; } - -.fa-feed:before, -.fa-rss:before { - content: ""; } - -.fa-hdd-o:before { - content: ""; } - -.fa-bullhorn:before { - content: ""; } - -.fa-bell:before { - content: ""; } - -.fa-certificate:before { - content: ""; } - -.fa-hand-o-right:before { - content: ""; } - -.fa-hand-o-left:before { - content: ""; } - -.fa-hand-o-up:before { - content: ""; } - -.fa-hand-o-down:before { - content: ""; } - -.fa-arrow-circle-left:before { - content: ""; } - -.fa-arrow-circle-right:before { - content: ""; } - -.fa-arrow-circle-up:before { - content: ""; } - -.fa-arrow-circle-down:before { - content: ""; } - -.fa-globe:before { - content: ""; } - -.fa-wrench:before { - content: ""; } - -.fa-tasks:before { - content: ""; } - -.fa-filter:before { - content: ""; } - -.fa-briefcase:before { - content: ""; } - -.fa-arrows-alt:before { - content: ""; } - -.fa-group:before, -.fa-users:before { - content: ""; } - -.fa-chain:before, -.fa-link:before { - content: ""; } - -.fa-cloud:before { - content: ""; } - -.fa-flask:before { - content: ""; } - -.fa-cut:before, -.fa-scissors:before { - content: ""; } - -.fa-copy:before, -.fa-files-o:before { - content: ""; } - -.fa-paperclip:before { - content: ""; } - -.fa-save:before, -.fa-floppy-o:before { - content: ""; } - -.fa-square:before { - content: ""; } - -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: ""; } - -.fa-list-ul:before { - content: ""; } - -.fa-list-ol:before { - content: ""; } - -.fa-strikethrough:before { - content: ""; } - -.fa-underline:before { - content: ""; } - -.fa-table:before { - content: ""; } - -.fa-magic:before { - content: ""; } - -.fa-truck:before { - content: ""; } - -.fa-pinterest:before { - content: ""; } - -.fa-pinterest-square:before { - content: ""; } - -.fa-google-plus-square:before { - content: ""; } - -.fa-google-plus:before { - content: ""; } - -.fa-money:before { - content: ""; } - -.fa-caret-down:before { - content: ""; } - -.fa-caret-up:before { - content: ""; } - -.fa-caret-left:before { - content: ""; } - -.fa-caret-right:before { - content: ""; } - -.fa-columns:before { - content: ""; } - -.fa-unsorted:before, -.fa-sort:before { - content: ""; } - -.fa-sort-down:before, -.fa-sort-desc:before { - content: ""; } - -.fa-sort-up:before, -.fa-sort-asc:before { - content: ""; } - -.fa-envelope:before { - content: ""; } - -.fa-linkedin:before { - content: ""; } - -.fa-rotate-left:before, -.fa-undo:before { - content: ""; } - -.fa-legal:before, -.fa-gavel:before { - content: ""; } - -.fa-dashboard:before, -.fa-tachometer:before { - content: ""; } - -.fa-comment-o:before { - content: ""; } - -.fa-comments-o:before { - content: ""; } - -.fa-flash:before, -.fa-bolt:before { - content: ""; } - -.fa-sitemap:before { - content: ""; } - -.fa-umbrella:before { - content: ""; } - -.fa-paste:before, -.fa-clipboard:before { - content: ""; } - -.fa-lightbulb-o:before { - content: ""; } - -.fa-exchange:before { - content: ""; } - -.fa-cloud-download:before { - content: ""; } - -.fa-cloud-upload:before { - content: ""; } - -.fa-user-md:before { - content: ""; } - -.fa-stethoscope:before { - content: ""; } - -.fa-suitcase:before { - content: ""; } - -.fa-bell-o:before { - content: ""; } - -.fa-coffee:before { - content: ""; } - -.fa-cutlery:before { - content: ""; } - -.fa-file-text-o:before { - content: ""; } - -.fa-building-o:before { - content: ""; } - -.fa-hospital-o:before { - content: ""; } - -.fa-ambulance:before { - content: ""; } - -.fa-medkit:before { - content: ""; } - -.fa-fighter-jet:before { - content: ""; } - -.fa-beer:before { - content: ""; } - -.fa-h-square:before { - content: ""; } - -.fa-plus-square:before { - content: ""; } - -.fa-angle-double-left:before { - content: ""; } - -.fa-angle-double-right:before { - content: ""; } - -.fa-angle-double-up:before { - content: ""; } - -.fa-angle-double-down:before { - content: ""; } - -.fa-angle-left:before { - content: ""; } - -.fa-angle-right:before { - content: ""; } - -.fa-angle-up:before { - content: ""; } - -.fa-angle-down:before { - content: ""; } - -.fa-desktop:before { - content: ""; } - -.fa-laptop:before { - content: ""; } - -.fa-tablet:before { - content: ""; } - -.fa-mobile-phone:before, -.fa-mobile:before { - content: ""; } - -.fa-circle-o:before { - content: ""; } - -.fa-quote-left:before { - content: ""; } - -.fa-quote-right:before { - content: ""; } - -.fa-spinner:before { - content: ""; } - -.fa-circle:before { - content: ""; } - -.fa-mail-reply:before, -.fa-reply:before { - content: ""; } - -.fa-github-alt:before { - content: ""; } - -.fa-folder-o:before { - content: ""; } - -.fa-folder-open-o:before { - content: ""; } - -.fa-smile-o:before { - content: ""; } - -.fa-frown-o:before { - content: ""; } - -.fa-meh-o:before { - content: ""; } - -.fa-gamepad:before { - content: ""; } - -.fa-keyboard-o:before { - content: ""; } - -.fa-flag-o:before { - content: ""; } - -.fa-flag-checkered:before { - content: ""; } - -.fa-terminal:before { - content: ""; } - -.fa-code:before { - content: ""; } - -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: ""; } - -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: ""; } - -.fa-location-arrow:before { - content: ""; } - -.fa-crop:before { - content: ""; } - -.fa-code-fork:before { - content: ""; } - -.fa-unlink:before, -.fa-chain-broken:before { - content: ""; } - -.fa-question:before { - content: ""; } - -.fa-info:before { - content: ""; } - -.fa-exclamation:before { - content: ""; } - -.fa-superscript:before { - content: ""; } - -.fa-subscript:before { - content: ""; } - -.fa-eraser:before { - content: ""; } - -.fa-puzzle-piece:before { - content: ""; } - -.fa-microphone:before { - content: ""; } - -.fa-microphone-slash:before { - content: ""; } - -.fa-shield:before { - content: ""; } - -.fa-calendar-o:before { - content: ""; } - -.fa-fire-extinguisher:before { - content: ""; } - -.fa-rocket:before { - content: ""; } - -.fa-maxcdn:before { - content: ""; } - -.fa-chevron-circle-left:before { - content: ""; } - -.fa-chevron-circle-right:before { - content: ""; } - -.fa-chevron-circle-up:before { - content: ""; } - -.fa-chevron-circle-down:before { - content: ""; } - -.fa-html5:before { - content: ""; } - -.fa-css3:before { - content: ""; } - -.fa-anchor:before { - content: ""; } - -.fa-unlock-alt:before { - content: ""; } - -.fa-bullseye:before { - content: ""; } - -.fa-ellipsis-h:before { - content: ""; } - -.fa-ellipsis-v:before { - content: ""; } - -.fa-rss-square:before { - content: ""; } - -.fa-play-circle:before { - content: ""; } - -.fa-ticket:before { - content: ""; } - -.fa-minus-square:before { - content: ""; } - -.fa-minus-square-o:before { - content: ""; } - -.fa-level-up:before { - content: ""; } - -.fa-level-down:before { - content: ""; } - -.fa-check-square:before { - content: ""; } - -.fa-pencil-square:before { - content: ""; } - -.fa-external-link-square:before { - content: ""; } - -.fa-share-square:before { - content: ""; } - -.fa-compass:before { - content: ""; } - -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: ""; } - -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: ""; } - -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: ""; } - -.fa-euro:before, -.fa-eur:before { - content: ""; } - -.fa-gbp:before { - content: ""; } - -.fa-dollar:before, -.fa-usd:before { - content: ""; } - -.fa-rupee:before, -.fa-inr:before { - content: ""; } - -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: ""; } - -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: ""; } - -.fa-won:before, -.fa-krw:before { - content: ""; } - -.fa-bitcoin:before, -.fa-btc:before { - content: ""; } - -.fa-file:before { - content: ""; } - -.fa-file-text:before { - content: ""; } - -.fa-sort-alpha-asc:before { - content: ""; } - -.fa-sort-alpha-desc:before { - content: ""; } - -.fa-sort-amount-asc:before { - content: ""; } - -.fa-sort-amount-desc:before { - content: ""; } - -.fa-sort-numeric-asc:before { - content: ""; } - -.fa-sort-numeric-desc:before { - content: ""; } - -.fa-thumbs-up:before { - content: ""; } - -.fa-thumbs-down:before { - content: ""; } - -.fa-youtube-square:before { - content: ""; } - -.fa-youtube:before { - content: ""; } - -.fa-xing:before { - content: ""; } - -.fa-xing-square:before { - content: ""; } - -.fa-youtube-play:before { - content: ""; } - -.fa-dropbox:before { - content: ""; } - -.fa-stack-overflow:before { - content: ""; } - -.fa-instagram:before { - content: ""; } - -.fa-flickr:before { - content: ""; } - -.fa-adn:before { - content: ""; } - -.fa-bitbucket:before { - content: ""; } - -.fa-bitbucket-square:before { - content: ""; } - -.fa-tumblr:before { - content: ""; } - -.fa-tumblr-square:before { - content: ""; } - -.fa-long-arrow-down:before { - content: ""; } - -.fa-long-arrow-up:before { - content: ""; } - -.fa-long-arrow-left:before { - content: ""; } - -.fa-long-arrow-right:before { - content: ""; } - -.fa-apple:before { - content: ""; } - -.fa-windows:before { - content: ""; } - -.fa-android:before { - content: ""; } - -.fa-linux:before { - content: ""; } - -.fa-dribbble:before { - content: ""; } - -.fa-skype:before { - content: ""; } - -.fa-foursquare:before { - content: ""; } - -.fa-trello:before { - content: ""; } - -.fa-female:before { - content: ""; } - -.fa-male:before { - content: ""; } - -.fa-gittip:before, -.fa-gratipay:before { - content: ""; } - -.fa-sun-o:before { - content: ""; } - -.fa-moon-o:before { - content: ""; } - -.fa-archive:before { - content: ""; } - -.fa-bug:before { - content: ""; } - -.fa-vk:before { - content: ""; } - -.fa-weibo:before { - content: ""; } - -.fa-renren:before { - content: ""; } - -.fa-pagelines:before { - content: ""; } - -.fa-stack-exchange:before { - content: ""; } - -.fa-arrow-circle-o-right:before { - content: ""; } - -.fa-arrow-circle-o-left:before { - content: ""; } - -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: ""; } - -.fa-dot-circle-o:before { - content: ""; } - -.fa-wheelchair:before { - content: ""; } - -.fa-vimeo-square:before { - content: ""; } - -.fa-turkish-lira:before, -.fa-try:before { - content: ""; } - -.fa-plus-square-o:before { - content: ""; } - -.fa-space-shuttle:before { - content: ""; } - -.fa-slack:before { - content: ""; } - -.fa-envelope-square:before { - content: ""; } - -.fa-wordpress:before { - content: ""; } - -.fa-openid:before { - content: ""; } - -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: ""; } - -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: ""; } - -.fa-yahoo:before { - content: ""; } - -.fa-google:before { - content: ""; } - -.fa-reddit:before { - content: ""; } - -.fa-reddit-square:before { - content: ""; } - -.fa-stumbleupon-circle:before { - content: ""; } - -.fa-stumbleupon:before { - content: ""; } - -.fa-delicious:before { - content: ""; } - -.fa-digg:before { - content: ""; } - -.fa-pied-piper-pp:before { - content: ""; } - -.fa-pied-piper-alt:before { - content: ""; } - -.fa-drupal:before { - content: ""; } - -.fa-joomla:before { - content: ""; } - -.fa-language:before { - content: ""; } - -.fa-fax:before { - content: ""; } - -.fa-building:before { - content: ""; } - -.fa-child:before { - content: ""; } - -.fa-paw:before { - content: ""; } - -.fa-spoon:before { - content: ""; } - -.fa-cube:before { - content: ""; } - -.fa-cubes:before { - content: ""; } - -.fa-behance:before { - content: ""; } - -.fa-behance-square:before { - content: ""; } - -.fa-steam:before { - content: ""; } - -.fa-steam-square:before { - content: ""; } - -.fa-recycle:before { - content: ""; } - -.fa-automobile:before, -.fa-car:before { - content: ""; } - -.fa-cab:before, -.fa-taxi:before { - content: ""; } - -.fa-tree:before { - content: ""; } - -.fa-spotify:before { - content: ""; } - -.fa-deviantart:before { - content: ""; } - -.fa-soundcloud:before { - content: ""; } - -.fa-database:before { - content: ""; } - -.fa-file-pdf-o:before { - content: ""; } - -.fa-file-word-o:before { - content: ""; } - -.fa-file-excel-o:before { - content: ""; } - -.fa-file-powerpoint-o:before { - content: ""; } - -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: ""; } - -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: ""; } - -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: ""; } - -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: ""; } - -.fa-file-code-o:before { - content: ""; } - -.fa-vine:before { - content: ""; } - -.fa-codepen:before { - content: ""; } - -.fa-jsfiddle:before { - content: ""; } - -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: ""; } - -.fa-circle-o-notch:before { - content: ""; } - -.fa-ra:before, -.fa-resistance:before, -.fa-rebel:before { - content: ""; } - -.fa-ge:before, -.fa-empire:before { - content: ""; } - -.fa-git-square:before { - content: ""; } - -.fa-git:before { - content: ""; } - -.fa-y-combinator-square:before, -.fa-yc-square:before, -.fa-hacker-news:before { - content: ""; } - -.fa-tencent-weibo:before { - content: ""; } - -.fa-qq:before { - content: ""; } - -.fa-wechat:before, -.fa-weixin:before { - content: ""; } - -.fa-send:before, -.fa-paper-plane:before { - content: ""; } - -.fa-send-o:before, -.fa-paper-plane-o:before { - content: ""; } - -.fa-history:before { - content: ""; } - -.fa-circle-thin:before { - content: ""; } - -.fa-header:before { - content: ""; } - -.fa-paragraph:before { - content: ""; } - -.fa-sliders:before { - content: ""; } - -.fa-share-alt:before { - content: ""; } - -.fa-share-alt-square:before { - content: ""; } - -.fa-bomb:before { - content: ""; } - -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: ""; } - -.fa-tty:before { - content: ""; } - -.fa-binoculars:before { - content: ""; } - -.fa-plug:before { - content: ""; } - -.fa-slideshare:before { - content: ""; } - -.fa-twitch:before { - content: ""; } - -.fa-yelp:before { - content: ""; } - -.fa-newspaper-o:before { - content: ""; } - -.fa-wifi:before { - content: ""; } - -.fa-calculator:before { - content: ""; } - -.fa-paypal:before { - content: ""; } - -.fa-google-wallet:before { - content: ""; } - -.fa-cc-visa:before { - content: ""; } - -.fa-cc-mastercard:before { - content: ""; } - -.fa-cc-discover:before { - content: ""; } - -.fa-cc-amex:before { - content: ""; } - -.fa-cc-paypal:before { - content: ""; } - -.fa-cc-stripe:before { - content: ""; } - -.fa-bell-slash:before { - content: ""; } - -.fa-bell-slash-o:before { - content: ""; } - -.fa-trash:before { - content: ""; } - -.fa-copyright:before { - content: ""; } - -.fa-at:before { - content: ""; } - -.fa-eyedropper:before { - content: ""; } - -.fa-paint-brush:before { - content: ""; } - -.fa-birthday-cake:before { - content: ""; } - -.fa-area-chart:before { - content: ""; } - -.fa-pie-chart:before { - content: ""; } - -.fa-line-chart:before { - content: ""; } - -.fa-lastfm:before { - content: ""; } - -.fa-lastfm-square:before { - content: ""; } - -.fa-toggle-off:before { - content: ""; } - -.fa-toggle-on:before { - content: ""; } - -.fa-bicycle:before { - content: ""; } - -.fa-bus:before { - content: ""; } - -.fa-ioxhost:before { - content: ""; } - -.fa-angellist:before { - content: ""; } - -.fa-cc:before { - content: ""; } - -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: ""; } - -.fa-meanpath:before { - content: ""; } - -.fa-buysellads:before { - content: ""; } - -.fa-connectdevelop:before { - content: ""; } - -.fa-dashcube:before { - content: ""; } - -.fa-forumbee:before { - content: ""; } - -.fa-leanpub:before { - content: ""; } - -.fa-sellsy:before { - content: ""; } - -.fa-shirtsinbulk:before { - content: ""; } - -.fa-simplybuilt:before { - content: ""; } - -.fa-skyatlas:before { - content: ""; } - -.fa-cart-plus:before { - content: ""; } - -.fa-cart-arrow-down:before { - content: ""; } - -.fa-diamond:before { - content: ""; } - -.fa-ship:before { - content: ""; } - -.fa-user-secret:before { - content: ""; } - -.fa-motorcycle:before { - content: ""; } - -.fa-street-view:before { - content: ""; } - -.fa-heartbeat:before { - content: ""; } - -.fa-venus:before { - content: ""; } - -.fa-mars:before { - content: ""; } - -.fa-mercury:before { - content: ""; } - -.fa-intersex:before, -.fa-transgender:before { - content: ""; } - -.fa-transgender-alt:before { - content: ""; } - -.fa-venus-double:before { - content: ""; } - -.fa-mars-double:before { - content: ""; } - -.fa-venus-mars:before { - content: ""; } - -.fa-mars-stroke:before { - content: ""; } - -.fa-mars-stroke-v:before { - content: ""; } - -.fa-mars-stroke-h:before { - content: ""; } - -.fa-neuter:before { - content: ""; } - -.fa-genderless:before { - content: ""; } - -.fa-facebook-official:before { - content: ""; } - -.fa-pinterest-p:before { - content: ""; } - -.fa-whatsapp:before { - content: ""; } - -.fa-server:before { - content: ""; } - -.fa-user-plus:before { - content: ""; } - -.fa-user-times:before { - content: ""; } - -.fa-hotel:before, -.fa-bed:before { - content: ""; } - -.fa-viacoin:before { - content: ""; } - -.fa-train:before { - content: ""; } - -.fa-subway:before { - content: ""; } - -.fa-medium:before { - content: ""; } - -.fa-yc:before, -.fa-y-combinator:before { - content: ""; } - -.fa-optin-monster:before { - content: ""; } - -.fa-opencart:before { - content: ""; } - -.fa-expeditedssl:before { - content: ""; } - -.fa-battery-4:before, -.fa-battery-full:before { - content: ""; } - -.fa-battery-3:before, -.fa-battery-three-quarters:before { - content: ""; } - -.fa-battery-2:before, -.fa-battery-half:before { - content: ""; } - -.fa-battery-1:before, -.fa-battery-quarter:before { - content: ""; } - -.fa-battery-0:before, -.fa-battery-empty:before { - content: ""; } - -.fa-mouse-pointer:before { - content: ""; } - -.fa-i-cursor:before { - content: ""; } - -.fa-object-group:before { - content: ""; } - -.fa-object-ungroup:before { - content: ""; } - -.fa-sticky-note:before { - content: ""; } - -.fa-sticky-note-o:before { - content: ""; } - -.fa-cc-jcb:before { - content: ""; } - -.fa-cc-diners-club:before { - content: ""; } - -.fa-clone:before { - content: ""; } - -.fa-balance-scale:before { - content: ""; } - -.fa-hourglass-o:before { - content: ""; } - -.fa-hourglass-1:before, -.fa-hourglass-start:before { - content: ""; } - -.fa-hourglass-2:before, -.fa-hourglass-half:before { - content: ""; } - -.fa-hourglass-3:before, -.fa-hourglass-end:before { - content: ""; } - -.fa-hourglass:before { - content: ""; } - -.fa-hand-grab-o:before, -.fa-hand-rock-o:before { - content: ""; } - -.fa-hand-stop-o:before, -.fa-hand-paper-o:before { - content: ""; } - -.fa-hand-scissors-o:before { - content: ""; } - -.fa-hand-lizard-o:before { - content: ""; } - -.fa-hand-spock-o:before { - content: ""; } - -.fa-hand-pointer-o:before { - content: ""; } - -.fa-hand-peace-o:before { - content: ""; } - -.fa-trademark:before { - content: ""; } - -.fa-registered:before { - content: ""; } - -.fa-creative-commons:before { - content: ""; } - -.fa-gg:before { - content: ""; } - -.fa-gg-circle:before { - content: ""; } - -.fa-tripadvisor:before { - content: ""; } - -.fa-odnoklassniki:before { - content: ""; } - -.fa-odnoklassniki-square:before { - content: ""; } - -.fa-get-pocket:before { - content: ""; } - -.fa-wikipedia-w:before { - content: ""; } - -.fa-safari:before { - content: ""; } - -.fa-chrome:before { - content: ""; } - -.fa-firefox:before { - content: ""; } - -.fa-opera:before { - content: ""; } - -.fa-internet-explorer:before { - content: ""; } - -.fa-tv:before, -.fa-television:before { - content: ""; } - -.fa-contao:before { - content: ""; } - -.fa-500px:before { - content: ""; } - -.fa-amazon:before { - content: ""; } - -.fa-calendar-plus-o:before { - content: ""; } - -.fa-calendar-minus-o:before { - content: ""; } - -.fa-calendar-times-o:before { - content: ""; } - -.fa-calendar-check-o:before { - content: ""; } - -.fa-industry:before { - content: ""; } - -.fa-map-pin:before { - content: ""; } - -.fa-map-signs:before { - content: ""; } - -.fa-map-o:before { - content: ""; } - -.fa-map:before { - content: ""; } - -.fa-commenting:before { - content: ""; } - -.fa-commenting-o:before { - content: ""; } - -.fa-houzz:before { - content: ""; } - -.fa-vimeo:before { - content: ""; } - -.fa-black-tie:before { - content: ""; } - -.fa-fonticons:before { - content: ""; } - -.fa-reddit-alien:before { - content: ""; } - -.fa-edge:before { - content: ""; } - -.fa-credit-card-alt:before { - content: ""; } - -.fa-codiepie:before { - content: ""; } - -.fa-modx:before { - content: ""; } - -.fa-fort-awesome:before { - content: ""; } - -.fa-usb:before { - content: ""; } - -.fa-product-hunt:before { - content: ""; } - -.fa-mixcloud:before { - content: ""; } - -.fa-scribd:before { - content: ""; } - -.fa-pause-circle:before { - content: ""; } - -.fa-pause-circle-o:before { - content: ""; } - -.fa-stop-circle:before { - content: ""; } - -.fa-stop-circle-o:before { - content: ""; } - -.fa-shopping-bag:before { - content: ""; } - -.fa-shopping-basket:before { - content: ""; } - -.fa-hashtag:before { - content: ""; } - -.fa-bluetooth:before { - content: ""; } - -.fa-bluetooth-b:before { - content: ""; } - -.fa-percent:before { - content: ""; } - -.fa-gitlab:before { - content: ""; } - -.fa-wpbeginner:before { - content: ""; } - -.fa-wpforms:before { - content: ""; } - -.fa-envira:before { - content: ""; } - -.fa-universal-access:before { - content: ""; } - -.fa-wheelchair-alt:before { - content: ""; } - -.fa-question-circle-o:before { - content: ""; } - -.fa-blind:before { - content: ""; } - -.fa-audio-description:before { - content: ""; } - -.fa-volume-control-phone:before { - content: ""; } - -.fa-braille:before { - content: ""; } - -.fa-assistive-listening-systems:before { - content: ""; } - -.fa-asl-interpreting:before, -.fa-american-sign-language-interpreting:before { - content: ""; } - -.fa-deafness:before, -.fa-hard-of-hearing:before, -.fa-deaf:before { - content: ""; } - -.fa-glide:before { - content: ""; } - -.fa-glide-g:before { - content: ""; } - -.fa-signing:before, -.fa-sign-language:before { - content: ""; } - -.fa-low-vision:before { - content: ""; } - -.fa-viadeo:before { - content: ""; } - -.fa-viadeo-square:before { - content: ""; } - -.fa-snapchat:before { - content: ""; } - -.fa-snapchat-ghost:before { - content: ""; } - -.fa-snapchat-square:before { - content: ""; } - -.fa-pied-piper:before { - content: ""; } - -.fa-first-order:before { - content: ""; } - -.fa-yoast:before { - content: ""; } - -.fa-themeisle:before { - content: ""; } - -.fa-google-plus-circle:before, -.fa-google-plus-official:before { - content: ""; } - -.fa-fa:before, -.fa-font-awesome:before { - content: ""; } - -.sr-only, .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after, .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after, .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after, .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after, .bootstrap-datetimepicker-widget .btn[data-action="today"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; } - -.sr-only-focusable:active, .sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; } - -/*! - * Datetimepicker for Bootstrap 3 - * ! version : 4.7.14 - * https://github.com/Eonasdan/bootstrap-datetimepicker/ - */ -.bootstrap-datetimepicker-widget { - list-style: none; } - .bootstrap-datetimepicker-widget.dropdown-menu { - margin: 2px 0; - padding: 4px; - width: 19em; } - @media (min-width: 768px) { - .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { - width: 38em; } } - @media (min-width: 992px) { - .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { - width: 38em; } } - @media (min-width: 1200px) { - .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs { - width: 38em; } } - .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after { - content: ''; - display: inline-block; - position: absolute; } - .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before { - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - top: -7px; - left: 7px; } - .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after { - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid white; - top: -6px; - left: 8px; } - .bootstrap-datetimepicker-widget.dropdown-menu.top:before { - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-top: 7px solid #ccc; - border-top-color: rgba(0, 0, 0, 0.2); - bottom: -7px; - left: 6px; } - .bootstrap-datetimepicker-widget.dropdown-menu.top:after { - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid white; - bottom: -6px; - left: 7px; } - .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before, .panel .panel-footer .bootstrap-datetimepicker-widget.dropdown-menu.tools-footer:before { - left: auto; - right: 6px; } - .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after, .panel .panel-footer .bootstrap-datetimepicker-widget.dropdown-menu.tools-footer:after { - left: auto; - right: 7px; } - .bootstrap-datetimepicker-widget .list-unstyled { - margin: 0; } - .bootstrap-datetimepicker-widget a[data-action] { - padding: 6px 0; } - .bootstrap-datetimepicker-widget a[data-action]:active { - box-shadow: none; } - .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second { - width: 54px; - font-weight: bold; - font-size: 1.2em; - margin: 0; } - .bootstrap-datetimepicker-widget button[data-action] { - padding: 6px; } - .bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after { - content: "Increment Hours"; } - .bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after { - content: "Increment Minutes"; } - .bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after { - content: "Decrement Hours"; } - .bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after { - content: "Decrement Minutes"; } - .bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after { - content: "Show Hours"; } - .bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after { - content: "Show Minutes"; } - .bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after { - content: "Toggle AM/PM"; } - .bootstrap-datetimepicker-widget .btn[data-action="clear"]::after { - content: "Clear the picker"; } - .bootstrap-datetimepicker-widget .btn[data-action="today"]::after { - content: "Set the date to today"; } - .bootstrap-datetimepicker-widget .picker-switch { - text-align: center; } - .bootstrap-datetimepicker-widget .picker-switch::after { - content: "Toggle Date and Time Screens"; } - .bootstrap-datetimepicker-widget .picker-switch td { - padding: 0; - margin: 0; - height: auto; - width: auto; - line-height: inherit; } - .bootstrap-datetimepicker-widget .picker-switch td span { - line-height: 2.5; - height: 2.5em; - width: 100%; } - .bootstrap-datetimepicker-widget table { - width: 100%; - margin: 0; } - .bootstrap-datetimepicker-widget table td, - .bootstrap-datetimepicker-widget table th { - text-align: center; - border-radius: 4px; } - .bootstrap-datetimepicker-widget table th { - height: 20px; - line-height: 20px; - width: 20px; } - .bootstrap-datetimepicker-widget table th.picker-switch { - width: 145px; } - .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover { - background: none; - color: #777777; - cursor: not-allowed; } - .bootstrap-datetimepicker-widget table th.prev::after { - content: "Previous Month"; } - .bootstrap-datetimepicker-widget table th.next::after { - content: "Next Month"; } - .bootstrap-datetimepicker-widget table thead tr:first-child th { - cursor: pointer; } - .bootstrap-datetimepicker-widget table thead tr:first-child th:hover { - background: #eeeeee; } - .bootstrap-datetimepicker-widget table td { - height: 54px; - line-height: 54px; - width: 54px; } - .bootstrap-datetimepicker-widget table td.cw { - font-size: .8em; - height: 20px; - line-height: 20px; - color: #777777; } - .bootstrap-datetimepicker-widget table td.day { - height: 20px; - line-height: 20px; - width: 20px; } - .bootstrap-datetimepicker-widget table td.day:hover, .bootstrap-datetimepicker-widget table td.hour:hover, .bootstrap-datetimepicker-widget table td.minute:hover, .bootstrap-datetimepicker-widget table td.second:hover { - background: #eeeeee; - cursor: pointer; } - .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new { - color: #777777; } - .bootstrap-datetimepicker-widget table td.today { - position: relative; } - .bootstrap-datetimepicker-widget table td.today:before { - content: ''; - display: inline-block; - border: 0 0 7px 7px solid transparent; - border-bottom-color: #2487ca; - border-top-color: rgba(0, 0, 0, 0.2); - position: absolute; - bottom: 4px; - right: 4px; } - .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover { - background-color: #2487ca; - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } - .bootstrap-datetimepicker-widget table td.active.today:before { - border-bottom-color: #fff; } - .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover { - background: none; - color: #777777; - cursor: not-allowed; } - .bootstrap-datetimepicker-widget table td span { - display: inline-block; - width: 54px; - height: 54px; - line-height: 54px; - margin: 2px 1.5px; - cursor: pointer; - border-radius: 4px; } - .bootstrap-datetimepicker-widget table td span:hover { - background: #eeeeee; } - .bootstrap-datetimepicker-widget table td span.active { - background-color: #2487ca; - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } - .bootstrap-datetimepicker-widget table td span.old { - color: #777777; } - .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover { - background: none; - color: #777777; - cursor: not-allowed; } - .bootstrap-datetimepicker-widget.usetwentyfour td.hour { - height: 27px; - line-height: 27px; } - -.input-group.date .input-group-addon { - cursor: pointer; } - -body { - height: 100%; } - -h2 { - padding-bottom: 15px; } - -.brand-text { - font-family: "Raleway", Helvetica, Arial; } - -label.error { - color: #c0392b; - font-size: 10px; } - -.form-control.error { - border-color: #c0392b; } - .form-control.error:active, .form-control.error:focus { - box-shadow: inset 0 1px 1px rgba(192, 57, 43, 0.075), 0 0 8px rgba(192, 57, 43, 0.6); } - -.spinner-wrap { - display: inline-block; } - .spinner-wrap.inline { - position: absolute; - right: -10px; - top: 10px; - z-index: 3; } - .spinner-wrap.inline .spinner { - border: 0.25rem solid #2487ca; - border-top-color: white; } - -.input-group .spinner-wrap.inline { - right: -25px; } - -.progress { - height: 10px; } - -.btn { - text-transform: uppercase; } - .btn .spinner-wrap { - margin-left: 10px; } - -.spinner { - display: inline-block; - border-radius: 50%; - width: 15px; - height: 15px; - border: 0.25rem solid rgba(255, 255, 255, 0.2); - border-top-color: white; - animation: spin 1s infinite linear; } - -@keyframes spin { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } - -.loading-wrap { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); } - -.loading-wrap .dot { - width: 10px; - height: 10px; - border: 2px solid white; - border-radius: 50%; - float: left; - margin: 0 5px; - transform: scale(0); - animation: dotfx 1000ms ease infinite 0ms; } - -.loading-wrap .dot:nth-child(2) { - animation: dotfx 1000ms ease infinite 300ms; } - -.loading-wrap .dot:nth-child(3) { - animation: dotfx 1000ms ease infinite 600ms; } - -@keyframes dotfx { - 50% { - transform: scale(1); - opacity: 1; } - 100% { - opacity: 0; } } - -.modal { - /*! adjust transition time */ - transition: all 0.3s ease-out !important; } - -.modal.in .modal-dialog { - /*! editthis transform to any transform you want */ - transform: scale(1, 1) !important; } - -.modal.fade .modal-dialog { - /*! disable sliding from left/right/top/bottom */ - transform: translate(0, 0); } - -.label a { - color: #fff; - text-decoration: none; } - -footer { - font-size: 12px; - padding-bottom: 5px; - clear: both; } - -.section-content { - margin-bottom: 0; } - -.selectize-input { - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; } - .selectize-input.locked { - background: #eeeeee; - cursor: not-allowed; - opacity: 1; } - -.selectize-control.error .selectize-input { - border-color: #c0392b; } - .selectize-control.error .selectize-input.focus { - box-shadow: inset 0 1px 1px rgba(192, 57, 43, 0.075), 0 0 8px rgba(192, 57, 43, 0.6); } - -.selectize-control.plugin-allow-clear .clear-selection { - position: absolute; - top: 7px; - right: 35px; - z-index: 10; - color: #777777; - cursor: pointer; } - .selectize-control.plugin-allow-clear .clear-selection.disabled { - color: #eeeeee; } - -.form-inline .selectize-control { - min-width: 225px; } - -.selectize-dropdown.form-control { - position: absolute; } - -.selectize-control.input-sm .selectize-input, .input-group-sm > .selectize-control.form-control .selectize-input, -.input-group-sm > .selectize-control.input-group-addon .selectize-input, -.input-group-sm > .input-group-btn > .selectize-control.btn .selectize-input { - font-size: 12px; - padding-top: 4px; - padding-bottom: 3px; - min-height: 30px; - overflow: inherit; - border-radius: 3px; } - .selectize-control.input-sm .selectize-input input, .input-group-sm > .selectize-control.form-control .selectize-input input, - .input-group-sm > .selectize-control.input-group-addon .selectize-input input, - .input-group-sm > .input-group-btn > .selectize-control.btn .selectize-input input { - font-size: 12px; } - -.selectize-control.input-sm .clear-selection, .input-group-sm > .selectize-control.form-control .clear-selection, -.input-group-sm > .selectize-control.input-group-addon .clear-selection, -.input-group-sm > .input-group-btn > .selectize-control.btn .clear-selection { - top: 5px; - right: 30px; } - -.input-group .form-control:not(:first-child):not(:last-child) .selectize-input { - border-bottom-right-radius: 0; - border-top-right-radius: 0; - border-right: 0; } - -ul.list-indented > li { - margin-left: 25px; } - -.label { - margin: 0 2px; } - -.file-uploader .upload-block { - float: left; - border: thin solid #eeeeee; - border-radius: 3px; } - .file-uploader .upload-block .fileinput-button { - padding: 0; - text-align: center; - opacity: .2; - background: #eeeeee; } - .file-uploader .upload-block .fileinput-button i.fa { - color: #777777; - opacity: .3; } - .file-uploader .upload-block .fileinput-button:hover { - opacity: .4; } - .file-uploader .upload-block .fileinput-button.disabled { - background: #eeeeee; } - .file-uploader .upload-block .progress { - height: 5px; - margin-right: 5px; - margin-left: 5px; - position: absolute; - bottom: 5px; - margin-bottom: 0; } - -.file-uploader .delete-img { - color: #c0392b; - position: absolute; - top: 0; - right: -20px; - padding: 5px; - z-index: 20; - display: none; } - -.file-uploader:hover .delete-img { - display: inline; } - -.file-uploader .uploaded-files { - float: left; } - .file-uploader .uploaded-files .block { - float: left; - border: thin solid #eeeeee; - border-radius: 3px; } - -.file-uploader.single .upload-block { - position: relative; - z-index: 10; } - -.file-uploader.single .uploaded-files { - position: absolute; - z-index: 9; } - -.file-uploader.small .block { - width: 80px; } - -.file-uploader.small .upload-block, .file-uploader.small .upload-block .fileinput-button { - width: 80px; - height: 80px; - line-height: 80px; } - .file-uploader.small .upload-block i.fa, .file-uploader.small .upload-block .fileinput-button i.fa { - font-size: 20px; } - .file-uploader.small .upload-block .progress, .file-uploader.small .upload-block .fileinput-button .progress { - width: 70px; } - -.file-uploader.large .block { - width: 160px; } - -.file-uploader.large .upload-block, .file-uploader.large .upload-block .fileinput-button { - width: 160px; - height: 160px; - line-height: 160px; } - .file-uploader.large .upload-block i.fa, .file-uploader.large .upload-block .fileinput-button i.fa { - font-size: 40px; } - .file-uploader.large .upload-block .progress, .file-uploader.large .upload-block .fileinput-button .progress { - width: 150px; } - -.fileinput-button { - position: relative; - overflow: hidden; - display: inline-block; } - -.fileinput-button input { - position: absolute; - top: 0; - right: 0; - margin: 0; - opacity: 0; - -ms-filter: 'alpha(opacity=0)'; - font-size: 200px !important; - direction: ltr; - cursor: pointer; } - -/* Fixes for IE < 8 */ -@media screen\9 { - .fileinput-button input { - filter: alpha(opacity=0); - font-size: 100%; - height: 100%; } } - -.checkbox-row { - position: relative; - margin: 15px 0; } - .checkbox-row.disabled label { - background: #eeeeee !important; - cursor: not-allowed; } - .checkbox-row.disabled label:after { - content: none; } - .checkbox-row.disabled label:hover::after { - opacity: 0; } - .checkbox-row.disabled input[type=checkbox]:checked + label:after { - content: '' !important; - opacity: 1 !important; } - .checkbox-row label { - width: 22px; - height: 22px; - cursor: pointer; - position: absolute; - top: 0; - left: 0; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - background: #fff; } - .checkbox-row label:after { - content: ''; - width: 9px; - height: 5px; - position: absolute; - top: 6px; - left: 6px; - border: 3px solid #555555; - border-top: none; - border-right: none; - background: transparent; - opacity: 0; - transform: rotate(-45deg); } - .checkbox-row label:hover::after { - opacity: 0.5; } - .checkbox-row span { - font-weight: normal; - margin-left: 30px; - width: 290px; - position: absolute; } - .checkbox-row input[type=checkbox] { - visibility: hidden; } - .checkbox-row input[type=checkbox]:checked + label:after { - opacity: 1; } - -.tabs-left, .tabs-right { - border-bottom: none; - padding-top: 2px; } - -.tabs-left { - border-right: 1px solid #ddd; } - -.tabs-right { - border-left: 1px solid #ddd; } - -.tabs-left > li, .tabs-right > li { - float: none; - margin-bottom: 2px; } - -.tabs-left > li { - margin-right: -1px; } - -.tabs-right > li { - margin-left: -1px; } - -.tabs-left > li.active > a, -.tabs-left > li.active > a:hover, -.tabs-left > li.active > a:focus { - border-bottom-color: #ddd; - border-right-color: transparent; } - -.tabs-right > li.active > a, -.tabs-right > li.active > a:hover, -.tabs-right > li.active > a:focus { - border-bottom: 1px solid #ddd; - border-left-color: transparent; } - -.tabs-left > li > a { - border-radius: 4px 0 0 4px; - margin-right: 0; - display: block; } - -.tabs-right > li > a { - border-radius: 0 4px 4px 0; - margin-right: 0; } - -.tabs-left { - padding-top: 0; - margin-top: 2px; } - -.tab-content { - border-top: 1px solid #ddd; - border-right: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin-left: -30px; - margin-top: 2px; } - -.nav-tabs > li > a:hover { - border-color: transparent #ddd transparent transparent; } - -.auth-row { - min-height: 100%; - height: auto !important; - margin-bottom: 50px; } - -.form-auth { - margin-top: 20%; - background: #fff; - padding: 30px; } - -@media (max-width: 991px) { - .form-auth { - margin-top: 30px; } } - -body.auth-body { - background: url("/images/auth-bg.jpg"); - background-size: cover; } - -body.setup-layout { - padding-top: 20px; - padding-bottom: 20px; } - body.setup-layout .header h3 { - margin-top: 0; - margin-bottom: 0; - line-height: 40px; } - body.setup-layout .header h3 a { - text-decoration: none; - color: #777777; } - body.setup-layout .setup-incomplete { - min-height: 350px; } - body.setup-layout .setup-incomplete i.fa { - font-size: 100px; - color: #f7f7f7; - margin-top: 50px; - margin-bottom: 30px; } - @media (min-width: 768px) { - body.setup-layout .container { - max-width: 730px; } } - body.setup-layout .container-narrow > hr { - margin: 30px 0; } - @media screen and (min-width: 768px) { - body.setup-layout .header, - body.setup-layout .marketing, - body.setup-layout .footer { - padding-right: 0; - padding-left: 0; } - body.setup-layout .header { - margin-bottom: 30px; } - body.setup-layout .jumbotron { - border-bottom: 0; } } - -body.error-layout { - padding-top: 20px; - padding-bottom: 20px; } - body.error-layout .header h3 { - margin-top: 0; - margin-bottom: 0; - line-height: 40px; } - body.error-layout .header h3 a { - text-decoration: none; - color: #777777; } - body.error-layout .error-page { - min-height: 350px; } - body.error-layout .error-page i.fa { - font-size: 100px; - color: #f7f7f7; - margin-top: 50px; - margin-bottom: 30px; } - @media (min-width: 768px) { - body.error-layout .container { - max-width: 730px; } } - body.error-layout .container-narrow > hr { - margin: 30px 0; } - @media screen and (min-width: 768px) { - body.error-layout .header, - body.error-layout .marketing, - body.error-layout .footer { - padding-right: 0; - padding-left: 0; } } - -body { - background: #eeeeee; } - -.navbar-brand img { - float: left; - margin: -5px; } - -.navbar-brand span { - display: inline-block; - float: left; - padding-left: 10px; - font-size: 20px; } - -.landing-screen i.fa { - font-size: 100px; - color: #f7f7f7; - margin-top: 50px; - margin-bottom: 30px; } - -.dashboard-section { - padding-top: 15px; } - -.dash-content { - margin-top: 50px; - padding-top: 15px; } - .dash-content .section h2 { - margin: 0; - font-family: "Raleway", Helvetica, Arial; } - .dash-content .section .tab-content { - background: #fff; } - .dash-content .section .tab-pane { - padding: 15px; } - .dash-content .section .tab-pane .form-horizontal, .dash-content .section .tab-pane .columns { - padding-top: 15px; } - .dash-content .section .tab-pane .form-horizontal .placeholder, .dash-content .section .tab-pane .columns .placeholder { - margin-top: -15px; } - .dash-content .section-content { - background: #fff; } - .dash-content .section-content.section-content-transparent { - background: transparent; } - .dash-content .table td.tools-column { - width: 150px; - height: 40px; } - .dash-content .table td.tools-column a { - display: none; } - .dash-content .table tr:hover .tools-column a { - display: inline-block; } - .dash-content .criteria-filter label { - margin-right: 15px; } - .dash-content .criteria-filter .panel-body { - padding: 15px 15px 5px 15px; } - .dash-content .criteria-filter .form-group { - margin-right: 25px; - margin-bottom: 10px; } - .dash-content .criteria-filter .btn-col { - margin-right: 0; } - -.panel .panel-footer .tools-footer { - display: none; } - .panel .panel-footer .tools-footer a { - margin-left: 10px; } - -.panel .panel-footer .label { - margin-top: 5px; } - -.panel:hover .tools-footer { - display: block; } - -.placeholder { - background: -webkit-repeating-linear-gradient(135deg, #fff, #fff 25%, #F7F7F7 25%, #F7F7F7 50%, #fff 50%) top left fixed; - background: repeating-linear-gradient(-45deg, #fff, #fff 25%, #F7F7F7 25%, #F7F7F7 50%, #fff 50%) top left fixed; - background-size: 30px 30px; - text-align: center; - padding: 30px 15px; - margin: 0 -15px; - color: #777777; } - -.placeholder-row { - padding: 15px; } - .placeholder-row .placeholder { - margin: 0; } - -.breadcrumb { - padding: 8px 0; - background: transparent; } - -.pagination-row { - width: 100%; - text-align: center; } - -footer { - margin-top: 10px; } - -.modal-section { - padding: 15px; } - -/*# sourceMappingURL=collejo.css.map */ diff --git a/src/resources/assets/css/collejo.css.map b/src/resources/assets/css/collejo.css.map deleted file mode 100644 index 0145a1b..0000000 --- a/src/resources/assets/css/collejo.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["collejo.css","_animate.scss","_selectize.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_normalize.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_print.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_scaffolding.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss","_variables.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_variables.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_tab-focus.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_image.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_type.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_background-variant.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_clearfix.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-overflow.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_code.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_grid.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid-framework.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_tables.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_table-row.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_forms.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_forms.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_buttons.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_buttons.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_opacity.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_component-animations.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_dropdowns.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-divider.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-filter.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_button-groups.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_border-radius.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_input-groups.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_navs.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_navbar.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_breadcrumbs.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_pagination.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_pagination.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_pager.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_labels.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_labels.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_badges.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_jumbotron.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_thumbnails.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_alerts.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_alerts.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_progress-bars.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_gradients.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_progress-bar.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_media.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_list-group.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_list-group.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_panels.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_panels.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-embed.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_wells.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_close.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_modals.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_tooltip.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-text.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_popovers.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_carousel.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_utilities.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_center-block.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_hide-text.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-utilities.scss","../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss","../../../../node_modules/font-awesome/scss/font-awesome.scss","../../../../node_modules/font-awesome/scss/_path.scss","../../../../node_modules/font-awesome/scss/_core.scss","../../../../node_modules/font-awesome/scss/_larger.scss","../../../../node_modules/font-awesome/scss/_fixed-width.scss","../../../../node_modules/font-awesome/scss/_list.scss","../../../../node_modules/font-awesome/scss/_variables.scss","../../../../node_modules/font-awesome/scss/_bordered-pulled.scss","../../../../node_modules/font-awesome/scss/_animated.scss","../../../../node_modules/font-awesome/scss/_rotated-flipped.scss","../../../../node_modules/font-awesome/scss/_mixins.scss","../../../../node_modules/font-awesome/scss/_stacked.scss","../../../../node_modules/font-awesome/scss/_icons.scss","../../../../node_modules/font-awesome/scss/_screen-reader.scss","../../../../node_modules/eonasdan-bootstrap-datetimepicker/src/sass/_bootstrap-datetimepicker.scss","collejo/_common.scss","collejo/_uploader.scss","collejo/_checkbox.scss","collejo/_tabs.scss","collejo/_auth.scss","collejo/_setup.scss","collejo/_errors.scss","collejo/_dash.scss","collejo/_modal.scss"],"names":[],"mappings":"AAAA,iBAAiB;ACEjB;;;;;;GAMG;AAEH;EAEE,uBAAuB;EAEvB,0BAA0B,EAa3B;EAjBD;IAOI,oCAAoC,EACrC;EARH;IAWI,uBAAuB,EACxB;EAZH;IAeI,yBAAyB,EAC1B;;AAgCH;EACE;IAEE,+DAAuC;IAEvC,gCAAsB,EAAA;EAGxB;IAEE,kEAAuC;IAEvC,oCAAsB,EAAA;EAGxB;IAEE,kEAAuC;IAEvC,oCAAsB,EAAA;EAGxB;IAEE,mCAAsB,EAAA,EAAA;;AAK1B;EAEE,uBAAuB;EAEvB,gCAAgC,EACjC;;AAaD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW,EAAA,EAAA;;AAKf;EAEE,sBAAsB,EACvB;;AAED,8EAA8E;;AAoB9E;EACE;IAEE,4BAAkB,EAAA;EAGpB;IAEE,qCAAkB,EAAA;EAGpB;IAEE,4BAAkB,EAAA,EAAA;;AAKtB;EAEE,sBAAsB,EACvB;;AAwCD;EACE;IAEE,4BAAkB,EAAA;EAGpB;IAEE,kCAAkB,EAAA;EAGpB;IAEE,kCAAkB,EAAA;EAGpB;IAEE,kCAAkB,EAAA;EAGpB;IAEE,kCAAkB,EAAA;EAGpB;IAEE,kCAAkB,EAAA;EAGpB;IAEE,4BAAkB,EAAA,EAAA;;AAKtB;EAEE,2BAA2B,EAC5B;;AAoBD;EACE;IAEE,gCAAsB,EAAA;EAGxB;IAEE,oCAAsB,EAAA;EAGxB;IAEE,mCAAsB,EAAA,EAAA;;AAK1B;EAEE,sBAAsB,EACvB;;AAmCD;EACE;IAEE,yBAAqB,EAAA;EAGvB;IAEE,2CAAmC,EAAA;EAGrC;IAEE,yCAAkC,EAAA;EAGpC;IAEE,2CAAmC,EAAA;EAGrC;IAEE,yCAAkC,EAAA;EAGpC;IAEE,yBAAqB,EAAA,EAAA;;AAKzB;EAEE,uCAAuC;EAEvC,0BAA0B,EAC3B;;AA8BD;EACE;IAEE,oCAAmB,EAAA;EAGrB;IAEE,qCAAmB,EAAA;EAGrB;IAEE,mCAAmB,EAAA;EAGrB;IAEE,oCAAmB,EAAA;EAGrB;IAEE,mCAAmB,EAAA,EAAA;;AAKvB;EAEE,6BAA6B;EAE7B,sBAAsB,EACvB;;AA8BD;EACE;IAEE,4BAAkB,EAAA;EAGpB;IAEE,2DAA0C,EAAA;EAG5C;IAEE,0DAA0C,EAAA;EAG5C;IAEE,2DAA0C,EAAA;EAG5C;IAEE,4BAAkB,EAAA,EAAA;;AAKtB;EAEE,qBAAqB,EACtB;;AAED,8EAA8E;;AAwC9E;EACE;IAEE,gBAAgB,EAAA;EAGlB;IAEE,4DAA2C,EAAA;EAG7C;IAEE,0DAA0C,EAAA;EAG5C;IAEE,4DAA2C,EAAA;EAG7C;IAEE,0DAA0C,EAAA;EAG5C;IAEE,2DAA0C,EAAA;EAG5C;IAEE,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,uBAAuB,EACxB;;AA6CD;EACE;IAEE,gBAAgB,EAAA;EAGlB;IAEE,2CAAgC,EAAA;EAGlC;IAEE,yCAA+B,EAAA;EAGjC;IAEE,6CAAiC,EAAA;EAGnC;IAEE,6CAAiC,EAAA;EAGnC;IAEE,iDAAmC,EAAA;EAGrC;IAEE,+CAAkC,EAAA;EAGpC;IAEE,iDAAmC,EAAA,EAAA;;AAKvC;EAEE,sBAAsB;EAEtB,yBAAyB,EAC1B;;AA2CD;EACE;IAEE,+DAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,kCAAkB,EAAA;EAGpB;IAEE,kCAAkB,EAAA;EAGpB;IAEE,kCAAkB,EAAA;EAGpB;IACE,WAAW;IAEX,qCAAkB,EAAA;EAGpB;IAEE,qCAAkB,EAAA;EAGpB;IACE,WAAW;IAEX,4BAAkB,EAAA,EAAA;;AAKtB;EAEE,yBAAyB,EAC1B;;AAqCD;EACE;IAEE,+DAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,sCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,mCAAsB,EAAA;EAGxB;IAEE,oCAAsB,EAAA;EAGxB;IAEE,kCAAsB,EAAA;EAGxB;IAEE,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,6BAA6B,EAC9B;;AAqCD;EACE;IAEE,+DAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,sCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,mCAAsB,EAAA;EAGxB;IAEE,oCAAsB,EAAA;EAGxB;IAEE,kCAAsB,EAAA;EAGxB;IAEE,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,6BAA6B,EAC9B;;AAqCD;EACE;IAEE,+DAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,qCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,oCAAsB,EAAA;EAGxB;IAEE,mCAAsB,EAAA;EAGxB;IAEE,mCAAsB,EAAA;EAGxB;IAEE,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,8BAA8B,EAC/B;;AAqCD;EACE;IAEE,+DAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,qCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,oCAAsB,EAAA;EAGxB;IAEE,mCAAsB,EAAA;EAGxB;IAEE,mCAAsB,EAAA;EAGxB;IAEE,gCAAsB,EAAA,EAAA;;AAK1B;EAEE,2BAA2B,EAC5B;;AAsBD;EACE;IAEE,kCAAkB,EAAA;EAGpB;IACE,WAAW;IAEX,kCAAkB,EAAA;EAGpB;IACE,WAAW;IAEX,kCAAkB,EAAA,EAAA;;AAKtB;EAEE,0BAA0B,EAC3B;;AAsBD;EACE;IAEE,mCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,oCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,qCAAsB,EAAA,EAAA;;AAK1B;EAEE,8BAA8B,EAC/B;;AAiBD;EACE;IACE,WAAW;IAEX,mCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,sCAAsB,EAAA,EAAA;;AAK1B;EAEE,8BAA8B,EAC/B;;AAiBD;EACE;IACE,WAAW;IAEX,oCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,qCAAsB,EAAA,EAAA;;AAK1B;EAEE,+BAA+B,EAChC;;AAsBD;EACE;IAEE,oCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,mCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,sCAAsB,EAAA,EAAA;;AAK1B;EAEE,4BAA4B,EAC7B;;AAaD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW,EAAA,EAAA;;AAKf;EAEE,uBAAuB,EACxB;;AAiBD;EACE;IACE,WAAW;IAEX,oCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,2BAA2B,EAC5B;;AAiBD;EACE;IACE,WAAW;IAEX,sCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,8BAA8B,EAC/B;;AAiBD;EACE;IACE,WAAW;IAEX,oCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,2BAA2B,EAC5B;;AAiBD;EACE;IACE,WAAW;IAEX,sCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,8BAA8B,EAC/B;;AAiBD;EACE;IACE,WAAW;IAEX,mCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,4BAA4B,EAC7B;;AAiBD;EACE;IACE,WAAW;IAEX,qCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,+BAA+B,EAChC;;AAiBD;EACE;IACE,WAAW;IAEX,mCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,yBAAyB,EAC1B;;AAiBD;EACE;IACE,WAAW;IAEX,qCAAsB,EAAA;EAGxB;IACE,WAAW;IAEX,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,4BAA4B,EAC7B;;AAaD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW,EAAA,EAAA;;AAKf;EAEE,wBAAwB,EACzB;;AAeD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW;IAEX,mCAAsB,EAAA,EAAA;;AAK1B;EAEE,4BAA4B,EAC7B;;AAeD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW;IAEX,qCAAsB,EAAA,EAAA;;AAK1B;EAEE,+BAA+B,EAChC;;AAeD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW;IAEX,oCAAsB,EAAA,EAAA;;AAK1B;EAEE,4BAA4B,EAC7B;;AAeD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW;IAEX,sCAAsB,EAAA,EAAA;;AAK1B;EAEE,+BAA+B,EAChC;;AAeD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW;IAEX,mCAAsB,EAAA,EAAA;;AAK1B;EAEE,6BAA6B,EAC9B;;AAeD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW;IAEX,qCAAsB,EAAA,EAAA;;AAK1B;EAEE,gCAAgC,EACjC;;AAeD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW;IAEX,oCAAsB,EAAA,EAAA;;AAK1B;EAEE,0BAA0B,EAC3B;;AAeD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW;IAEX,sCAAsB,EAAA,EAAA;;AAK1B;EAEE,6BAA6B,EAC9B;;AAwCD;EACE;IAEE,yDAAsC;IAEtC,oCAAoC,EAAA;EAGtC;IAEE,kFAA+D;IAE/D,oCAAoC,EAAA;EAGtC;IAEE,kFAA+D;IAE/D,mCAAmC,EAAA;EAGrC;IAEE,wDAAqC;IAErC,mCAAmC,EAAA;EAGrC;IAEE,8BAAsB;IAEtB,mCAAmC,EAAA,EAAA;;AAK9B;EAEP,6BAA6B;EAE7B,qBAAqB,EACtB;;AAoCD;EACE;IAEE,uDAAsC;IAEtC,mCAAmC;IACnC,WAAW,EAAA;EAGb;IAEE,wDAAsC;IAEtC,mCAAmC,EAAA;EAGrC;IAEE,uDAAsC;IACtC,WAAW,EAAA;EAGb;IAEE,uDAAsC,EAAA;EAGxC;IAEE,8BAAsB,EAAA,EAAA;;AAK1B;EAEE,wCAAwC;EAExC,wBAAwB,EACzB;;AAoCD;EACE;IAEE,uDAAsC;IAEtC,mCAAmC;IACnC,WAAW,EAAA;EAGb;IAEE,wDAAsC;IAEtC,mCAAmC,EAAA;EAGrC;IAEE,uDAAsC;IACtC,WAAW,EAAA;EAGb;IAEE,uDAAsC,EAAA;EAGxC;IAEE,8BAAsB,EAAA,EAAA;;AAK1B;EAEE,wCAAwC;EAExC,wBAAwB,EACzB;;AAsBD;EACE;IAEE,8BAAsB,EAAA;EAGxB;IAEE,wDAAsC;IACtC,WAAW,EAAA;EAGb;IAEE,uDAAsC;IACtC,WAAW,EAAA,EAAA;;AAKf;EAEE,yBAAyB;EAEzB,wCAAwC,EACzC;;AAsBD;EACE;IAEE,8BAAsB,EAAA;EAGxB;IAEE,wDAAsC;IACtC,WAAW,EAAA;EAGb;IAEE,uDAAsC;IACtC,WAAW,EAAA,EAAA;;AAKf;EAEE,wCAAwC;EAExC,yBAAyB,EAC1B;;AA6BD;EACE;IAEE,iDAAwC;IACxC,WAAW,EAAA;EAGb;IAEE,wBAAgB;IAChB,WAAW,EAAA;EAGb;IAEE,wBAAgB;IAChB,WAAW,EAAA;EAGb;IAEE,gBAAgB;IAChB,WAAW,EAAA,EAAA;;AAKf;EAEE,6BAA6B;EAE7B,oCAAoC,EACrC;;AAeD;EACE;IACE,WAAW,EAAA;EAGb;IAEE,gDAAwC;IACxC,WAAW,EAAA,EAAA;;AAKf;EAEE,8BAA8B;EAE9B,mCAAmC,EACpC;;AAqBD;EACE;IAEE,yBAAyB;IAEzB,sCAAmB;IACnB,WAAW,EAAA;EAGb;IAEE,yBAAyB;IAEzB,gBAAgB;IAChB,WAAW,EAAA,EAAA;;AAKf;EAEE,yBAAyB,EAC1B;;AAqBD;EACE;IAEE,8BAA8B;IAE9B,qCAAmB;IACnB,WAAW,EAAA;EAGb;IAEE,8BAA8B;IAE9B,gBAAgB;IAChB,WAAW,EAAA,EAAA;;AAKf;EAEE,iCAAiC,EAClC;;AAqBD;EACE;IAEE,+BAA+B;IAE/B,oCAAmB;IACnB,WAAW,EAAA;EAGb;IAEE,+BAA+B;IAE/B,gBAAgB;IAChB,WAAW,EAAA,EAAA;;AAKf;EAEE,kCAAkC,EACnC;;AAqBD;EACE;IAEE,8BAA8B;IAE9B,oCAAmB;IACnB,WAAW,EAAA;EAGb;IAEE,8BAA8B;IAE9B,gBAAgB;IAChB,WAAW,EAAA,EAAA;;AAKf;EAEE,+BAA+B,EAChC;;AAqBD;EACE;IAEE,+BAA+B;IAE/B,qCAAmB;IACnB,WAAW,EAAA;EAGb;IAEE,+BAA+B;IAE/B,gBAAgB;IAChB,WAAW,EAAA,EAAA;;AAKf;EAEE,gCAAgC,EACjC;;AAmBD;EACE;IAEE,yBAAyB;IACzB,WAAW,EAAA;EAGb;IAEE,yBAAyB;IAEzB,qCAAmB;IACnB,WAAW,EAAA,EAAA;;AAKf;EAEE,0BAA0B,EAC3B;;AAmBD;EACE;IAEE,8BAA8B;IAC9B,WAAW,EAAA;EAGb;IAEE,8BAA8B;IAE9B,oCAAmB;IACnB,WAAW,EAAA,EAAA;;AAKf;EAEE,kCAAkC,EACnC;;AAmBD;EACE;IAEE,+BAA+B;IAC/B,WAAW,EAAA;EAGb;IAEE,+BAA+B;IAE/B,qCAAmB;IACnB,WAAW,EAAA,EAAA;;AAKf;EAEE,mCAAmC,EACpC;;AAmBD;EACE;IAEE,8BAA8B;IAC9B,WAAW,EAAA;EAGb;IAEE,8BAA8B;IAE9B,qCAAmB;IACnB,WAAW,EAAA,EAAA;;AAKf;EAEE,gCAAgC,EACjC;;AAmBD;EACE;IAEE,+BAA+B;IAC/B,WAAW,EAAA;EAGb;IAEE,+BAA+B;IAE/B,oCAAmB;IACnB,WAAW,EAAA,EAAA;;AAKf;EAEE,iCAAiC,EAClC;;AAqCD;EACE;IAEE,2BAA2B;IAE3B,uCAAuC,EAAA;EAGzC;IAEE,oCAAmB;IAEnB,2BAA2B;IAE3B,uCAAuC,EAAA;EAGzC;IAEE,oCAAmB;IAEnB,2BAA2B;IAE3B,uCAAuC;IACvC,WAAW,EAAA;EAGb;IAEE,oCAAsB;IACtB,WAAW,EAAA,EAAA;;AAKf;EAEE,sBAAsB,EACvB;;AAED,8EAA8E;;AAiB9E;EACE;IACE,WAAW;IAEX,+DAA4C,EAAA;EAG9C;IACE,WAAW;IAEX,gBAAgB,EAAA,EAAA;;AAKpB;EAEE,uBAAuB,EACxB;;AAED,8EAA8E;;AAe9E;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW;IAEX,6DAA2C,EAAA,EAAA;;AAK/C;EAEE,wBAAwB,EACzB;;AAeD;EACE;IACE,WAAW;IAEX,kCAAkB,EAAA;EAGpB;IACE,WAAW,EAAA,EAAA;;AAKf;EAEE,uBAAuB,EACxB;;AAqBD;EACE;IACE,WAAW;IAEX,6DAA6C;IAE7C,kEAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,gEAAmD;IAEnD,+DAAuC,EAAA,EAAA;;AAK3C;EAEE,2BAA2B,EAC5B;;AAqBD;EACE;IACE,WAAW;IAEX,6DAA6C;IAE7C,kEAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,gEAAmD;IAEnD,+DAAuC,EAAA,EAAA;;AAK3C;EAEE,2BAA2B,EAC5B;;AAqBD;EACE;IACE,WAAW;IAEX,4DAA6C;IAE7C,kEAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,iEAAmD;IAEnD,+DAAuC,EAAA,EAAA;;AAK3C;EAEE,4BAA4B,EAC7B;;AAqBD;EACE;IACE,WAAW;IAEX,4DAA6C;IAE7C,kEAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,iEAAmD;IAEnD,+DAAuC,EAAA,EAAA;;AAK3C;EAEE,yBAAyB,EAC1B;;AAmBD;EACE;IACE,WAAW,EAAA;EAGb;IACE,WAAW;IAEX,kCAAkB,EAAA;EAGpB;IACE,WAAW,EAAA,EAAA;;AAKf;EAEE,wBAAwB,EACzB;;AAuBD;EACE;IACE,WAAW;IAEX,iEAAmD;IAEnD,kEAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,4DAA6C;IAE7C,gCAAgC;IAEhC,+DAAuC,EAAA,EAAA;;AAK3C;EAEE,4BAA4B,EAC7B;;AAmBD;EACE;IACE,WAAW;IAEX,gEAAmD,EAAA;EAGrD;IACE,WAAW;IAEX,iDAAiC;IAEjC,8BAA8B,EAAA,EAAA;;AAKlC;EAEE,4BAA4B,EAC7B;;AAmBD;EACE;IACE,WAAW;IAEX,iEAAmD,EAAA;EAGrD;IACE,WAAW;IAEX,gDAAiC;IAEjC,+BAA+B,EAAA,EAAA;;AAKnC;EAEE,6BAA6B,EAC9B;;AAuBD;EACE;IACE,WAAW;IAEX,gEAAmD;IAEnD,kEAAuC,EAAA;EAGzC;IACE,WAAW;IAEX,6DAA6C;IAE7C,gCAAgC;IAEhC,+DAAuC,EAAA,EAAA;;AAK3C;EAEE,0BAA0B,EAC3B;;AAgBD;EACE;IAEE,oCAAsB;IACtB,oBAAoB,EAAA;EAGtB;IAEE,gCAAsB,EAAA,EAAA;;AAK1B;EAEE,4BAA4B,EAC7B;;AAgBD;EACE;IAEE,oCAAsB;IACtB,oBAAoB,EAAA;EAGtB;IAEE,gCAAsB,EAAA,EAAA;;AAK1B;EAEE,4BAA4B,EAC7B;;AAgBD;EACE;IAEE,mCAAsB;IACtB,oBAAoB,EAAA;EAGtB;IAEE,gCAAsB,EAAA,EAAA;;AAK1B;EAEE,6BAA6B,EAC9B;;AAgBD;EACE;IAEE,mCAAsB;IACtB,oBAAoB,EAAA;EAGtB;IAEE,gCAAsB,EAAA,EAAA;;AAK1B;EAEE,0BAA0B,EAC3B;;AAgBD;EACE;IAEE,gCAAsB,EAAA;EAGxB;IACE,mBAAmB;IAEnB,mCAAsB,EAAA,EAAA;;AAK1B;EAEE,6BAA6B,EAC9B;;AAgBD;EACE;IAEE,gCAAsB,EAAA;EAGxB;IACE,mBAAmB;IAEnB,oCAAsB,EAAA,EAAA;;AAK1B;EAEE,6BAA6B,EAC9B;;AAgBD;EACE;IAEE,gCAAsB,EAAA;EAGxB;IACE,mBAAmB;IAEnB,mCAAsB,EAAA,EAAA;;AAK1B;EAEE,8BAA8B,EAC/B;;AAgBD;EACE;IAEE,gCAAsB,EAAA;EAGxB;IACE,mBAAmB;IAEnB,oCAAsB,EAAA,EAAA;;AAK1B;EAEE,2BAA2B,EAC5B;;AC75GD;;;;;;;;;;;;;;GAcG;AACH;EACE,+BAA+B;EAC/B,+BAA+B;EAC/B,2CAA0C;EAC1C,0BAA0B;EAE1B,uCAAuC,EACxC;;AACD;EACE,aAAa;EACb,mBAAmB,EACpB;;AACD;EAEE,yCAA0B,EAC3B;;AACD;EACE,mBAAmB;EACnB,kBAAkB;EAClB,iCAAiC;EACjC,oBAAoB;EAGpB,2BAA2B,EAC5B;;AACD;EACE,mBAAmB;EACnB,YAAY;EACZ,SAAS;EACT,eAAe;EACf,aAAa;EACb,kBAAkB;EAClB,kBAAkB;EAClB,2BAA2B,EAC5B;;AAC+B;EAC9B,eAAe,EAChB;;AACD;EACE,gCAAgC;EAChC,mBAAmB;EACnB,YAAY;EAGZ,uBAAuB,EACxB;;AACD;EACE,qBAAqB,EACtB;;AACD;EACE,cAAc,EACf;;AACD;EACE,mBAAmB,EACpB;;AACD;EACE,mBAAmB;EACnB,+BAA+B,EAChC;;AACD;EACE,WAAW;EACX,6BAA6B;EAC7B,mBAAmB;EACnB,OAAO;EACP,SAAS;EACT,UAAU;EACV,YAAY;EACZ,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,sBAAsB;EACtB,uBAAuB;EACvB,sBAAsB;EACtB,mBAAmB;EACnB,mCAA2B;EAG3B,2BAA2B;EAG3B,uBAAuB,EACxB;;AACD;EACE,gCAAgB,EACjB;;AACD;EACE,+BAAuB,EACxB;;AACD;EACE,iBAAiB,EAClB;;AAC8D;EAC7D,uCAAuB,EACxB;;AACD;EACE,mBAAmB,EACpB;;AACD;;;EAGE,eAAe;EACf,qBAAqB;EACrB,mBAAmB;EACnB,kBAAkB;EAClB,gCAAgC,EACjC;;AACD;;EAEE,oBAAoB;EACpB,aAAa;EACb,sBAAsB,EACvB;;AACD;EACE,0BAA0B;EAC1B,kBAAkB;EAClB,sBAAsB;EACtB,YAAY;EACZ,iBAAiB;EACjB,mBAAmB;EACnB,WAAW;EAGX,uBAAuB;EAEvB,iBAAiB;EAGjB,mBAAmB,EACpB;;AACD;EACE,sBAAsB,EACvB;;AACe;EACd,0BAA0B,EAC3B;;AACD;;EAEE,2BAA2B,EAC5B;;AACe;EAEd,gDAAgC,EACjC;;AACD;EAGE,2BAA2B,EAC5B;;AACD;EACE,yBAAyB;EACzB,2BAA2B;EAC3B,sBAAsB;EACtB,QAAQ;GACR,gBAAiB,EAClB;;AAC2C;EAC1C,gBAAgB;EAChB,oBAAoB;EACpB,iBAAiB;EACjB,oBAAoB;EACpB,eAAe;EACf,4BAAoB,EACrB;;AACD;EACE,oBAAoB;EACpB,eAAe;EACf,4BAAoB,EACrB;;AACoD;;EAEnD,eAAe;EACf,oBAAoB;EACpB,oCAAoB,EACrB;;AACD;EACE,iCAAiC;EACjC,sBAAsB;EACtB,yBAAyB;EACzB,4BAA4B;EAC5B,2BAA2B;EAC3B,qBAAqB;EACrB,0BAA0B;EAC1B,0BAA0B;EAC1B,4BAA4B;EAC5B,gCAAgC;EAChC,qCAAqC;EAErC,4BAA4B,EAC7B;;AACD;EACE,cAAc,EACf;;AACD;EACE,yBAAyB,EAC1B;;AACD;EACE,aAAa;EACb,eAAe;EACf,YAAY,EACb;;AACD;EACE,aAAa;EACb,eAAe;EACf,mBAAmB;EACnB,oBAAoB;EACpB,YAAY;EACZ,UAAU;EACV,QAAQ;EACR,SAAS,EACV;;AACD;EACE,mBAAmB;EACnB,YAAY;EACZ,0BAA0B;EAC1B,oBAAoB;EACpB,mBAAmB;EACnB,mBAAmB;EAGnB,uBAAuB;EAEvB,yCAA0B;EAG1B,2BAA2B,EAC5B;;AACD;EACE,gBAAgB;EAChB,iBAAiB,EAClB;;AACqC;EACpC,oCAAgB;EAGhB,mBAAmB,EACpB;;AACD;;EAEE,kBAAkB,EACnB;;AACyC;EACxC,mBAAmB,EACpB;;AACD;EACE,eAAe;EACf,oBAAoB;EACpB,gBAAgB,EACjB;;AACmB;EAClB,0BAA0B;EAC1B,eAAe,EAChB;;AACD;EACE,eAAe,EAChB;;AACD;EACE,6BAAW,EACZ;;AACD;EACE,iBAAiB;EACjB,mBAAmB;EACnB,kBAAkB,EACnB;;AACyB;;EAExB,gBAAgB,EACjB;;AACyC;;EAExC,aAAa,EACd;;AACyC;EACxC,aAAa;EACb,eAAe;EACf,mBAAmB;EACnB,SAAS;EACT,YAAY;EACZ,iBAAiB;EACjB,SAAS;EACT,UAAU;EACV,oBAAoB;EACpB,4BAA4B;EAC5B,0DAA0D,EAC3D;;AACD;EACE,iBAAiB;EACjB,4BAA4B;EAC5B,0DAA0D,EAC3D;;AAC6C;EAC5C,WAAW;EACX,YAAY,EACb;;AACyC;EACxC,gCAAgC,EACjC;;AACD;EACE,aAAa;EACb,0BAA0B,EAC3B;;AACD;;EAEE,aAAa;EACb,WAAW;EACX,kBAAkB;EAClB,cAAc;EACd,oBAAoB;EACpB,0BAA0B;EAC1B,sCAAsB;EAGtB,mBAAmB;EAEnB,4CAA2B,EAC5B;;AACD;EACE,gBAAgB;EAChB,wBAAwB,EACzB;;AACD;EACE,cAAc,EACf;;AACD;EACE,aAAa;EACb,eAAe;EACf,YAAY;EACZ,cAAc;EACd,iBAAiB;EACjB,0BAA0B;EAC1B,mBAAmB;EACnB,oBAAoB,EACrB;;AACD;EACE,eAAe,EAChB;;AACD;EACE,kBAAkB,EACnB;;AACD;EACE,iBAAiB,EAClB;;AACD;EAGE,mBAAmB,EACpB;;AACD;EACE,cAAc,EACf;;AACD;EACE,sBAAsB;EACtB,WAAW;EAEX,mFAA0D,EAC3D;;AACD;EACE,sBAAsB;EAEtB,iDAAgC,EACjC;;AACD;EACE,sBAAsB;EAEtB,kEAAiE,EAClE;;AACwC;EACvC,kBAAkB;EAClB,mBAAmB,EACpB;;AACD;EAGE,mBAAmB,EACpB;;AACY;EACX,WAAW;EAEX,aAAa;EACb,iBAAiB;EAEjB,iBAAiB;EAGjB,iBAAiB,EAClB;;AChZD,4EAA4E;AAQ5E;EACE,wBAAwB;EACxB,2BAA2B;EAC3B,+BAA+B,EAChC;;AAMD;EACE,UAAU,EACX;;AAYD;;;;;;;;;;;;;EAaE,eAAe,EAChB;;AAOD;;;;EAIE,sBAAsB;EACtB,yBAAyB,EAC1B;;AAOmB;EAClB,cAAc;EACd,UAAU,EACX;;AHuqFD;;EG9pFE,cAAc,EACf;;AASD;EACE,8BAA8B,EAC/B;;AAOD;;EAEE,WAAW,EACZ;;AASS;EACR,0BAA0B,EAC3B;;AAMD;;EAEE,kBAAkB,EACnB;;AAMD;EACE,mBAAmB,EACpB;;AAOD;EACE,eAAe;EACf,iBAAiB,EAClB;;AAMD;EACE,iBAAiB;EACjB,YAAY,EACb;;AAMD;EACE,eAAe,EAChB;;AAMD;;EAEE,eAAe;EACf,eAAe;EACf,mBAAmB;EACnB,yBAAyB,EAC1B;;AAED;EACE,YAAY,EACb;;AAED;EACE,gBAAgB,EACjB;;AASD;EACE,UAAU,EACX;;AAMD;EACE,iBAAiB,EAClB;;AASD;EACE,iBAAiB,EAClB;;AAMD;EACE,wBAAwB;EACxB,UAAU,EACX;;AAMD;EACE,eAAe,EAChB;;AAMD;;;;EAIE,kCAAkC;EAClC,eAAe,EAChB;;AAiBD;;;;;EAKE,eAAe;EACf,cAAc;EACd,UAAU,EACX;;AAMD;EACE,kBAAkB,EACnB;;AASD;;EAEE,qBAAqB,EACtB;;AAUD;;;;EAIE,2BAA2B;EAC3B,gBAAgB,EACjB;;AAMc;;EAEb,gBAAgB,EACjB;;AAMD;;EAEE,UAAU;EACV,WAAW,EACZ;;AAOD;EACE,oBAAoB,EACrB;;AAUoB;;EAEnB,uBAAuB;EACvB,WAAW,EACZ;;AAQmB;;EAElB,aAAa,EACd;;AAOkB;EACjB,8BAA8B;EAC9B,wBAAwB,EACzB;;AAQmB;;EAElB,yBAAyB,EAC1B;;AAMD;EACE,0BAA0B;EAC1B,cAAc;EACd,+BAA+B,EAChC;;AAOD;EACE,UAAU;EACV,WAAW,EACZ;;AAMD;EACE,eAAe,EAChB;;AAOD;EACE,kBAAkB,EACnB;;AASD;EACE,0BAA0B;EAC1B,kBAAkB,EACnB;;AAED;;EAEE,WAAW,EACZ;;ACvaD,qFAAqF;AAOrF;EACI;;;IAGI,mCAAmC;IACnC,uBAAuB;IACvB,4BAA4B;IAC5B,6BAA6B,EAChC;EAED;;IAEI,2BAA2B,EAC9B;EAED;IACI,6BAA4B,EAC/B;EAEU;IACP,8BAA6B,EAChC;EAID;;IAEI,YAAY,EACf;EAED;;IAEI,uBAAuB;IACvB,yBAAyB,EAC5B;EAED;IACI,4BAA4B,EAC/B;EAED;;IAEI,yBAAyB,EAC5B;EAED;IACI,2BAA2B,EAC9B;EAED;;;IAGI,WAAW;IACX,UAAU,EACb;EAED;;IAEI,wBAAwB,EAC3B;EAKD;IACI,cAAc,EACjB;EAGK;;IACE,kCAAkC,EACrC;EAEL;IACI,uBAAuB,EAC1B;EAED;IACI,qCAAqC,EAMxC;IAPD;;MAKQ,kCAAkC,EACrC;EAEL;;IAGQ,kCAAkC,EACrC,EAAA;;ACtFT;ECkEU,uBDjEsB,EAC/B;;AACD;;EC+DU,uBD7DsB,EAC/B;;AAKD;EACE,gBAAgB;EAChB,yCAAiC,EAClC;;AAED;EACE,kCErB2C;EFsB3C,gBGuB4B;EHtB5B,yBGkCmC;EHjCnC,eGlB8B;EHmB9B,uBGF0B,EHG3B;;AAGD;;;;EAIE,qBAAqB;EACrB,mBAAmB;EACnB,qBAAqB,EACtB;;AAKD;EACE,eEhD4B;EFiD5B,sBAAsB,EAWvB;EAbD;IAMI,eGjB0B;IHkB1B,2BGhB6B,EHiB9B;EARH;II3CE,qBAAqB;IAErB,2CAA2C;IAC3C,qBAAqB,EJoDpB;;AASH;EACE,UAAU,EACX;;AAKD;EACE,uBAAuB,EACxB;;AAGD;EKvEE,eADmC;EAEnC,gBAAgB;EAChB,aAAa,ELuEd;;AAGD;EACE,mBGwB6B,EHvB9B;;AAKD;EACE,aGgpB+B;EH/oB/B,yBG/BmC;EHgCnC,uBGlE0B;EHmE1B,uBGipBgC;EHhpBhC,mBGY6B;EF8ErB,iCDzF+B;EKzFvC,sBL4FoC;EK3FpC,gBAAgB;EAChB,aAAa,EL2Fd;;AAGD;EACE,mBAAmB,EACpB;;AAKD;EACE,iBGhD6B;EHiD7B,oBGjD6B;EHkD7B,UAAU;EACV,8BGrG8B,EHsG/B;;AAOD;EACE,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,aAAa;EACb,WAAW;EACX,iBAAiB;EACjB,uBAAU;EACV,UAAU,EACX;;AAMD;EAGI,iBAAiB;EACjB,YAAY;EACZ,aAAa;EACb,UAAU;EACV,kBAAkB;EAClB,WAAW,EACZ;;AL43FH;EKj3FE,gBAAgB,EACjB;;AMxJD;;EAEE,qBH0D+B;EGzD/B,iBH0D2B;EGzD3B,iBH0D2B;EGzD3B,eH0D+B,EGlDhC;EAbD;;;;;;;;;;;;;;IASI,oBAAoB;IACpB,eAAe;IACf,eHL4B,EGM7B;;AAGH;;;EAGE,iBHuC6B;EGtC7B,oBAAqC,EAMtC;EAVD;;;;;;;;;IAQI,eAAe,EAChB;;AAEH;;;EAGE,iBAAkC;EAClC,oBAAqC,EAMtC;EAJC;;;;;;;;;IAEE,eAAe,EAChB;;AAGH;EAAU,gBHSqB,EGTO;;AACtC;EAAU,gBHSqB,EGTO;;AACtC;EAAU,gBHSoB,EGTQ;;AACtC;EAAU,gBHSoB,EGTQ;;AACtC;EAAU,gBHCoB,EGDQ;;AACtC;EAAU,gBHSoB,EGTQ;;AAMtC;EACE,iBAAkC,EACnC;;AAED;EACE,oBHG6B;EGF7B,gBAAgB;EAChB,iBAAiB;EACjB,iBAAiB,EAKlB;EAHC;IANF;MAOI,gBAA2B,EAE9B,EAAA;;AAOD;;EAEE,eAAgB,EACjB;;AAED;;EAEE,0BH4asC;EG3atC,cAAc,EACf;;AAGD;EAAuB,iBAAiB,EAAI;;AAC5C;EAAuB,kBAAkB,EAAI;;AAC7C;EAAuB,mBAAmB,EAAI;;AAC9C;EAAuB,oBAAoB,EAAI;;AAC/C;EAAuB,oBAAoB,EAAI;;AAG/C;EAAuB,0BAA0B,EAAI;;AACrD;EAAuB,0BAA0B,EAAI;;AACrD;EAAuB,2BAA2B,EAAI;;AAGtD;EACE,eHxF8B,EGyF/B;;ACnGC;EACE,eLL0B,EKM3B;;AACa;;EACZ,eAAa,EACd;;AALD;EACE,eJkfoC,EIjfrC;;AACD;;EACE,eAAa,EACd;;AALD;EACE,eJsfoC,EIrfrC;;AACD;;EACE,eAAa,EACd;;AALD;EACE,eJ0foC,EIzfrC;;AACa;;EACZ,eAAa,EACd;;AALD;EACE,eJ8foC,EI7frC;;AACY;;EACX,eAAa,EACd;;AD6GH;EAGE,YAAY,EACb;;AEtHC;EACE,0BNL0B,EMM3B;;AACW;;EACV,0BAAwB,EACzB;;AALD;EACE,0BLmfoC,EKlfrC;;AACD;;EACE,0BAAwB,EACzB;;AALD;EACE,0BLufoC,EKtfrC;;AACD;;EACE,0BAAwB,EACzB;;AALD;EACE,0BL2foC,EK1frC;;AACD;;EACE,0BAAwB,EACzB;;AALD;EACE,0BL+foC,EK9frC;;AACD;;EACE,0BAAwB,EACzB;;AFgIH;EACE,oBAAuC;EACvC,oBH1E6B;EG2E7B,iCH7H8B,EG8H/B;;AAOD;;EAEE,cAAc;EACd,oBAAqC,EAKtC;EARD;;;;IAMI,iBAAiB,EAClB;;AAWH;EAJE,gBAAgB;EAChB,iBAAiB,EAKlB;;AAID;EAVE,gBAAgB;EAChB,iBAAiB;EAWjB,kBAAkB,EAOnB;EALG;IACA,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB,EACpB;;AAIH;EACE,cAAc;EACd,oBHzH6B,EG0H9B;;AACD;;EAEE,yBH/HmC,EGgIpC;;AACD;EACE,kBAAkB,EACnB;;AACD;EACE,eAAe,EAChB;;AAOD;EG7LI,aAAa;EACb,eAAe,EAChB;;AH2LH;EGzLI,YAAY,EACb;;AH6LD;EACE;IACE,YAAY;IACZ,aAA6B;IAC7B,YAAY;IACZ,kBAAkB;IIlNtB,iBAAiB;IACjB,wBAAwB;IACxB,oBAAoB,EJkNjB;EAZL;IAcM,mBH2nB6B,EG1nB9B,EAAA;;AASL;;EAGE,aAAa;EACb,kCH1N8B,EG2N/B;;AACD;EACE,eAAe,EAEhB;;AAGD;EACE,mBHhL6B;EGiL7B,iBHjL6B;EGkL7B,kBH4mB4C;EG3mB5C,+BHrO8B,EG6P/B;EA5BD;;;IAUM,iBAAiB,EAClB;EAKH;;;IAGE,eAAe;IACf,eAAe;IACf,yBHtMiC;IGuMjC,eHxP4B,EG6P7B;IA3BH;;;MAyBM,uBAAuB,EACxB;;AAOL;;;EAEE,oBAAoB;EACpB,gBAAgB;EAChB,gCHtQ8B;EGuQ9B,eAAe;EACf,kBAAkB,EAWnB;EARC;;;;;;IAGa,YAAY,EAAI;EAH7B;;;;;;IAKI,uBAAuB,EACxB;;AAKL;EACE,oBHrO6B;EGsO7B,mBAAmB;EACnB,yBHzOmC,EG0OpC;;AKnSD;;;;EAIE,+DRsCyE,EQrC1E;;AAGD;EACE,iBAAiB;EACjB,eAAe;EACf,eRmzBmC;EQlzBnC,0BRmzBmC;EQlzBnC,mBR0F6B,EQzF9B;;AAGD;EACE,iBAAiB;EACjB,eAAe;EACf,YR6yBgC;EQ5yBhC,uBR6yBgC;EQ5yBhC,mBRmF6B;EQlF7B,+CAA+B,EAQhC;EANC;IACE,WAAW;IACX,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB,EAClB;;AAIH;EACE,eAAe;EACf,eAAgC;EAChC,iBAAkC;EAClC,gBAA2B;EAC3B,yBRkBmC;EQjBnC,sBAAsB;EACtB,sBAAsB;EACtB,eRpC8B;EQqC9B,0BRyxBmC;EQxxBnC,uBR0xBgC;EQzxBhC,mBR0D6B,EQ/C9B;EARC;IACE,WAAW;IACX,mBAAmB;IACnB,eAAe;IACf,sBAAsB;IACtB,8BAA8B;IAC9B,iBAAiB,EAClB;;AAIH;EACE,kBR2wBiC;EQ1wBjC,mBAAmB,EACpB;;AC3DD;ECHE,mBAAmB;EACnB,kBAAkB;EAClB,mBAAoB;EACpB,oBAAmB,EDYpB;EAZD;IHMI,aAAa;IACb,eAAe,EAChB;EGRH;IHUI,YAAY,EACb;EGRD;IAHF;MAII,aT2UiC,ESnUpC,EAAA;EANC;IANF;MAOI,aT6UiC,ESxUpC,EAAA;EAHC;IATF;MAUI,cT+UkC,ES7UrC,EAAA;;AAQD;ECvBE,mBAAmB;EACnB,kBAAkB;EAClB,mBAAoB;EACpB,oBAAmB,EDsBpB;EAFD;IHdI,aAAa;IACb,eAAe,EAChB;EGYH;IHVI,YAAY,EACb;;AGkBH;ECvBE,mBAAkB;EAClB,oBAAmB,EDwBpB;EAFD;IHvBI,aAAa;IACb,eAAe,EAChB;EGqBH;IHnBI,YAAY,EACb;;AKVD;EACE,mBAAmB;EAEnB,gBAAgB;EAEhB,mBAAmB;EACnB,oBAAoB,EACrB;;AASD;EACE,YAAY,EACb;;AAMC;EACE,qBAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,WAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,WAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,WAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,YAAiB,EAClB;;AAkBD;EACE,YAAY,EACb;;AAPD;EACE,qBAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,WAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,WAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,WAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,sBAAiB,EAClB;;AAFD;EACE,YAAiB,EAClB;;AAPD;EACE,WAAW,EACZ;;AAPD;EACE,oBAAgB,EACjB;;AAFD;EACE,qBAAgB,EACjB;;AAFD;EACE,UAAgB,EACjB;;AAFD;EACE,qBAAgB,EACjB;;AAFD;EACE,qBAAgB,EACjB;;AAFD;EACE,UAAgB,EACjB;;AAFD;EACE,qBAAgB,EACjB;;AAFD;EACE,qBAAgB,EACjB;;AAFD;EACE,UAAgB,EACjB;;AAFD;EACE,qBAAgB,EACjB;;AAFD;EACE,qBAAgB,EACjB;;AAFD;EACE,WAAgB,EACjB;;AAkBD;EACE,gBAAuB,EACxB;;AAFD;EACE,2BAAuB,EACxB;;AAFD;EACE,4BAAuB,EACxB;;AAFD;EACE,iBAAuB,EACxB;;AAFD;EACE,4BAAuB,EACxB;;AAFD;EACE,4BAAuB,EACxB;;AAFD;EACE,iBAAuB,EACxB;;AAFD;EACE,4BAAuB,EACxB;;AAFD;EACE,4BAAuB,EACxB;;AAFD;EACE,iBAAuB,EACxB;;AAFD;EACE,4BAAuB,EACxB;;AAFD;EACE,4BAAuB,EACxB;;AAFD;EACE,kBAAuB,EACxB;;AFEL;EErCE;IACE,YAAY,EACb;EAMC;IACE,qBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,YAAiB,EAClB;EAkBD;IACE,YAAY,EACb;EAPD;IACE,qBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,YAAiB,EAClB;EAPD;IACE,WAAW,EACZ;EAPD;IACE,oBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,UAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,UAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,UAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,WAAgB,EACjB;EAkBD;IACE,gBAAuB,EACxB;EAFD;IACE,2BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,iBAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,iBAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,iBAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,kBAAuB,EACxB,EAAA;;AFWL;EE9CE;IACE,YAAY,EACb;EAMC;IACE,qBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,YAAiB,EAClB;EAkBD;IACE,YAAY,EACb;EAPD;IACE,qBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,YAAiB,EAClB;EAPD;IACE,WAAW,EACZ;EAPD;IACE,oBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,UAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,UAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,UAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,WAAgB,EACjB;EAkBD;IACE,gBAAuB,EACxB;EAFD;IACE,2BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,iBAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,iBAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,iBAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,kBAAuB,EACxB,EAAA;;AFoBL;EEvDE;IACE,YAAY,EACb;EAMC;IACE,qBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,YAAiB,EAClB;EAkBD;IACE,YAAY,EACb;EAPD;IACE,qBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,WAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,sBAAiB,EAClB;EAFD;IACE,YAAiB,EAClB;EAPD;IACE,WAAW,EACZ;EAPD;IACE,oBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,UAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,UAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,UAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,qBAAgB,EACjB;EAFD;IACE,WAAgB,EACjB;EAkBD;IACE,gBAAuB,EACxB;EAFD;IACE,2BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,iBAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,iBAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,iBAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,4BAAuB,EACxB;EAFD;IACE,kBAAuB,EACxB,EAAA;;ACxDL;EACE,8BZgIyC,EY/H1C;;AACD;EACE,iBZwHiC;EYvHjC,oBZuHiC;EYtHjC,eZG8B;EYF9B,iBAAiB,EAClB;;AACD;EACE,iBAAiB,EAClB;;AAKD;EACE,YAAY;EACZ,gBAAgB;EAChB,oBZyC6B,EYD9B;EA3CD;;;;;;IAWQ,aZiG2B;IYhG3B,yBZ8B6B;IY7B7B,oBAAoB;IACpB,2BZ2G4B,EY1G7B;EAfP;IAoBI,uBAAuB;IACvB,8BZoGgC,EYnGjC;EAtBH;;;;;;IA8BQ,cAAc,EACf;EA/BP;IAoCI,2BZqFgC,EYpFjC;EAGD;IACE,uBZjCwB,EYkCzB;;AAWK;;;;;;EAEA,aZuD2B,EYtD5B;;AAUP;EACE,uBZsDkC,EYrCnC;EAZO;;;;;;IAEA,uBZ+C4B,EY9C7B;EAID;;IAEA,yBAAyB,EAC1B;;AASL;EAEI,0BZsBmC,EYrBpC;;AASW;EACV,0BZamC,EYZpC;;AAQoB;EACrB,iBAAiB;EACjB,YAAY;EACZ,sBAAsB,EACvB;;AACD;;EAIM,iBAAiB;EACjB,YAAY;EACZ,oBAAoB,EACrB;;AC7IH;;;;;;;;;;;;EAII,0BbiIiC,EahIlC;;AAKH;;;;;EAEI,0BAAwB,EACzB;;AAbH;;;;;;;;;;;;EAII,0Bb+ekC,Ea9enC;;AAKH;;;;;EAEI,0BAAwB,EACzB;;AAbH;;;;;;;;;;;;EAII,0BbmfkC,EalfnC;;AAKH;;;;;EAEI,0BAAwB,EACzB;;AAbH;;;;;;;;;;;;EAII,0BbufkC,EatfnC;;AAKH;;;;;EAEI,0BAAwB,EACzB;;AAbH;;;;;;;;;;;;EAII,0Bb2fkC,Ea1fnC;;AAKH;;;;;EAEI,0BAAwB,EACzB;;ADwJL;EACE,iBAAiB;EACjB,kBAAkB,EA6DnB;EA3DC;IAJF;MAKI,YAAY;MACZ,oBAAqC;MACrC,mBAAmB;MACnB,6CAA6C;MAC7C,uBZrCgC,EY2FnC;MA/DD;QAaM,iBAAiB,EAalB;QA1BL;;;;;;UAsBY,oBAAoB,EACrB;MAML;QACA,UAAU,EA+BX;QAxBS;;;;;;UAEF,eAAe,EAChB;QAxCX;;;;;;UA2CY,gBAAgB,EACjB;QA5CX;;;;UAwDY,iBAAiB,EAClB,EAAA;;AE1NX;EACE,WAAW;EACX,UAAU;EACV,UAAU;EAIV,aAAa,EACd;;AAED;EACE,eAAe;EACf,YAAY;EACZ,WAAW;EACX,oBd0C6B;EczC7B,gBAA2B;EAC3B,qBAAqB;EACrB,edd8B;Ece9B,UAAU;EACV,iCdmMsC,EclMvC;;AAED;EACE,sBAAsB;EACtB,gBAAgB;EAChB,mBAAmB;EACnB,kBAAkB,EACnB;;AAUkB;EhB8BT,uBgB7BsB,EAC/B;;AAGD;;EAEE,gBAAgB;EAChB,mBAAmB;EACnB,oBAAoB,EACrB;;AAED;EACE,eAAe,EAChB;;AAGiB;EAChB,eAAe;EACf,YAAY,EACb;;AAGD;;EAEE,aAAa,EACd;;AAGiB;;;EbvEhB,qBAAqB;EAErB,2CAA2C;EAC3C,qBAAqB,EawEtB;;AAGD;EACE,eAAe;EACf,iBAAoC;EACpC,gBdlC4B;EcmC5B,yBdvBmC;EcwBnC,ed1E8B,Ec2E/B;;AAyBD;EACE,eAAe;EACf,YAAY;EACZ,adiGqD;EchGrD,kBdtB8B;EcuB9B,gBdnE4B;EcoE5B,yBdxDmC;EcyDnC,ed3G8B;Ec4G9B,uBdmEmC;EclEnC,uBAAuB;EACvB,uBdwEmC;EcvEnC,mBdf6B;EFxCrB,iDgBwDgC;EhB8DhC,yEgB7DsE,EAgC/E;EA7CD;ICxDI,sBfsJoC;IerJpC,WAAW;IjBWL,mFiBdS,EAKhB;EDqDH;IhBVI,YE2GiC;IF1GjC,WAAW,EACZ;EgBQH;IhBP4B,YEwGS,EFxGQ;EgBO7C;IhBNkC,YEuGG,EFvGc;EgBMnD;IAuBI,UAAU;IACV,8BAA8B,EAC/B;EAzBH;;IAmCI,0BdrI4B;IcsI5B,WAAW,EACZ;EArCH;;IAyCI,oBd6EwC,Ec5EzC;;AAMK;EACN,aAAa,EACd;;AAUD;EACE,yBAAyB,EAC1B;;AAYD;EACE;;;;IAKI,kBdoBiD,EcnBlD;EANc;;;;;;;;;;;;;;;;;;;;;;IAUb,kBdmBiC,EclBlC;EAXH;;;;;;;;;;;;;;;;;;;;;;IAeI,kBdYgC,EcXjC,EAAA;;AAUL;EACE,oBdKmC,EcJpC;;AAOD;;EAEE,mBAAmB;EACnB,eAAe;EACf,iBAAiB;EACjB,oBAAoB,EASrB;EAPC;;IACE,iBdtK2B;IcuK3B,mBAAmB;IACnB,iBAAiB;IACjB,oBAAoB;IACpB,gBAAgB,EACjB;;AAEH;;;;EAIE,mBAAmB;EACnB,mBAAmB;EACnB,mBAAmB,EACpB;;AAED;;EAEE,iBAAiB,EAClB;;AAGD;;EAEE,mBAAmB;EACnB,sBAAsB;EACtB,mBAAmB;EACnB,iBAAiB;EACjB,uBAAuB;EACvB,oBAAoB;EACpB,gBAAgB,EACjB;;AACe;;EAEd,cAAc;EACd,kBAAkB,EACnB;;AAMD;;;;;;EAKI,oBd/CwC,EcgDzC;;AAGH;;;;;EAII,oBdvDwC,EcwDzC;;AAOC;;;;;EACE,oBdhEsC,EciEvC;;AAUL;EAEE,iBAAoC;EACpC,oBAAuC;EAEvC,iBAAiB;EACjB,iBAAkC,EAOnC;EAbD;;;;;IAUI,gBAAgB;IAChB,iBAAiB,EAClB;;ACxPD;;;EACE,afkJmC;EejJnC,kBf6B4B;Ee5B5B,gBfpB0B;EeqB1B,iBfiC2B;EehC3B,mBfoC2B,EenC5B;;AAED;;;EACE,af0ImC;EezInC,kBfyImC,EexIpC;;AAEO;;;;;;;EACN,aAAa,EACd;;ADsPH;EAEI,adpHmC;EcqHnC,kBdzO4B;Ec0O5B,gBd1R0B;Ec2R1B,iBdrO2B;EcsO3B,mBdlO2B,EcmO5B;;AAPH;EASI,ad3HmC;Ec4HnC,kBd5HmC,Ec6HpC;;AAXH;;EAcI,aAAa,EACd;;AAfH;EAiBI,adnImC;EcoInC,iBAAkC;EAClC,kBdzP4B;Ec0P5B,gBd1S0B;Ec2S1B,iBdrP2B,EcsP5B;;AC3RD;;;EACE,afgJkC;Ee/IlC,mBf0B4B;EezB5B,gBfrB0B;EesB1B,uBfgCiC;Ee/BjC,mBfmC2B,EelC5B;;AAED;;;EACE,afwIkC;EevIlC,kBfuIkC,EetInC;;AAEO;;;;;;;EACN,aAAa,EACd;;ADgRH;EAEI,adhJkC;EciJlC,mBdtQ4B;EcuQ5B,gBdrT0B;EcsT1B,uBdhQiC;EciQjC,mBd7P2B,Ec8P5B;;AAPH;EASI,advJkC;EcwJlC,kBdxJkC,EcyJnC;;AAXH;;EAcI,aAAa,EACd;;AACD;EACE,ad/JkC;EcgKlC,iBAAkC;EAClC,mBdtR4B;EcuR5B,gBdrU0B;EcsU1B,uBdhRiC,EciRlC;;AAQH;EAEE,mBAAmB,EAMpB;EAHC;IACE,sBAAkC,EACnC;;AAGH;EACE,mBAAmB;EACnB,OAAO;EACP,SAAS;EACT,WAAW;EACX,eAAe;EACf,Yd9LqD;Ec+LrD,ad/LqD;EcgMrD,kBdhMqD;EciMrD,mBAAmB;EACnB,qBAAqB,EACtB;;AACD;;;;;EAGE,YdrMoC;EcsMpC,adtMoC;EcuMpC,kBdvMoC,EcwMrC;;AACD;;;;;EAGE,Yd1MqC;Ec2MrC,ad3MqC;Ec4MrC,kBd5MqC,Ec6MtC;;AAGD;;;;;;;;;;ECxZI,efseoC,EererC;;ADuZH;ECpZI,sBfkeoC;EFlb9B,iDiB/CkC,EAMzC;ED6YH;ICjZM,sBAAoB;IjB6ChB,kEiB5CsD,EAE3D;;AAGH;EACE,efwdoC;EevdpC,sBfudoC;EetdpC,0BfudoC,EetdrC;;AAED;EACE,efkdoC,EejdrC;;ADsYH;;;;;;;;;;EC3ZI,ef8eoC,Ee7erC;;AD0ZH;ECvZI,sBf0eoC;EF1b9B,iDiB/CkC,EAMzC;EARD;IAII,sBAAoB;IjB6ChB,kEiB5CsD,EAE3D;;ADiZL;EC7YI,efgeoC;Ee/dpC,sBf+doC;Ee9dpC,0Bf+doC,Ee9drC;;AD0YH;ECvYI,ef0doC,EezdrC;;AA/BD;;;;;;;;;;EAUE,efkfoC,EejfrC;;AD6ZH;EC1ZI,sBf8eoC;EF9b9B,iDiB/CkC,EAMzC;EARD;IAII,sBAAoB;IjB6ChB,kEiB5CsD,EAE3D;;ADoZL;EChZI,efoeoC;EenepC,sBfmeoC;EelepC,0BfmeoC,EelerC;;AD6YH;EC1YI,ef8doC,Ee7drC;;ADgZG;EACF,UAA2B,EAC5B;;AACW;EACV,OAAO,EACR;;AASH;EACE,eAAe;EACf,gBAAgB;EAChB,oBAAoB;EACpB,eAAc,EACf;;AAkBC;EAEE;IACE,sBAAsB;IACtB,iBAAiB;IACjB,uBAAuB,EACxB;EAGD;IACE,sBAAsB;IACtB,YAAY;IACZ,uBAAuB,EACxB;EAGD;IACE,sBAAsB,EACvB;EAED;IACE,sBAAsB;IACtB,uBAAuB,EAOxB;IALC;;;MAGE,YAAY,EACb;EAuCP;IAlCM,YAAY,EACb;EAiCL;IA9BM,iBAAiB;IACjB,uBAAuB,EACxB;EAID;;IAEE,sBAAsB;IACtB,cAAc;IACd,iBAAiB;IACjB,uBAAuB,EAKxB;IAHC;;MACE,gBAAgB,EACjB;EAEsB;;IAEvB,mBAAmB;IACnB,eAAe,EAChB;EAGa;IACZ,OAAO,EACR,EAAA;;AAeL;;;;EASI,cAAc;EACd,iBAAiB;EACjB,iBAAoC,EACrC;;AAZH;;EAiBI,iBAAkC,EACnC;;AAlBH;EJ1hBE,mBAAkB;EAClB,oBAAmB,EIgjBlB;EAvBH;IR1hBI,aAAa;IACb,eAAe,EAChB;EQwhBH;IRthBI,YAAY,EACb;;AQgjBD;EA3BF;IA6BM,kBAAkB;IAClB,iBAAiB;IACjB,iBAAoC,EACrC,EAAA;;AAhCL;EAwCI,YAAY,EACb;;AAOC;EACE;IACE,kBAAqC;IACrC,gBdxiBsB,EcyiBvB,EAAA;;AAIH;EAxDJ;IA0DQ,iBAAqC;IACrC,gBd/iBsB,EcgjBvB,EAAA;;AE7lBP;EACE,sBAAsB;EACtB,iBAAiB;EACjB,oBhB0IqC;EgBzIrC,mBAAmB;EACnB,uBAAuB;EACvB,+BAA2B;EAA3B,2BAA2B;EAC3B,gBAAgB;EAChB,uBAAuB;EACvB,8BAA8B;EAC9B,oBAAoB;EC0CpB,kBjBmC8B;EiBlC9B,gBjBV4B;EiBW5B,yBjBCmC;EiBAnC,mBjB8C6B;EF4G7B,0BkBrMyB;ElBsMtB,uBkBtMsB;ElBuMrB,sBkBvMqB;ElBwMjB,kBkBxMiB,EAkC1B;EA9CD;IfJE,qBAAqB;IAErB,2CAA2C;IAC3C,qBAAqB,EeqBlB;EApBL;IA0BI,YhBqHiC;IgBpHjC,sBAAsB,EACvB;EA5BH;IAgCI,WAAW;IACX,uBAAuB;IlB4BjB,iDkB3BkC,EACzC;EAnCH;;IAwCI,oBhBuLwC;IkBpO1C,cF8CsB;IE3CtB,0BAAa;IpB+DL,iBkBnBkB,EACzB;;AAKH;;EAGI,qBAAqB,EACtB;;AAOH;EC7DE,YjBiJmC;EiBhJnC,uBjBiJmC;EiBhJnC,mBjBiJmC,EgBpFpC;EAFD;ICvDI,YjB2IiC;IiB1IjC,0BAAwB;IACpB,sBAAoB,EACzB;EDoDH;IClDI,YjBsIiC;IiBrIjC,0BAAwB;IACpB,sBAAoB,EACzB;ED+CH;;IC3CI,YjB+HiC;IiB9HjC,0BAAwB;IACpB,sBAAoB,EASzB;IDgCH;;;;MCpCM,YjBwH+B;MiBvH/B,0BAAwB;MACpB,sBAAoB,EACzB;EDiCL;;IC5BI,uBAAuB,EACxB;ED2BH;;;;ICpBM,uBjByG+B;IiBxG3B,mBjByG2B,EiBxGhC;EDkBL;ICdI,YjBmGiC;IiBlGjC,uBjBiGiC,EiBhGlC;;ADeH;EChEE,YjBqJmC;EiBpJnC,0BlBP4B;EkBQ5B,sBjBqJqC,EgBrFtC;EAFD;IC1DI,YjB+IiC;IiB9IjC,0BAAwB;IACpB,sBAAoB,EACzB;EDuDH;ICrDI,YjB0IiC;IiBzIjC,0BAAwB;IACpB,sBAAoB,EACzB;EDkDH;;IC9CI,YjBmIiC;IiBlIjC,0BAAwB;IACpB,sBAAoB,EASzB;IDmCH;;;;MCvCM,YjB4H+B;MiB3H/B,0BAAwB;MACpB,sBAAoB,EACzB;EDoCL;;IC/BI,uBAAuB,EACxB;ED8BH;;;;ICvBM,0BlB/CwB;IkBgDpB,sBjB6G6B,EiB5GlC;EDqBL;ICjBI,elBrD0B;IkBsD1B,uBjBqGiC,EiBpGlC;;ADmBH;ECpEE,YjByJmC;EiBxJnC,0BlBN6B;EkBO7B,sBjByJqC,EgBrFtC;EAFD;IC9DI,YjBmJiC;IiBlJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED2DH;ICzDI,YjB8IiC;IiB7IjC,0BAAwB;IACpB,sBAAoB,EACzB;EDsDH;;IClDI,YjBuIiC;IiBtIjC,0BAAwB;IACpB,sBAAoB,EASzB;IDuCH;;;;MC3CM,YjBgI+B;MiB/H/B,0BAAwB;MACpB,sBAAoB,EACzB;EDwCL;;ICnCI,uBAAuB,EACxB;EDkCH;;;;IC3BM,0BlB9CyB;IkB+CrB,sBjBiH6B,EiBhHlC;EDyBL;ICrBI,elBpD2B;IkBqD3B,uBjByGiC,EiBxGlC;;ADuBH;ECxEE,YjB6JmC;EiB5JnC,0BlBL6B;EkBM7B,sBjB6JqC,EgBrFtC;EAFD;IClEI,YjBuJiC;IiBtJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED+DH;IC7DI,YjBkJiC;IiBjJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED0DH;;ICtDI,YjB2IiC;IiB1IjC,0BAAwB;IACpB,sBAAoB,EASzB;ID2CH;;;;MC/CM,YjBoI+B;MiBnI/B,0BAAwB;MACpB,sBAAoB,EACzB;ED4CL;;ICvCI,uBAAuB,EACxB;EDsCH;;;;IC/BM,0BlB7CyB;IkB8CrB,sBjBqH6B,EiBpHlC;ED6BL;ICzBI,elBnD2B;IkBoD3B,uBjB6GiC,EiB5GlC;;AD2BH;EC5EE,YjBiKmC;EiBhKnC,0BlBJ6B;EkBK7B,sBjBiKqC,EgBrFtC;EAFD;ICtEI,YjB2JiC;IiB1JjC,0BAAwB;IACpB,sBAAoB,EACzB;EDmEH;ICjEI,YjBsJiC;IiBrJjC,0BAAwB;IACpB,sBAAoB,EACzB;ED8DH;;IC1DI,YjB+IiC;IiB9IjC,0BAAwB;IACpB,sBAAoB,EASzB;ID+CH;;;;MCnDM,YjBwI+B;MiBvI/B,0BAAwB;MACpB,sBAAoB,EACzB;EDgDL;;IC3CI,uBAAuB,EACxB;ED0CH;;;;ICnCM,0BlB5CyB;IkB6CrB,sBjByH6B,EiBxHlC;EAGH;IACE,elBlD2B;IkBmD3B,uBjBiHiC,EiBhHlC;;AD+BH;EChFE,YjBqKmC;EiBpKnC,0BlBH6B;EkBI7B,sBjBqKqC,EgBrFtC;EAFD;IC1EI,YjB+JiC;IiB9JjC,0BAAwB;IACpB,sBAAoB,EACzB;EDuEH;ICrEI,YjB0JiC;IiBzJjC,0BAAwB;IACpB,sBAAoB,EACzB;EDkEH;;IC9DI,YjBmJiC;IiBlJjC,0BAAwB;IACpB,sBAAoB,EASzB;IDmDH;;;;MCvDM,YjB4I+B;MiB3I/B,0BAAwB;MACpB,sBAAoB,EACzB;EDoDL;;IC/CI,uBAAuB,EACxB;ED8CH;;;;ICvCM,0BlB3CyB;IkB4CrB,sBjB6H6B,EiB5HlC;EDqCL;ICjCI,elBjD2B;IkBkD3B,uBjBqHiC,EiBpHlC;;ADwCH;EACE,ejBhG4B;EiBiG5B,oBAAoB;EACpB,iBAAiB,EA8BlB;EAjCD;;IAUI,8BAA8B;IlBpCxB,iBkBqCkB,EACzB;EAZH;IAiBI,0BAA0B,EAC3B;EAlBH;IAqBI,ehBhF0B;IgBiF1B,2BhB/E6B;IgBgF7B,8BAA8B,EAC/B;EAxBH;;;IA6BM,ehB9G0B;IgB+G1B,sBAAsB,EACvB;;AAQL;EC1EE,mBjBsC8B;EiBrC9B,gBjBT4B;EiBU5B,uBjB4CmC;EiB3CnC,mBjB+C6B,EgB2B9B;;AACD;EC9EE,kBjByC8B;EiBxC9B,gBjBR4B;EiBS5B,iBjB6C6B;EiB5C7B,mBjBgD6B,EgB8B9B;;AACD;EClFE,iBjB4C6B;EiB3C7B,gBjBR4B;EiBS5B,iBjB6C6B;EiB5C7B,mBjBgD6B,EgBiC9B;;AAMD;EACE,eAAe;EACf,YAAY,EACb;;AAGD;EACE,gBAAgB,EACjB;;AAGD;;;EAII,YAAY,EACb;;AG7JH;EACE,WAAW;ErBiLH,iCqBhL+B,EAIxC;EAND;IAII,WAAW,EACZ;;AAGH;EACE,cAAc,EAKf;EAND;IAGc,eAAe,EAAI;;AAKjC;EAAoB,mBAAmB,EAAI;;AAE3C;EAAoB,yBAAyB,EAAI;;AAEjD;EACE,mBAAmB;EACnB,UAAU;EACV,iBAAiB;ErB+JT,wCqB9JuC;ErBsKvC,2BqBrKyB;ErByKzB,iCqBxKgC,EACzC;;AC9BD;EACE,sBAAsB;EACtB,SAAS;EACT,UAAU;EACV,iBAAiB;EACjB,uBAAuB;EACvB,uBAAsC;EACtC,yBAAwC;EACxC,oCAAiD;EACjD,mCAAiD,EAClD;;AAGD;;EAEE,mBAAmB,EACpB;;AAGe;EACd,WAAW,EACZ;;AAGD;EACE,mBAAmB;EACnB,UAAU;EACV,QAAQ;EACR,cpBmP6B;EoBlP7B,cAAc;EACd,YAAY;EACZ,iBAAiB;EACjB,eAAe;EACf,gBAAgB;EAChB,iBAAiB;EACjB,gBpBU4B;EoBT5B,iBAAiB;EACjB,uBpBoMmC;EoBnMnC,uBpBuMmC;EoBtMnC,sCpBoMmC;EoBnMnC,mBpB+D6B;EFxCrB,4CsBtB2B;EACnC,6BAA6B,EAyB9B;EA3CD;IAwBI,SAAS;IACT,WAAW,EACZ;EAGD;ICtDA,YAAY;IACZ,cAA2C;IAC3C,iBAAiB;IACjB,0BrB6OsC,EoBxLrC;EAGM;IACL,eAAe;IACf,kBAAkB;IAClB,YAAY;IACZ,oBAAoB;IACpB,yBpBNiC;IoBOjC,epB1D4B;IoB2D5B,oBAAoB,EACrB;;AAIH;EAGI,sBAAsB;EACtB,epB0KmC;EoBzKnC,0BpB2KoC,EoB1KrC;;AAIH;EAII,YpBwB4B;EoBvB5B,sBAAsB;EACtB,WAAW;EACX,0BrB7F0B,EqB8F3B;;AAOH;EAII,epB3F4B,EoB4F7B;;AAL0B;EAUzB,sBAAsB;EACtB,8BAA8B;EAC9B,uBAAuB;EE3GzB,oEAAmE;EF6GjE,oBpBoHwC,EoBnHzC;;AAIH;EAGI,eAAe,EAChB;;AAGC;EACA,WAAW,EACZ;;AAOH;EACE,WAAW;EACX,SAAS,EACV;;AAOD;EACE,QAAQ;EACR,YAAY,EACb;;AAGD;EACE,eAAe;EACf,kBAAkB;EAClB,gBpBtG4B;EoBuG5B,yBpB7FmC;EoB8FnC,epB/I8B;EoBgJ9B,oBAAoB,EACrB;;AAGD;EACE,gBAAgB;EAChB,QAAQ;EACR,SAAS;EACT,UAAU;EACV,OAAO;EACP,aAA0B,EAC3B;;AAGD;EACE,SAAS;EACT,WAAW,EACZ;;AAUC;;EACE,cAAc;EACd,0BAAuC;EACvC,4BAAyC;EACzC,YAAY,EACb;;AARH;;EAWI,UAAU;EACV,aAAa;EACb,mBAAmB,EACpB;;AAQH;EACE;IAEI,SAAS;IAAE,WAAW,EACvB;EAGD;IACE,QAAQ;IAAE,YAAY,EACvB,EAAA;;AGhNL;;EAEE,mBAAmB;EACnB,sBAAsB;EACtB,uBAAuB,EAYxB;EAXG;;IACA,mBAAmB;IACnB,YAAY,EAQb;IAfH;;;;;MAaM,WAAW,EACZ;;AAKL;;;;EAKI,kBAAkB,EACnB;;AAIH;EACE,kBAAkB,EAanB;EAdD;IjBnBI,aAAa;IACb,eAAe,EAChB;EiBiBH;IjBfI,YAAY,EACb;EiBkBD;;;IAGE,YAAY,EACb;EARH;;;IAYI,iBAAiB,EAClB;;AAGH;EACE,iBAAiB,EAClB;;AAGgB;EACf,eAAe,EAIhB;EALgB;IChDf,8BDmDgC;IClD7B,2BDkD6B,EAC/B;;AAGH;;EC/CE,6BDiD6B;EChD1B,0BDgD0B,EAC9B;;AAGD;EACE,YAAY,EACb;;AACD;EACE,iBAAiB,EAClB;;AAEO;;ECpEN,8BDsEgC;ECrE7B,2BDqE6B,EAC/B;;AAEH;ECjEE,6BDkE6B;ECjE1B,0BDiE0B,EAC9B;;AAGD;;EAEE,WAAW,EACZ;;AAgBD;EACE,kBAAkB;EAClB,mBAAmB,EACpB;;AACD;EACE,mBAAmB;EACnB,oBAAoB,EACrB;;AAID;EzB9CU,iDyB+CgC,EAMzC;EAPD;IzB9CU,iByBmDkB,EACzB;;AAKH;EACE,eAAe,EAChB;;AAED;EACE,wBAAqD;EACrD,uBAAuB,EACxB;;AAEe;EACd,wBvBf6B,EuBgB9B;;AAOG;;;EAGA,eAAe;EACf,YAAY;EACZ,YAAY;EACZ,gBAAgB,EACjB;;AAGC;EjB3IA,aAAa;EACb,eAAe,EAChB;;AiB8HH;EjB5HI,YAAY,EACb;;AiB2HH;EAcM,YAAY,EACb;;AAfL;;;;EAsBI,iBAAiB;EACjB,eAAe,EAChB;;AAGH;EAEI,iBAAiB,EAClB;;AAHmB;ECvKpB,6BxB0G6B;EwBzG5B,4BxByG4B;EwBlG7B,8BDqKiC;ECpKhC,6BDoKgC,EAChC;;AAPH;ECvKE,2BDgL8B;EC/K7B,0BD+K6B;ECxK9B,gCxBkG6B;EwBjG5B,+BxBiG4B,EuBwE5B;;AAEH;EACE,iBAAiB,EAClB;;AAEO;;EChLN,8BDkLiC;ECjLhC,6BDiLgC,EAChC;;AAEH;EC7LE,2BD8L4B;EC7L3B,0BD6L2B,EAC7B;;AAMD;EACE,eAAe;EACf,YAAY;EACZ,oBAAoB;EACpB,0BAA0B,EAc3B;EAbG;;IAEA,YAAY;IACZ,oBAAoB;IACpB,UAAU,EACX;EACY;IACX,YAAY,EACb;EAEY;IACX,WAAW,EACZ;;A/B4iKH;;;;E+BvhKM,mBAAmB;EACnB,uBAAU;EACV,qBAAqB,EACtB;;AE3OL;EACE,mBAAmB;EACnB,eAAe;EACf,0BAA0B,EA2B3B;EA9BD;IAOI,YAAY;IACZ,gBAAgB;IAChB,iBAAiB,EAClB;EAVH;IAeI,mBAAmB;IACnB,WAAW;IAKX,YAAY;IAEZ,YAAY;IACZ,iBAAiB,EAKlB;IAjBD;MAeI,WAAW,EACZ;;AAuBL;;;EAGE,oBAAoB,EAKrB;EARD;;;IAMI,iBAAiB,EAClB;;AAGH;;EAEE,UAAU;EACV,oBAAoB;EACpB,uBAAuB,EACxB;;AAID;EACE,kBzBkB8B;EyBjB9B,gBzB3B4B;EyB4B5B,oBAAoB;EACpB,eAAe;EACf,ezBpE8B;EyBqE9B,mBAAmB;EACnB,0BzBpE8B;EyBqE9B,uBzB+GmC;EyB9GnC,mBzBwB6B,EyBL9B;EA5BD;;;IAaI,kBzBY4B;IyBX5B,gBzBrC0B;IyBsC1B,mBzBoB2B,EyBnB5B;EAhBH;;;IAkBI,mBzBI4B;IyBH5B,gBzB3C0B;IyB4C1B,mBzBc2B,EyBb5B;EArBH;;IA0BI,cAAc,EACf;;AAIH;;;;;;;EDpGE,8BC2G8B;ED1G3B,2BC0G2B,EAC/B;;AACD;EACE,gBAAgB,EACjB;;AACD;;;;;;;EDxGE,6BC+G6B;ED9G1B,0BC8G0B,EAC9B;;AACD;EACE,eAAe,EAChB;;AAID;EACE,mBAAmB;EAGnB,aAAa;EACb,oBAAoB,EA+BrB;EApCD;IAUI,mBAAmB,EAUpB;IApBH;MAYM,kBAAkB,EACnB;IAbL;MAkBM,WAAW,EACZ;EAnBL;;IA0BM,mBAAmB,EACpB;EAGC;;IAEA,WAAW;IACX,kBAAkB,EACnB;;AChKL;EACE,iBAAiB;EACjB,gBAAgB;EAChB,iBAAiB,EAyDlB;EA5DD;IpBOI,aAAa;IACb,eAAe,EAChB;EoBTH;IpBWI,YAAY,EACb;EoBZH;IAOI,mBAAmB;IACnB,eAAe,EAyBhB;IAvBG;MACA,mBAAmB;MACnB,eAAe;MACf,mB1BqZ+C,E0B/YhD;MATC;QAME,sBAAsB;QACtB,0B1BVwB,E0BWzB;IAlBP;MAuBM,e1BjB0B,E0B0B3B;MAhCL;QA2BQ,e1BrBwB;Q0BsBxB,sBAAsB;QACtB,8BAA8B;QAC9B,oB1BiMoC,E0BhMrC;EA/BP;IAwCM,0B1BjC0B;I0BkC1B,sB3BjDwB,E2BkDzB;EAQH;ILrDA,YAAY;IACZ,cAA2C;IAC3C,iBAAiB;IACjB,0BAJgC,EKwD/B;EApDH;IA0DI,gBAAgB,EACjB;;AAQH;EACE,8B1BqW8C,E0BlU/C;EAlCG;IACA,YAAY;IAEZ,oBAAoB,EAyBrB;IAtBG;MACA,kBAAkB;MAClB,yB1BtB+B;M0BuB/B,8BAA8B;MAC9B,2BAA0D,EAI3D;MAhBL;QAcQ,mC1BwVwC,E0BvVzC;IAIQ;MAIP,e1BrFwB;M0BsFxB,uB1BtEoB;M0BuEpB,uB1BmVwC;M0BlVxC,iCAAiC;MACjC,gBAAgB,EACjB;;AAaP;EAEI,YAAY,EAmBb;EArBH;IAMM,mB1BbyB,E0Bc1B;EACC;IACA,iBAAiB,EAClB;EAGU;IAIP,Y1BnBwB;I0BoBxB,0B3BtIsB,E2BuIvB;;AAQH;EACA,YAAY,EAKb;EAPH;IAIM,gBAAgB;IAChB,eAAe,EAChB;;AAWL;EACE,YAAY,EAwBb;EAtBG;IACA,YAAY,EAKb;IATH;MAMM,mBAAmB;MACnB,mBAAmB,EACpB;EARL;IAYI,UAAU;IACV,WAAW,EACZ;EAED;IACI;MACA,oBAAoB;MACpB,UAAU,EAIX;MAHG;QACA,iBAAiB,EAClB,EAAA;;AAQP;EACE,iBAAiB,EAyBlB;EA1BD;IAKI,gBAAgB;IAChB,mB1BtF2B,E0BuF5B;EAPH;;;IAYI,uB1BgPkD,E0B/OnD;EAED;IAfF;MAiBM,8B1B2OgD;M0B1OhD,2BAA0D,EAC3D;IACW;;;MAGV,0B1BvLsB,E0BwLvB,EAAA;;AAUD;EACA,cAAc,EACf;;AACC;EACA,eAAe,EAChB;;AAQH;EAEE,iBAAiB;EF3OjB,2BE6O4B;EF5O3B,0BE4O2B,EAC7B;;ACvOD;EACE,mBAAmB;EACnB,iB3BgWqC;E2B/VrC,oB3BoD6B;E2BnD7B,8BAA8B,EAQ/B;EAZD;IrBKI,aAAa;IACb,eAAe,EAChB;EqBPH;IrBSI,YAAY,EACb;EqBDD;IATF;MAUI,mB3ByF2B,E2BvF9B,EAAA;;AAQD;ErBfI,aAAa;EACb,eAAe,EAChB;;AqBaH;ErBXI,YAAY,EACb;;AqBaD;EAHF;IAII,YAAY,EAEf,EAAA;;AAaD;EACE,oBAAoB;EACpB,oB3B4TsC;E2B3TtC,mB3B2TsC;E2B1TtC,kCAAkC;EAClC,mDAA8B;EAE9B,kCAAkC,EA+BnC;EAtCD;IrBlCI,aAAa;IACb,eAAe,EAChB;EqBgCH;IrB9BI,YAAY,EACb;EqB6BH;IAUI,iBAAiB,EAClB;EAED;IAbF;MAcI,YAAY;MACZ,cAAc;MACd,iBAAiB,EAsBpB;MAtCD;QAmBM,0BAA0B;QAC1B,wBAAwB;QACxB,kBAAkB;QAClB,6BAA6B,EAC9B;MAvBL;QA0BM,oBAAoB,EACrB;MAID;;;QAGE,gBAAgB;QAChB,iBAAiB,EAClB,EAAA;;AAIL;;EAGI,kB3BqRoC,E2BhRrC;EAHC;IALJ;;MAMM,kBAAkB,EAErB,EAAA;;AAUC;;;;EAEA,oB3BkQoC;E2BjQpC,mB3BiQoC,E2B3PrC;EAJC;IALA;;;;MAME,gBAAgB;MAChB,eAAgB,EAEnB,EAAA;;AAWH;EACE,c3BoJ6B;E2BnJ7B,sBAAsB,EAKvB;EAHC;IAJF;MAKI,iBAAiB,EAEpB,EAAA;;AAGD;;EAEE,gBAAgB;EAChB,SAAS;EACT,QAAQ;EACR,c3B0I6B,E2BpI9B;EAHC;IARF;;MASI,iBAAiB,EAEpB,EAAA;;AACD;EACE,OAAO;EACP,sBAAsB,EACvB;;AACD;EACE,UAAU;EACV,iBAAiB;EACjB,sBAAsB,EACvB;;AAKD;EACE,YAAY;EACZ,mB3B2MsC;E2B1MtC,gB3BjH4B;E2BkH5B,kB3BrG6B;E2BsG7B,a3BqMqC,E2BpLtC;EAtBD;IASI,sBAAsB,EACvB;EAVH;IAaI,eAAe,EAChB;EAED;IAhBF;;MAmBM,mB3B0LkC,E2BzLnC,EAAA;;AAUL;EACE,mBAAmB;EACnB,aAAa;EACb,mB3B4KsC;E2B3KtC,kBAAkB;EC9LlB,gBAA4B;EAC5B,mBAA+B;ED+L/B,8BAA8B;EAC9B,uBAAuB;EACvB,8BAA8B;EAC9B,mB3B5F6B,E2BkH9B;EA/BD;IAcI,WAAW,EACZ;EAfH;IAmBI,eAAe;IACf,YAAY;IACZ,YAAY;IACZ,mBAAmB,EACpB;EAvBH;IAyBI,gBAAgB,EACjB;EAED;IA5BF;MA6BI,cAAc,EAEjB,EAAA;;AAQD;EACE,oB3BuIsC,E2B1FvC;EA9CD;IAII,kBAAqB;IACrB,qBAAqB;IACrB,kB3B5K2B,E2B6K5B;EAED;IAEQ;MACJ,iBAAiB;MACjB,YAAY;MACZ,YAAY;MACZ,cAAc;MACd,8BAA8B;MAC9B,UAAU;MACV,iBAAiB,EAYlB;MA9BL;;QAqBQ,2BAA2B,EAC5B;MACM;QACL,kB3B9LuB,E2BmMxB;QA7BP;UA2BU,uBAAuB,EACxB,EAAA;EAMP;IAlCF;MAmCI,YAAY;MACZ,UAAU,EAUb;MA9CD;QAuCM,YAAY,EAKb;QA5CL;UAyCQ,kB3BgG2C;U2B/F3C,qB3B+F2C,E2B9F5C,EAAA;;AAWP;EACE,mB3BiFsC;E2BhFtC,oB3BgFsC;E2B/EtC,mB3B+EsC;E2B9EtC,kCAAkC;EAClC,qCAAqC;E7B7N7B,qF6B8NiD;EC7RzD,gBAA4B;EAC5B,mBAA+B,EDyThC;Eb2JC;Ia9LF;MbiMM,sBAAsB;MACtB,iBAAiB;MACjB,uBAAuB,EACxB;IapML;MbwMM,sBAAsB;MACtB,YAAY;MACZ,uBAAuB,EACxB;Ia3ML;Mb+MM,sBAAsB,EACvB;IahNL;MbmNM,sBAAsB;MACtB,uBAAuB,EAOxB;Ma3NL;;;QbyNQ,YAAY,EACb;IAIY;MACb,YAAY,EACb;IAED;MACE,iBAAiB;MACjB,uBAAuB,EACxB;IAID;;MAEE,sBAAsB;MACtB,cAAc;MACd,iBAAiB;MACjB,uBAAuB,EAKxB;ManPL;;QbiPQ,gBAAgB,EACjB;IalPP;;MbsPM,mBAAmB;MACnB,eAAe,EAChB;IaxPL;Mb4PM,OAAO,EACR,EAAA;EahPD;IAbJ;MAcM,mBAAmB,EAMtB;MARD;QAKM,iBAAiB,EAClB,EAAA;EAQL;IA1BF;MA2BI,YAAY;MACZ,UAAU;MACV,eAAe;MACf,gBAAgB;MAChB,eAAe;MACf,kBAAkB;M7BxPZ,iB6ByPkB,EAE3B,EAAA;;AAMD;EACE,cAAc;EHpUd,2BGqU4B;EHpU3B,0BGoU2B,EAC7B;;AAEuC;EACtC,iBAAiB;EHzUjB,6BxB0G6B;EwBzG5B,4BxByG4B;EwBlG7B,8BGmU+B;EHlU9B,6BGkU8B,EAChC;;AAOD;EChVE,gBAA4B;EAC5B,mBAA+B,EDwVhC;EATD;IChVE,iBAA4B;IAC5B,oBAA+B,EDoV9B;EALH;IChVE,iBAA4B;IAC5B,oBAA+B,EDuV9B;;AAQH;EChWE,iBAA4B;EAC5B,oBAA+B,EDuWhC;EALC;IAHF;MAII,YAAY;MACZ,kB3BIoC;M2BHpC,mB3BGoC,E2BDvC,EAAA;;AAWD;EACE;IACE,uBAAuB,EACxB;EACD;IACE,wBAAwB;IAC1B,oB3BhBsC,E2BqBrC;IAPD;MAKI,gBAAgB,EACjB,EAAA;;AASL;EACE,0B3BzBwC;E2B0BxC,sB3BzBuC,E2ByJxC;EA9HC;IACE,Y3BzB2C,E2B+B5C;IAPD;MAII,e3BlB2C;M2BmB3C,8B3BlBgD,E2BmBjD;EAGH;IACE,Y3BvCmC,E2BwCpC;EAfH;IAmBM,Y3BvCyC,E2B8C1C;IARM;MAKH,Y3B1CuC;M2B2CvC,8B3B1C8C,E2B2C/C;EAzBP;IA+BQ,Y3BhDuC;I2BiDvC,0B3BhDyC,E2BiD1C;EAjCP;IAuCQ,Y3BtDuC;I2BuDvC,8B3BtD8C,E2BuD/C;EAzCP;IA8CI,mB3BlD2C,E2B0D5C;IATD;MAII,uB3BvDyC,E2BwD1C;IAlDL;MAoDM,uB3BzDyC,E2B0D1C;EArDL;;IA0DI,sB3BjFqC,E2BkFtC;EA3DH;IAoEQ,0B3BpFyC;I2BqFzC,Y3BtFuC,E2BuFxC;EAGH;IAzEJ;MA6EU,Y3BjGqC,E2BuGtC;MAnFT;QAgFY,Y3BnGmC;Q2BoGnC,8B3BnG0C,E2BoG3C;IAlFX;MAwFY,Y3BzGmC;M2B0GnC,0B3BzGqC,E2B0GtC;IAEW;MAIV,Y3B/GmC;M2BgHnC,8B3B/G0C,E2BgH3C,EAAA;EAWT;IACE,Y3BlI2C,E2BsI5C;IALD;MAGI,Y3BnIyC,E2BoI1C;EAGH;IACE,Y3BzI2C,E2BqJ5C;IAjIH;MAwHM,Y3B3IyC,E2B4I1C;IAzHL;;;MA8HQ,Y3B7IuC,E2B8IxC;;AAOP;EACE,uB3BrI8C;E2BsI9C,sB3BrIgD,E2BsQjD;EAnID;IAKI,e3BrI+C,E2B2IhD;IAPD;MAII,Y3B9H0C;M2B+H1C,8B3B9HiD,E2B+HlD;EAVL;IAcI,e3BnJ+C,E2BoJhD;EAGQ;IACL,e3BnJ6C,E2B0J9C;IA1BL;MAuBQ,Y3BtJwC;M2BuJxC,8B3BtJ+C,E2BuJhD;EAzBP;IA+BQ,Y3B9JwC;I2B+JxC,0B3B5J0C,E2B6J3C;EAEW;IAIV,Y3BlKwC;I2BmKxC,8B3BlK+C,E2BmKhD;EAzCP;IA+CI,mB3B/J4C,E2BuK7C;IAvDH;MAkDM,uB3BpK0C,E2BqK3C;IAnDL;MAqDM,uB3BtK0C,E2BuK3C;EAtDL;;IA2DI,sBAAoB,EACrB;EA5DH;IAoEQ,0B3BhM0C;I2BiM1C,Y3BpMwC,E2BqMzC;EAGH;IAGM;MACA,sB3BhNwC,E2BiNzC;IA9ET;MAgFU,0B3BnNwC,E2BoNzC;IAjFT;MAmFU,e3BnNyC,E2ByN1C;MAzFT;QAsFY,Y3BrNoC;Q2BsNpC,8B3BrN2C,E2BsN5C;IAES;MAIR,Y3B7NoC;M2B8NpC,0B3B3NsC,E2B4NvC;IAEW;MAIV,Y3BjOoC;M2BkOpC,8B3BjO2C,E2BkO5C,EAAA;EAMT;IACE,e3B/O+C,E2BmPhD;IALD;MAGI,Y3BhP0C,E2BiP3C;EAGH;IACE,e3BtP+C,E2BkQhD;IAbD;MAII,Y3BxP0C,E2ByP3C;IALH;;;MAUM,Y3B1PwC,E2B2PzC;;AE7oBP;EACE,kB7BqxBkC;E6BpxBlC,oB7B0D6B;E6BzD7B,iBAAiB;EACjB,0B7BoxBqC;E6BnxBrC,mB7BmG6B,E6BlF9B;EAtBD;IAQI,sBAAsB,EASvB;IAPK;MAGF,cAA2C;MAC3C,eAAe;MACf,Y7B2wB8B,E6B1wB/B;EAGD;IACA,e7BX4B,E6BY7B;;ACvBH;EACE,sBAAsB;EACtB,gBAAgB;EAChB,eAA+B;EAC/B,mB9BsG6B,E8BlC9B;EAxED;IAOI,gBAAgB,EA0BjB;IAjCH;;MAUM,mBAAmB;MACnB,YAAY;MACZ,kB9BgF0B;M8B/E1B,yB9B+C+B;M8B9C/B,sBAAsB;MACtB,e/BlBwB;M+BmBxB,uB9BobqC;M8BnbrC,uB9BobqC;M8BnbrC,kBAAkB,EACnB;IAEG;;MAEA,eAAe;MNXrB,+BxB8F6B;MwB7F1B,4BxB6F0B,E8BjFxB;IAzBP;;MNIE,gCxBsG6B;MwBrG1B,6BxBqG0B,E8B3ExB;EAIE;;;IAIH,WAAW;IACX,e9BPwB;I8BQxB,0B9B7B0B;I8B8B1B,mB9B+ZqC,E8B9ZtC;EAGS;;;;IAKR,WAAW;IACX,Y9BuZqC;I8BtZrC,0B/BxDwB;I+ByDxB,sB/BzDwB;I+B0DxB,gBAAgB,EACjB;EAIC;;;;;;IAMA,e9BvD0B;I8BwD1B,uB9B6YqC;I8B5YrC,mB9B6YqC;I8B5YrC,oB9B+JsC,E8B9JvC;;AAQL;;EC3EM,mB/B4F0B;E+B3F1B,gB/B6CwB;E+B5CxB,uB/BkG+B,E+BjGhC;;ADwEL;;ENlEE,+BxB+F6B;EwB9F1B,4BxB8F0B,E+BhGxB;;AAGC;;EPVN,gCxBuG6B;EwBtG1B,6BxBsG0B,E+B1FxB;;ADkEP;;EChFM,kB/B+F0B;E+B9F1B,gB/B8CwB;E+B7CxB,iB/BmGyB,E+BlG1B;;AAEG;;EPIN,+BxBgG6B;EwB/F1B,4BxB+F0B,E+BjGxB;;ADwEP;;EN/EE,gCxBwG6B;EwBvG1B,6BxBuG0B,E+B3FxB;;ACfP;EACE,gBAAgB;EAChB,eAA+B;EAC/B,iBAAiB;EACjB,mBAAmB,EA4CpB;EAhDD;I1BUI,aAAa;IACb,eAAe,EAChB;E0BZH;I1BcI,YAAY,EACb;E0BTD;IACE,gBAAgB,EAejB;IAdG;;MAEA,sBAAsB;MACtB,kBAAkB;MAClB,uBhCsbqC;MgCrbrC,uBhCsbqC;MgCrbrC,oBhC0cqC,EgCzctC;IAEE;;MAED,sBAAsB;MACtB,0BhCV0B,EgCW3B;EAIC;;IAEA,aAAa,EACd;EA5BL;;IAkCM,YAAY,EACb;EAnCL;;;;IA2CM,ehClC0B;IgCmC1B,uBhCsZqC;IgCrZrC,oBhCqLsC,EgCpLvC;;AC/CL;EACE,gBAAgB;EAChB,wBAAwB;EACxB,eAAe;EACf,kBAAkB;EAClB,eAAe;EACf,YjC+jBgC;EiC9jBhC,mBAAmB;EACnB,oBAAoB;EACpB,yBAAyB;EACzB,qBAAqB,EActB;EAxBD;IAgBI,cAAc,EACf;EAjBH;IAqBI,mBAAmB;IACnB,UAAU,EACX;;AAIF;EAGG,YjCyiB8B;EiCxiB9B,sBAAsB;EACtB,gBAAgB,EACjB;;AAMH;ECxCE,0BlCW8B,EiC+B/B;EAFD;ICnCM,0BAAwB,EACzB;;ADsCL;EC5CE,0BnCH4B,EkCiD7B;EAFD;ICvCM,0BAAwB,EACzB;;AD0CL;EChDE,0BnCF6B,EkCoD9B;EAFD;IC3CM,0BAAwB,EACzB;;AD8CL;ECpDE,0BnCD6B,EkCuD9B;EAFD;IC/CM,0BAAwB,EACzB;;ADkDL;ECxDE,0BnCA6B,EkC0D9B;EAFD;ICnDM,0BAAwB,EACzB;;ADsDL;EC5DE,0BnCC6B,EkC6D9B;EAFD;ICvDM,0BAAwB,EACzB;;ACHL;EACE,sBAAsB;EACtB,gBAAgB;EAChB,iBAAiB;EACjB,gBnC2C4B;EmC1C5B,kBnCswBgC;EmCrwBhC,YnC2vBgC;EmC1vBhC,enCqwB6B;EmCpwB7B,uBAAuB;EACvB,oBAAoB;EACpB,mBAAmB;EACnB,0BnCH8B;EmCI9B,oBnCiwBgC,EmC1tBjC;EAnDD;IAgBI,cAAc,EACf;EAjBH;IAqBI,mBAAmB;IACnB,UAAU,EACX;EAvBH;;IA2BI,OAAO;IACP,iBAAiB,EAClB;EA7BH;;IAoCI,epC1C0B;IoC2C1B,uBnCouB8B,EmCnuB/B;EAtCH;IAyCI,aAAa,EACd;EA1CH;IA6CI,kBAAkB,EACnB;EA9CH;IAiDI,iBAAiB,EAClB;;AAIF;EAGG,YnC0sB8B;EmCzsB9B,sBAAsB;EACtB,gBAAgB,EACjB;;AC7DH;EACE,kBpCqemC;EoCpenC,qBpCoemC;EoCnenC,oBpCmemC;EoClenC,epCmesC;EoCletC,0BpCK8B,EoCsC/B;EAhDD;;IASI,epCgeoC,EoC/drC;EAED;IACE,oBAAkC;IAClC,gBpC4diC;IoC3djC,iBAAiB,EAClB;EAhBH;IAmBI,0BAAwB,EACzB;EApBH;;IAwBI,mBpCiF2B;IoChF3B,mBAAkC;IAClC,oBAAkC,EACnC;EA3BH;IA8BI,gBAAgB,EACjB;EAED;IAjCF;MAkCI,kBAAmC;MACnC,qBAAmC,EAatC;MAhDD;;QAuCM,mBAAkC;QAClC,oBAAkC,EACnC;MAzCL;;QA6CM,gBpC8b+B,EoC7bhC,EAAA;;AC7CL;EACE,eAAe;EACf,arCquB+B;EqCpuB/B,oBrCwD6B;EqCvD7B,yBrCqDmC;EqCpDnC,uBrCkB0B;EqCjB1B,uBrCquBgC;EqCpuBhC,mBrCgG6B;EF8ErB,oCuC7KkC,EAgB3C;EAxBD;;InCGE,eADmC;IAEnC,gBAAgB;IAChB,aAAa;ImCQX,kBAAkB;IAClB,mBAAmB,EACpB;EAfH;IAqBI,arC6tB6B;IqC5tB7B,erChB4B,EqCiB7B;;AAIH;;;EAGE,sBtCpC4B,EsCqC7B;;AC7BD;EACE,ctC0mBgC;EsCzmBhC,oBtCuD6B;EsCtD7B,8BAA8B;EAC9B,mBtCiG6B,EsC1E9B;EApBC;IACE,cAAc;IAEd,eAAe,EAChB;EAGD;IACE,kBtC8lB8B,EsC7lB/B;EAGC;;IAEA,iBAAiB,EAClB;EAEK;IACJ,gBAAgB,EACjB;;AAOH;;EAEE,oBAA8B,EAS/B;EAXD;;IAMI,mBAAmB;IACnB,UAAU;IACV,aAAa;IACb,eAAe,EAChB;;AAOH;ECvDE,0BvCqfsC;EuCpftC,sBvCqfqC;EuCpfrC,evCkfsC,EsC3bvC;ECrDC;IACE,0BAAwB,EACzB;EDiDH;IC/CI,eAAa,EACd;;ADkDH;EC3DE,0BvCyfsC;EuCxftC,sBvCyfqC;EuCxfrC,evCsfsC,EsC3bvC;ECzDC;IACE,0BAAwB,EACzB;EDqDH;ICnDI,eAAa,EACd;;ADsDH;EC/DE,0BvC6fsC;EuC5ftC,sBvC6fqC;EuC5frC,evC0fsC,EsC3bvC;EAFD;IC1DI,0BAAwB,EACzB;EDyDH;ICvDI,eAAa,EACd;;AD0DH;ECnEE,0BvCigBsC;EuChgBtC,sBvCigBqC;EuChgBrC,evC8fsC,EsC3bvC;EAFD;IC9DI,0BAAwB,EACzB;EACD;IACE,eAAa,EACd;;ACGH;EACE;IAAQ,4BAA4B,EAAA;EACpC;IAAQ,yBAAyB,EAAA,EAAA;;AAQnC;EACE,iBAAiB;EACjB,axCsC6B;EwCrC7B,oBxCqC6B;EwCpC7B,0BxCgnBmC;EwC/mBnC,mBxC+E6B;EFxCrB,+C0CtCgC,EACzC;;AAGD;EACE,YAAY;EACZ,UAAU;EACV,aAAa;EACb,gBxCc4B;EwCb5B,kBxCyB6B;EwCxB7B,YxCsmBgC;EwCrmBhC,mBAAmB;EACnB,0BzC3C4B;EDqEpB,+C0CzB+B;E1C+I/B,4B0C9I0B,EACnC;;AAOD;;ECGE,sMAAiC;EDAjC,2BAA2B,EAC5B;;AAMD;;E1C1CU,mD0C4CkD,EAC3D;;AAMD;EErEE,0B3CF6B,EyCyE9B;EAFD;IChBE,sMAAiC,EChDhC;;AFoEH;EEzEE,0B3CD6B,EyC4E9B;EAFD;ICpBE,sMAAiC,EChDhC;;AFwEH;EE7EE,0B3CA6B,EyC+E9B;EAFD;ICxBE,sMAAiC,EChDhC;;AF4EH;EEjFE,0B3CC6B,EyCkF9B;EEhFC;IDkDA,sMAAiC,EChDhC;;ACRH;EAEE,iBAAiB,EAKlB;EAPD;IAKI,cAAc,EACf;;AAGH;;EAEE,QAAQ;EACR,iBAAiB,EAClB;;AAED;EACE,eAAe,EAChB;;AAED;EACE,eAAe,EAMhB;EAPD;IAKI,gBAAgB,EACjB;;AAGH;;;EAEE,mBAAmB,EACpB;;AAED;;EAEE,oBAAoB,EACrB;;AAED;;;EAGE,oBAAoB;EACpB,oBAAoB,EACrB;;AAED;EACE,uBAAuB,EACxB;;AAED;EACE,uBAAuB,EACxB;;AAGD;EACE,cAAc;EACd,mBAAmB,EACpB;;AAKD;EACE,gBAAgB;EAChB,iBAAiB,EAClB;;ACxDD;EAEE,oBAAoB;EACpB,gBAAgB,EACjB;;AAOD;EACE,mBAAmB;EACnB,eAAe;EACf,mBAAmB;EAEnB,oBAAoB;EACpB,uB5C0oBkC;E4CzoBlC,uB5C2oBkC,E4CjoBnC;EAjBD;IpBjBE,6BxB0G6B;IwBzG5B,4BxByG4B,E4C7E5B;EAZH;IAcI,iBAAiB;IpBvBnB,gCxBkG6B;IwBjG5B,+BxBiG4B,E4CzE5B;;AASH;;EAEE,Y5C6oBkC,E4ChoBnC;EAfD;;IAKI,Y5C4oBgC,E4C3oBjC;EANF;;;IAWG,sBAAsB;IACtB,Y5CmoBgC;I4CloBhC,0B5CinBmC,E4ChnBpC;;AAGG;EACJ,YAAY;EACZ,iBAAiB,EAClB;;AAED;EAKI,0B5CzD4B;E4C0D5B,e5C3D4B;E4C4D5B,oB5C6JwC,E4CpJzC;EANC;IACE,eAAe,EAChB;EAZL;IAcM,e5CnE0B,E4CoE3B;;AAfL;EAsBI,WAAW;EACX,Y5CwB4B;E4CvB5B,0B7C3F0B;E6C4F1B,sB7C5F0B,E6CuG3B;EARC;;;;;;;IAGE,eAAe,EAChB;EAhCL;IAkCM,e5C8kBiC,E4C7kBlC;;ACnGH;EACE,e7CmfoC;E6ClfpC,0B7CmfoC,E6ChfrC;;AAEA;;EACC,e7C4eoC,E6C1drC;EAhBC;;IACE,eAAe,EAChB;EALF;;;IASG,e7CoekC;I6CnelC,0BAAwB,EACzB;EAXF;;;;IAeG,YAAY;IACZ,0B7C6dkC;I6C5dlC,sB7C4dkC,E6C3dnC;;AAzBH;EACE,e7CufoC;E6CtfpC,0B7CufoC,E6CpfrC;;AAEA;;EACC,e7CgfoC,E6C9drC;EAhBC;;IACE,eAAe,EAChB;EALH;;;IASI,e7CwekC;I6CvelC,0BAAwB,EACzB;EAXH;;;;IAeI,YAAY;IACZ,0B7CiekC;I6ChelC,sB7CgekC,E6C/dnC;;AAzBH;EACE,e7C2foC;E6C1fpC,0B7C2foC,E6CxfrC;;AAED;;EACE,e7CofoC,E6ClerC;EAnBD;;IAII,eAAe,EAChB;EALH;;;IASI,e7C4ekC;I6C3elC,0BAAwB,EACzB;EAXH;;;;IAeI,YAAY;IACZ,0B7CqekC;I6CpelC,sB7CoekC,E6CnenC;;AAzBH;EACE,e7C+foC;E6C9fpC,0B7C+foC,E6C5frC;;AAED;;EACE,e7CwfoC,E6CterC;EAhBC;;IACE,eAAe,EAChB;EALH;;;IASI,e7CgfkC;I6C/elC,0BAAwB,EACzB;EAXH;;;;IAeI,YAAY;IACZ,0B7CyekC;I6CxelC,sB7CwekC,E6CvenC;;AD8FL;EACE,cAAc;EACd,mBAAmB,EACpB;;AACD;EACE,iBAAiB;EACjB,iBAAiB,EAClB;;AE3HD;EACE,oB9C0D6B;E8CzD7B,uB9C6rBgC;E8C5rBhC,8BAA8B;EAC9B,mB9CmG6B;EFxCrB,0CgD1D0B,EACnC;;AAGD;EACE,c9CsrBgC,E8CprBjC;EAHD;IxCAI,aAAa;IACb,eAAe,EAChB;EwCFH;IxCII,YAAY,EACb;;AwCCH;EACE,mB9CirBqC;E8ChrBrC,qCAAqC;EtBpBrC,6BsBqBgD;EtBpB/C,4BsBoB+C,EAKjD;EARD;IAMI,eAAe,EAChB;;AAIH;EACE,cAAc;EACd,iBAAiB;EACjB,gBAAe;EACf,eAAe,EAShB;EAbD;;;;;IAWI,eAAe,EAChB;;AAIH;EACE,mB9CspBqC;E8CrpBrC,0B9C2pBmC;E8C1pBnC,2B9CypBgC;EwBjsBhC,gCsByCmD;EtBxClD,+BsBwCkD,EACpD;;AAQD;;EAGI,iBAAiB,EAsBlB;EAzBH;;IAMM,oBAAoB;IACpB,iBAAiB,EAClB;EARL;;IAaQ,cAAc;ItBvEpB,6BsBwEsD;ItBvErD,4BsBuEqD,EACjD;EAfP;;IAqBQ,iBAAiB;ItBvEvB,gCsBwEyD;ItBvExD,+BsBuEwD,EACpD;;AAvBP;EtB1DE,2BsBsFgC;EtBrF/B,0BsBqF+B,EAC7B;;AAIL;EAEI,oBAAoB,EACrB;;AAEW;EACZ,oBAAoB,EACrB;;AAOD;;;EAII,iBAAiB,EAMlB;EAJC;;;IACE,mB9CmlB4B;I8CllB5B,oB9CklB4B,E8CjlB7B;;AAGK;;EtBrHR,6BsBuHkD;EtBtHjD,4BsBsHiD,EAkBjD;EAdO;;;;IACF,4BAA6C;IAC7C,6BAA8C,EAU/C;IA9BP;;;;;;;;MAwBU,4BAA6C,EAC9C;IAzBT;;;;;;;;MA4BU,6BAA8C,EAC/C;;AAKC;;EtBnIR,gCsBqIqD;EtBpIpD,+BsBoIoD,EAkBpD;EAtDH;;;;IAyCQ,+BAAgD;IAChD,gCAAiD,EAUlD;IARG;;;;;;;;MAEA,+BAAgD,EACjD;IA/CT;;;;;;;;MAkDU,gCAAiD,EAClD;;AAIS;;;;EAId,2B9CzBgC,E8C0BjC;;AA5DH;;EA+DI,cAAc,EACf;;AAhEH;;EAmEI,UAAU,EAiCX;EApGH;;;;;;;;;;;;IA0EU,eAAe,EAChB;EA3ET;;;;;;;;;;;;IA8EU,gBAAgB,EACjB;EA/ET;;;;;;;;IAuFU,iBAAiB,EAClB;EAxFT;;;;;;;;IAgGU,iBAAiB,EAClB;;AAjGT;EAsGI,UAAU;EACV,iBAAiB,EAClB;;AASH;EACE,oB9C7J6B,E8CwL9B;EA5BD;IAKI,iBAAiB;IACjB,mB9CtH2B,E8C2H5B;IAHG;MACA,gBAAgB,EACjB;EAGH;IACE,iBAAiB,EAMlB;IAJqB;;MAElB,2B9C6d4B,E8C5d7B;EAnBL;IAuBI,cAAc,EAIf;IA3BH;MAyBM,8B9Csd4B,E8Crd7B;;AAML;EC1PE,mB/C6sBgC,E8CjdjC;EAFD;ICvPI,e/CM4B;I+CL5B,0B/C0sBiC;I+CzsBjC,mB/CwsB8B,E+C/rB/B;ID4OH;MClPM,uB/CqsB4B,E+CpsB7B;IDiPL;MC/OM,e/CmsB+B;M+ClsB/B,0B/CH0B,E+CI3B;ED6OL;ICzOM,0B/C4rB4B,E+C3rB7B;;AD2OL;EC7PE,sBhDH4B,E+CkQ7B;EAFD;IC1PI,Y/C6sB8B;I+C5sB9B,0BhDP0B;IgDQ1B,sBhDR0B,EgDiB3B;ID+OH;MCrPM,0BhDXwB,EgDYzB;IDoPL;MClPM,ehDdwB;MgDexB,uB/CosB4B,E+CnsB7B;EDgPL;IC5OM,6BhDpBwB,EgDqBzB;;AD8OL;EChQE,sB/CsfqC,E8CpPtC;EAFD;IC7PI,e/CifoC;I+ChfpC,0B/CifoC;I+ChfpC,sB/CifmC,E+CxepC;IDkPH;MCxPM,0B/C8eiC,E+C7elC;IACD;MACE,e/C0ekC;M+CzelC,0B/CwekC,E+CvenC;EDmPL;IC/OM,6B/CqeiC,E+CpelC;;ADiPL;ECnQE,sB/C0fqC,E8CrPtC;ECnQK;IACF,e/CqfoC;I+CpfpC,0B/CqfoC;I+CpfpC,sB/CqfmC,E+C5epC;IDqPH;MC3PM,0B/CkfiC,E+CjflC;ID0PL;MCxPM,e/C8ekC;M+C7elC,0B/C4ekC,E+C3enC;EDsPL;IClPM,6B/CyeiC,E+CxelC;;ADoPL;ECtQE,sB/C8fqC,E8CtPtC;ECtQK;IACF,e/CyfoC;I+CxfpC,0B/CyfoC;I+CxfpC,sB/CyfmC,E+ChfpC;IAPqB;MAClB,0B/CsfiC,E+CrflC;ID6PL;MC3PM,e/CkfkC;M+CjflC,0B/CgfkC,E+C/enC;EAGmB;IAClB,6B/C6eiC,E+C5elC;;ADuPL;ECzQE,sB/CkgBqC,E8CvPtC;EAFD;ICtQI,e/C6foC;I+C5fpC,0B/C6foC;I+C5fpC,sB/C6fmC,E+CpfpC;IAPqB;MAClB,0B/C0fiC,E+CzflC;IDgQL;MC9PM,e/CsfkC;M+CrflC,0B/CofkC,E+CnfnC;ED4PL;ICxPM,6B/CifiC,E+ChflC;;ACjBL;EACE,mBAAmB;EACnB,eAAe;EACf,UAAU;EACV,WAAW;EACX,iBAAiB,EAelB;EApBD;;;;;IAYI,mBAAmB;IACnB,OAAO;IACP,QAAQ;IACR,UAAU;IACV,aAAa;IACb,YAAY;IACZ,UAAU,EACX;;AAIH;EACE,uBAAuB,EACxB;;AAGD;EACE,oBAAoB,EACrB;;AC5BD;EACE,iBAAiB;EACjB,cAAc;EACd,oBAAoB;EACpB,0BjDqvBmC;EiDpvBnC,0BjDqvBkC;EiDpvBlC,mBjDiG6B;EFxCrB,gDmDxDgC,EAKzC;EAJC;IACE,mBAAmB;IACnB,kCAAkB,EACnB;;AAIH;EACE,cAAc;EACd,mBjDuF6B,EiDtF9B;;AACD;EACE,aAAa;EACb,mBjDoF6B,EiDnF9B;;ACvBD;EACE,aAAa;EACb,gBAA2B;EAC3B,kBlDmzBgC;EkDlzBhC,eAAe;EACf,YlDkzBgC;EkDjzBhC,0BlDkzBwC;EkB1zBxC,agCSmB;EhCNnB,0BAAa,EgCiBd;EAlBD;IAWI,YlD4yB8B;IkD3yB9B,sBAAsB;IACtB,gBAAgB;IhCflB,agCgBqB;IhCbrB,0BAAa,EgCcZ;;AASG;EACJ,WAAW;EACX,gBAAgB;EAChB,wBAAwB;EACxB,UAAU;EACV,yBAAyB,EAC1B;;ACzBD;EACE,iBAAiB,EAClB;;AAGD;EACE,cAAc;EACd,iBAAiB;EACjB,gBAAgB;EAChB,OAAO;EACP,SAAS;EACT,UAAU;EACV,QAAQ;EACR,cnDmQ6B;EmDlQ7B,kCAAkC;EAIlC,WAAW,EAQZ;EArBD;IrD6HU,8BAAoB;IAqEpB,oCqDhLqC,EAC5C;EAnBH;IrD6HU,2BAAoB,EqDzGoB;;AAEtC;EACV,mBAAmB;EACnB,iBAAiB,EAClB;;AAGD;EACE,mBAAmB;EACnB,YAAY;EACZ,aAAa,EACd;;AAGD;EACE,mBAAmB;EACnB,uBnDuiBiD;EmDtiBjD,uBnD0iBiD;EmDziBjD,qCnDuiBiD;EmDtiBjD,mBnDuD6B;EFzCrB,yCqDb0B;EAClC,6BAA6B;EAE7B,WAAW,EACZ;;AAGD;EACE,gBAAgB;EAChB,OAAO;EACP,SAAS;EACT,UAAU;EACV,QAAQ;EACR,cnDoN6B;EmDnN7B,uBnD4hBgC,EmDxhBjC;EAXD;IjC5DE,WiCqE2B;IjClE3B,yBAAa,EiCkEmB;EATlC;IjC5DE,alBimB8B;IkB9lB9B,0BAAa,EiCmEuC;;AAKtD;EACE,cnDugBgC;EmDtgBhC,iCnDshBmC,EmDphBpC;EAJD;I7C/DI,aAAa;IACb,eAAe,EAChB;E6C6DH;I7C3DI,YAAY,EACb;;A6CgEH;EACE,iBAAiB,EAClB;;AAGD;EACE,UAAU;EACV,yBnD5BmC,EmD6BpC;;AAID;EACE,mBAAmB;EACnB,cnDifgC,EmDhfjC;;AAGD;EACE,cnD4egC;EmD3ehC,kBAAkB;EAClB,8BnD6fmC,EmD7epC;EAnBD;I7CvFI,aAAa;IACb,eAAe,EAChB;E6CqFH;I7CnFI,YAAY,EACb;E6CkFH;IAQI,iBAAiB;IACjB,iBAAiB,EAClB;EAEiB;IAChB,kBAAkB,EACnB;EAEY;IACX,eAAe,EAChB;;AAIH;EACE,mBAAmB;EACnB,aAAa;EACb,YAAY;EACZ,aAAa;EACb,iBAAiB,EAClB;;AAGD;EAEE;IACE,anDme+B;ImDle/B,kBAAkB,EACnB;EACD;IrDtEQ,0CqDuE6B,EACpC;EAGD;IAAY,anD4dqB,EmD5dD,EAAA;;AAGlC;EACE;IAAY,anDsdqB,EmDtdD,EAAA;;AC9IlC;EACE,mBAAmB;EACnB,cpD+Q6B;EoD9Q7B,eAAe;ECRf,kCtDK2C;EsDH3C,mBAAmB;EACnB,oBAAoB;EACpB,uBAAuB;EACvB,iBAAiB;EACjB,yBrDwDmC;EqDvDnC,iBAAiB;EACjB,kBAAkB;EAClB,sBAAsB;EACtB,kBAAkB;EAClB,qBAAqB;EACrB,oBAAoB;EACpB,mBAAmB;EACnB,qBAAqB;EACrB,kBAAkB;EDHlB,gBpDwC4B;EkBlD5B,WkCYkB;ElCTlB,yBAAa,EkCgBd;EAhBD;IlCHE,alB+gB8B;IkB5gB9B,0BAAa,EkCWoC;EAXnD;IAYa,iBAAkB;IAAE,eAA+B,EAAI;EAZpE;IAaa,iBAAkB;IAAE,epDkgBA,EoDlgBmC;EAbpE;IAca,gBAAkB;IAAE,eAA+B,EAAI;EAdpE;IAea,kBAAkB;IAAE,epDggBA,EoDhgBmC;;AAIpE;EACE,iBpDmfiC;EoDlfjC,iBAAiB;EACjB,YpDmfgC;EoDlfhC,mBAAmB;EACnB,uBpDmfgC;EoDlfhC,mBpD8E6B,EoD7E9B;;AAGD;EACE,mBAAmB;EACnB,SAAS;EACT,UAAU;EACV,0BAA0B;EAC1B,oBAAoB,EACrB;;AAGO;EACJ,UAAU;EACV,UAAU;EACV,kBpDse6B;EoDre7B,wBAAyD;EACzD,uBpDge8B,EoD/d/B;;AAPH;EASI,UAAU;EACV,WpDge6B;EoD/d7B,oBpD+d6B;EoD9d7B,wBAAyD;EACzD,uBpDyd8B,EoDxd/B;;AAdH;EAgBI,UAAU;EACV,UpDyd6B;EoDxd7B,oBpDwd6B;EoDvd7B,wBAAyD;EACzD,uBpDkd8B,EoDjd/B;;AACO;EACN,SAAS;EACT,QAAQ;EACR,iBpDid6B;EoDhd7B,4BAA8E;EAC9E,yBpD2c8B,EoD1c/B;;AACM;EACL,SAAS;EACT,SAAS;EACT,iBpD0c6B;EoDzc7B,4BpDyc6B;EoDxc7B,wBpDoc8B,EoDnc/B;;AAnCH;EAqCI,OAAO;EACP,UAAU;EACV,kBpDmc6B;EoDlc7B,wBpDkc6B;EoDjc7B,0BpD6b8B,EoD5b/B;;AACa;EACZ,OAAO;EACP,WpD6b6B;EoD5b7B,iBpD4b6B;EoD3b7B,wBpD2b6B;EoD1b7B,0BpDsb8B,EoDrb/B;;AAjDH;EAmDI,OAAO;EACP,UpDsb6B;EoDrb7B,iBpDqb6B;EoDpb7B,wBpDob6B;EoDnb7B,0BpD+a8B,EoD9a/B;;AE9FH;EACE,mBAAmB;EACnB,OAAO;EACP,QAAQ;EACR,ctD6Q6B;EsD5Q7B,cAAc;EACd,iBtDshByC;EsDrhBzC,aAAa;EDXb,kCtDK2C;EsDH3C,mBAAmB;EACnB,oBAAoB;EACpB,uBAAuB;EACvB,iBAAiB;EACjB,yBrDwDmC;EqDvDnC,iBAAiB;EACjB,kBAAkB;EAClB,sBAAsB;EACtB,kBAAkB;EAClB,qBAAqB;EACrB,oBAAoB;EACpB,mBAAmB;EACnB,qBAAqB;EACrB,kBAAkB;ECAlB,gBtDmC4B;EsDjC5B,uBtD6gBwC;EsD5gBxC,6BAA6B;EAC7B,uBtDihBwC;EsDhhBxC,qCtD8gBwC;EsD7gBxC,mBtDwF6B;EFzCrB,0CwD9C2B,EAOpC;EAzBD;IAqBc,kBtDihB4B,EsDjhBS;EArBnD;IAsBc,kBtDghB4B,EsDhhBS;EAtBnD;IAuBc,iBtD+gB4B,EsD/gBQ;EAvBlD;IAwBc,mBtD8gB4B,EsD9gBU;;AAGpD;EACE,UAAU;EACV,kBAAkB;EAClB,gBtDgB4B;EsDf5B,0BtDogB0C;EsDngB1C,iCAA+B;EAC/B,2BAAwE,EACzE;;AAED;EACE,kBAAkB,EACnB;;AAMD;EAGI,mBAAmB;EACnB,eAAe;EACf,SAAS;EACT,UAAU;EACV,0BAA0B;EAC1B,oBAAoB,EACrB;;AAEH;EACE,mBtDmfyD,EsDlf1D;;AACD;EACE,mBtD2ewC;EsD1exC,YAAY,EACb;;AAED;EAEI,UAAU;EACV,mBtDyeuD;EsDxevD,uBAAuB;EACvB,0BtD2ewC;EsD1exC,sCtDweyC;EsDvezC,ctDqeuD,EsD7dxD;EAfH;IASM,aAAa;IACb,YAAY;IACZ,mBtD4doC;IsD3dpC,uBAAuB;IACvB,uBtD8coC,EsD7crC;;AAdL;EAiBI,SAAS;EACT,YtD0duD;EsDzdvD,kBtDyduD;EsDxdvD,qBAAqB;EACrB,4BtD2dwC;EsD1dxC,wCtDwdyC,EsDhd1C;EA9BH;IAwBM,aAAa;IACb,UAAU;IACV,ctD6coC;IsD5cpC,qBAAqB;IACrB,yBtD+boC,EsD9brC;;AA7BL;EAgCI,UAAU;EACV,mBtD2cuD;EsD1cvD,oBAAoB;EACpB,6BtD6cwC;EsD5cxC,yCtD0cyC;EsDzczC,WtDucuD,EsD/bxD;EA7CH;IAuCM,aAAa;IACb,SAAS;IACT,mBtD8boC;IsD7bpC,oBAAoB;IACpB,0BtDgboC,EsD/arC;;AA5CL;EAgDI,SAAS;EACT,atD2buD;EsD1bvD,kBtD0buD;EsDzbvD,sBAAsB;EACtB,2BtD4bwC;EsD3bxC,uCtDybyC,EsDjb1C;EA7DH;IAuDM,aAAa;IACb,WAAW;IACX,sBAAsB;IACtB,wBtDiaoC;IsDhapC,ctD4aoC,EsD3arC;;AC1HL;EACE,mBAAmB,EACpB;;AAED;EACE,mBAAmB;EACnB,iBAAiB;EACjB,YAAY,EA0Eb;EA7ED;IAMI,cAAc;IACd,mBAAmB;IzD0Kb,kCyDzKkC,EAgCzC;IA7BG;;MrDZJ,eADmC;MAEnC,gBAAgB;MAChB,aAAa;MqDaT,eAAe,EAChB;IAGD;MAlBJ;QzDuMU,uCyDpL0C;QzD8B1C,4ByD7B+B;QzDyI/B,oByDxIuB,EAmB9B;QAnCC;UzDiIM,mCAAsB;UyD5GxB,QAAQ,EACT;QA3BP;UzDsIU,oCAAsB;UyDvGxB,QAAQ,EACT;QA3BH;UzDiIM,gCAAsB;UyDjGxB,QAAQ,EACT,EAAA;EAtCP;;;IA6CI,eAAe,EAChB;EA9CH;IAiDI,QAAQ,EACT;EAlDH;;IAsDI,mBAAmB;IACnB,OAAO;IACP,YAAY,EACb;EAzDH;IA4DI,WAAW,EACZ;EACC;IACA,YAAY,EACb;EACM;;IAEL,QAAQ,EACT;EApEH;IAuEI,YAAY,EACb;EAxEH;IA0EI,WAAW,EACZ;;AAOH;EACE,mBAAmB;EACnB,OAAO;EACP,QAAQ;EACR,UAAU;EACV,WvD4sB+C;EkB1yB/C,alB2yB8C;EkBxyB9C,0BAAa;EqC6Fb,gBvD4sBgD;EuD3sBhD,YvDwsBgD;EuDvsBhD,mBAAmB;EACnB,0CvDosB0D;EuDnsB1D,8BAAsB,EA+DvB;EA1ED;IdjFE,+FAAiC;IACjC,4BAA4B;IAC5B,uHAAwJ,EciGvJ;EAlBH;IAoBI,WAAW;IACX,SAAS;IdtGX,+FAAiC;IACjC,4BAA4B;IAC5B,uHAAwJ,EcsGvJ;EAvBH;IA4BI,WAAW;IACX,YvDmrB8C;IuDlrB9C,sBAAsB;IrCvHxB,aqCwHqB;IrCrHrB,0BAAa,EqCsHZ;EAhCH;;;;IAuCI,mBAAmB;IACnB,SAAS;IACT,kBAAkB;IAClB,WAAW;IACX,sBAAsB,EACvB;EA5CH;;IA+CI,UAAU;IACV,mBAAmB,EACpB;EACD;;IAEE,WAAW;IACX,oBAAoB,EACrB;EAtDH;;IAyDI,YAAa;IACb,aAAa;IACb,eAAe;IACf,mBAAmB,EACpB;EAGD;IAEI,iBAAiB,EAClB;EAEH;IAEI,iBAAiB,EAClB;;AASL;EACE,mBAAmB;EACnB,aAAa;EACb,UAAU;EACV,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,gBAAgB;EAChB,iBAAiB;EACjB,mBAAmB,EA8BpB;EA5BC;IACE,sBAAsB;IACtB,YAAa;IACb,aAAa;IACb,YAAY;IACZ,oBAAoB;IACpB,uBvDonB8C;IuDnnB9C,oBAAoB;IACpB,gBAAgB;IAWhB,0BAA0B;IAC1B,8BAAsB,EACvB;EAhCH;IAkCI,UAAU;IACV,YAAa;IACb,aAAa;IACb,uBvD+lB8C,EuD9lB/C;;AAMH;EACE,mBAAmB;EACnB,UAAU;EACV,WAAW;EACX,aAAa;EACb,YAAY;EACZ,kBAAkB;EAClB,qBAAqB;EACrB,YvDmlBgD;EuDllBhD,mBAAmB;EACnB,0CvDukB0D,EuDnkB3D;EAdD;IAYI,kBAAkB,EACnB;;AAKH;EAII;;;;IAIE,YAAmC;IACnC,aAAoC;IACpC,kBAAwC;IACxC,gBAAuC,EACxC;EATH;;IAYI,mBAAyC,EAC1C;EACD;;IAEE,oBAA0C,EAC3C;EAIH;IACE,UAAU;IACV,WAAW;IACX,qBAAqB,EACtB;EAGD;IACE,aAAa,EACd,EAAA;;ACpQH;ElDOI,aAAa;EACb,eAAe,EAChB;;AkDTH;ElDWI,YAAY,EACb;;AkDTH;ECRE,eAAe;EACf,kBAAkB;EAClB,mBAAmB,EDQpB;;AACD;EACE,wBAAwB,EACzB;;AACD;EACE,uBAAuB,EACxB;;AAOD;EACE,yBAAyB,EAC1B;;AACD;EACE,0BAA0B,EAC3B;;AACD;EACE,mBAAmB,EACpB;;AACD;EEzBE,YAAY;EACZ,mBAAmB;EACnB,kBAAkB;EAClB,8BAA8B;EAC9B,UAAU,EFuBX;;AAOD;EACE,yBAAyB,EAC1B;;AAMD;EACE,gBAAgB,EACjB;;AGjCC;EACE,oBAAoB,EAAA;;ACNtB;EACE,yBAAyB,EAC1B;;AAFD;EACE,yBAAyB,EAC1B;;AAFD;EACE,yBAAyB,EAC1B;;AAFD;EACE,yBAAyB,EAC1B;;ADiBH;;;;;;;;;;;;EAYE,yBAAyB,EAC1B;;AAED;EC5CE;IACE,0BAA0B,EAC3B;EACD;IAAE,0BAA0B,EAAI;EAChC;IAAE,8BAA8B,EAAI;EACpC;;IAAE,+BAA+B,EAAI,EAAA;;AD2CrC;EADF;IAEI,0BAA0B,EAE7B,EAAA;;AAEC;EADF;IAEI,2BAA2B,EAE9B,EAAA;;AAEC;EADF;IAEI,iCAAiC,EAEpC,EAAA;;AAED;EC/DE;IACE,0BAA0B,EAC3B;EACD;IAAE,0BAA0B,EAAI;EAChC;IAAE,8BAA8B,EAAI;EACpC;;IAAE,+BAA+B,EAAI,EAAA;;AD8DrC;EADF;IAEI,0BAA0B,EAE7B,EAAA;;AAEC;EADF;IAEI,2BAA2B,EAE9B,EAAA;;AAEC;EADF;IAEI,iCAAiC,EAEpC,EAAA;;AAED;EClFE;IACE,0BAA0B,EAC3B;EACI;IAAH,0BAA0B,EAAI;EAChC;IAAE,8BAA8B,EAAI;EAClC;;IAAA,+BAA+B,EAAI,EAAA;;ADiFrC;EADF;IAEI,0BAA0B,EAE7B,EAAA;;AAEC;EADF;IAEI,2BAA2B,EAE9B,EAAA;;AAEC;EADF;IAEI,iCAAiC,EAEpC,EAAA;;AAED;ECrGE;IACE,0BAA0B,EAC3B;EACD;IAAE,0BAA0B,EAAI;EAC9B;IAAA,8BAA8B,EAAI;EACpC;;IAAE,+BAA+B,EAAI,EAAA;;ADoGrC;EADF;IAEI,0BAA0B,EAE7B,EAAA;;AAEC;EADF;IAEI,2BAA2B,EAE9B,EAAA;;AAEC;EADF;IAEI,iCAAiC,EAEpC,EAAA;;AAED;EC9GE;IACE,yBAAyB,EAC1B,EAAA;;ADgHH;EClHE;IACE,yBAAyB,EAC1B,EAAA;;ADoHH;ECtHE;IACE,yBAAyB,EAC1B,EAAA;;ADwHH;EC1HE;IACE,yBAAyB,EAC1B,EAAA;;AAFD;EACE,yBAAyB,EAC1B;;ADqIH;ECjJE;IACE,0BAA0B,EAC3B;EACI;IAAH,0BAA0B,EAAI;EAC9B;IAAA,8BAA8B,EAAI;EACpC;;IAAE,+BAA+B,EAAI,EAAA;;AD+IvC;EACE,yBAAyB,EAK1B;EAHC;IAHF;MAII,0BAA0B,EAE7B,EAAA;;AACD;EACE,yBAAyB,EAK1B;EAHC;IAHF;MAII,2BAA2B,EAE9B,EAAA;;AACD;EACE,yBAAyB,EAK1B;EAHC;IAHF;MAII,iCAAiC,EAEpC,EAAA;;AAED;EChKE;IACE,yBAAyB,EAC1B,EAAA;;AClBH;;;GAGG;ACHH;gCACgC;AAEhC;EACE,2BAA2B;EAC3B,qDAAQ;EACR,kXAI4F;EAE5F,oBAAoB;EACpB,mBAAmB,EAAA;;ACVrB;EACE,sBAAsB;EACtB,8CAAoF;EACpF,mBAAmB;EACnB,qBAAqB;EACrB,oCAAoC;EACpC,mCAAmC,EAEpC;;ACRD,8DAA8D;AAC9D;EACE,0BAAe;EACf,oBAAiB;EACjB,qBAAqB,EACtB;;AACD;EAAE,eAAe,EAAI;;AACrB;EAAE,eAAe,EAAI;;AACrB;EAAE,eAAe,EAAI;;AACrB;EAAE,eAAe,EAAI;;ACVrB;EACE,sBAAY;EACZ,mBAAmB,EACpB;;ACFD;EACE,gBAAgB;EAChB,4BCMyB;EDLzB,sBAAsB,EAEvB;EALD;IAIS,mBAAmB,EAAI;;AAEhC;EACE,mBAAmB;EACnB,sBCAyB;EDCzB,sBCDyB;EDEzB,oBAAS;EACT,mBAAmB,EAIpB;EATD;IAOI,sBAAO,EACR;;AEdH;EACE,0BAA0B;EAC1B,0BDIwB;ECHxB,oBAAoB,EACrB;;AAED;EAAE,YAAY,EAAI;;AAClB;EAAE,aAAa,EAAI;;AAEnB;EACI,mBAAmB,EAAI;;AAD3B;EAEI,kBAAkB,EAAI;;AAG1B,4BAA4B;AAC5B;EAAc,aAAa,EAAI;;AAC/B;EAAa,YAAY,EAAI;;AAE7B;EACgB,mBAAmB,EAAI;;AADvC;EAEiB,kBAAkB,EAAI;;ACpBvC;EAEU,sCAAsC,EAC/C;;AAED;EAEU,wCAAoC,EAC7C;;AAaD;EACE;IAEU,wBAAiB,EAAA;EAE3B;IAEU,0BAAiB,EAAA,EAAA;;AC5B7B;ECWE,uEAAiF;EAGzE,yBAAiB,EDda;;AACxC;ECUE,uEAAiF;EAGzE,0BAAiB,EDba;;AACxC;ECSE,uEAAiF;EAGzE,0BAAiB,EDZa;;AAExC;ECcE,iFAA2F;EAGnF,wBAAgB,EDjBW;;AACrC;ECaE,iFAA2F;EAGnF,wBAAgB,EDhBW;;AAK/B;;;;;EACJ,qBAAa;EAAb,aAAa,EACd;;AEZD;EACE,mBAAmB;EACnB,sBAAsB;EACtB,WAAW;EACX,YAAY;EACZ,iBAAiB;EACjB,uBAAuB,EACxB;;AACD;EACE,mBAAmB;EACnB,QAAQ;EACR,YAAY;EACZ,mBAAmB,EACpB;;AACD;EAAE,qBAAqB,EAAI;;AAC3B;EAAE,eAAe,EAAI;;AACrB;EAAE,YLTwB,EKSF;;ACnBxB;oEACoE;AAE3D;EAAP,aNyTa,EAAO;;AMxTb;EAAP,aNmca,EAAO;;AMlcZ;EAAR,aN8hBc,EAAO;;AM7hBvB;EAAE,aN2NkB,EAAO;;AM1NlB;EAAP,aNsVa,EAAO;;AMrVtB;EAAE,aNolBY,EAAO;;AMnlBrB;EAAE,aNwlBc,EAAO;;AMvlBf;EAAN,aN4qBY,EAAO;;AM3qBrB;EAAE,aNqQY,EAAO;;AMpQrB;EAAE,aNunBgB,EAAO;;AMtnBzB;EAAE,aNqnBU,EAAO;;AMpnBR;EAAT,aNsnBe,EAAO;;AMrnBxB;EAAE,aNiIa,EAAO;;AMhItB;;;EAAE,aN4nBa,EAAO;;AM3nBtB;EAAE,aNohBmB,EAAO;;AMnhB5B;EAAE,aNkhBoB,EAAO;;AMjhBhB;EAAX,aNqeiB,EAAO;;AMpe1B;EAAE,aNsiBc,EAAO;;AMriBf;;EAAN,aN2JW,EAAO;;AM1JT;EAAT,aNqoBe,EAAO;;AMpoBxB;EAAE,aN0UY,EAAO;;AMzUX;EAAR,aN4Oc,EAAO;;AM3OvB;EAAE,aN2Ie,EAAO;;AM1IxB;EAAE,aN2fY,EAAO;;AM1frB;EAAE,aN2LgB,EAAO;;AM1LzB;EAAE,aNW2B,EAAO;;AMVpC;EAAE,aNayB,EAAO;;AMZlC;EAAE,aNmVa,EAAO;;AMlVL;EAAf,aNmdqB,EAAO;;AMld9B;;EAAE,aN+ec,EAAO;;AM9evB;EAAE,aNyee,EAAO;;AMxexB;EAAE,aNsXgB,EAAO;;AMrXjB;EAAN,aNyXY,EAAO;;AMxXb;EAAN,aNkPY,EAAO;;AMjPP;EAAZ,aNuTkB,EAAO;;AMtT3B;EAAE,aNmqBkB,EAAO;;AMlqBZ;EAAb,aNiqBmB,EAAO;;AMhqB5B;EAAE,aNkqBiB,EAAO;;AMjqB1B;EAAE,aNodc,EAAO;;AMndvB;EAAE,aNuBe,EAAO;;AMtBxB;EAAE,aN8kBW,EAAO;;AM7kBpB;EAAE,aN8kBY,EAAO;;AM7kBrB;EAAE,aNqDY,EAAO;;AMpDT;EAAV,aNqDgB,EAAO;;AMpDzB;EAAE,aN0ca,EAAO;;AMzcZ;EAAR,aNuEc,EAAO;;AMtEvB;EAAE,aNgPY,EAAO;;AM/OrB;EAAE,aN6CY,EAAO;;AM5CrB;EAAE,aNyUc,EAAO;;AMxUR;EAAb,aN4kBmB,EAAO;;AM3kB5B;EAAE,aN4kBkB,EAAO;;AM3kB3B;EAAE,aNpCkB,EAAO;;AMqCX;EAAd,aNvCoB,EAAO;;AMwC7B;EAAE,aNrCmB,EAAO;;AMsCX;EAAf,aNxCqB,EAAO;;AMyCtB;EAAN,aN6VY,EAAO;;AM5VX;;EAAR,aNwZe,EAAO;;AMvZd;EAAR,aNsTc,EAAO;;AMrTP;EAAd,aNqoBoB,EAAO;;AMpoBpB;;;EAAP,aNyaiB,EAAO;;AMxa1B;EAAE,aNiac,EAAO;;AMhaT;EAAZ,aNyWkB,EAAO;;AMxW3B;EAAE,aNnDc,EAAO;;AMoDvB;EAAE,aN6kBY,EAAO;;AM5kBrB;;EAAE,aN+ZuB,EAAO;;AM9Zd;EAAhB,aN0esB,EAAO;;AMzeb;EAAhB,aN+EsB,EAAO;;AM9ErB;EAAR,aNrBc,EAAO;;AMsBvB;EAAE,aN6hBqB,EAAO;;AM5hB9B;EAAE,aN+KqB,EAAO;;AM9K9B;EAAE,aNdgB,EAAO;;AMezB;EAAE,aNsaY,EAAO;;AMraZ;EAAP,aNgZa,EAAO;;AM/Yd;EAAN,aN6hBY,EAAO;;AM5hBV;EAAT,aNyNe,EAAO;;AMxNxB;EAAE,aN0KoB,EAAO;;AMzKb;EAAd,aNshBoB,EAAO;;AMrhB7B;EAAE,aN4Ia,EAAO;;AM3ItB;EAAE,aNyEoB,EAAO;;AMxE7B;EAAE,aNyEqB,EAAO;;AMxE9B;EAAE,aNkamB,EAAO;;AMja5B;EAAE,aNuWoB,EAAO;;AMtW7B;EAAE,aNwjBoB,EAAO;;AMvjBb;EAAd,aN2DoB,EAAO;;AM1D7B;EAAE,aNwauB,EAAO;;AMvahC;EAAE,aN6RmB,EAAO;;AM5Rd;EAAZ,aN0GkB,EAAO;;AMzGT;EAAhB,aNojBsB,EAAO;;AMnjBb;EAAhB,aNuDsB,EAAO;;AMtD/B;EAAE,aN/BW,EAAO;;AMgCN;EAAZ,aN/CkB,EAAO;;AMgD3B;EAAE,aN/CmB,EAAO;;AMgD5B;EAAE,aN/CgB,EAAO;;AMgDzB;EAAE,aNnDkB,EAAO;;AMoD3B;;EAAE,aNyca,EAAO;;AMxctB;EAAE,aNyIc,EAAO;;AMxIX;EAAV,aNuFgB,EAAO;;AMtFzB;EAAE,aNgZY,EAAO;;AM/YrB;EAAE,aNqVa,EAAO;;AMpVtB;EAAE,aN/CgB,EAAO;;AMgDH;EAApB,aNkI0B,EAAO;;AMjInC;EAAE,aN4MY,EAAO;;AM3MrB;EAAE,aN8RY,EAAO;;AM7Rb;EAAN,aNwKY,EAAO;;AMvKd;EAAL,aNoIW,EAAO;;AMnIP;EAAX,aNoIiB,EAAO;;AMnI1B;;EAAE,aN6H4B,EAAO;;AM5H5B;EAAP,aNiYa,EAAO;;AMhYV;EAAV,aNEgB,EAAO;;AMDzB;EAAE,aNoZc,EAAO;;AMnZvB;EAAE,aNkEe,EAAO;;AMjExB;EAAE,aNiTc,EAAO;;AMhTvB;EAAE,aNyCkB,EAAO;;AMxCX;EAAd,aNqCoB,EAAO;;AMpClB;EAAT,aN8Ze,EAAO;;AM7ZP;EAAf,aNgcqB,EAAO;;AM/b9B;EAAE,aNsKc,EAAO;;AMrKR;EAAb,aNuKmB,EAAO;;AMtK5B;EAAE,aNrEgB,EAAO;;AMsEzB;EAAE,aNvEgB,EAAO;;AMwEV;;EAAb,aN5DiB,EAAO;;AM6DR;EAAhB,aN6iBsB,EAAO;;AM5iB/B;EAAE,aNyHuB,EAAO;;AMxHhC;EAAE,aNNoB,EAAO;;AMO7B;EAAE,aNiQW,EAAO;;AMhQX;;EAAP,aNiDY,EAAO;;AMhDrB;EAAE,aNsDgB,EAAO;;AMrDzB;EAAE,aNugBmB,EAAO;;AMtgB5B;EAAE,aNqgBqB,EAAO;;AMpgB9B;EAAE,aNydiB,EAAO;;AMxd1B;EAAE,aNyNe,EAAO;;AMxNZ;EAAV,aNmbgB,EAAO;;AMlbzB;EAAE,aN8QuB,EAAO;;AM7QlB;EAAZ,aN8fkB,EAAO;;AM7fV;EAAf,aNoGqB,EAAO;;AMnGnB;EAAT,aN6ae,EAAO;;AM5axB;EAAE,aNohBc,EAAO;;AMnhBvB;EAAE,aN6KqB,EAAO;;AM5KpB;EAAR,aNsiBc,EAAO;;AMriBvB;EAAE,aN4Pe,EAAO;;AM3PxB;EAAE,aNqVa,EAAO;;AMpVtB;EAAE,aNycgB,EAAO;;AMxczB;EAAE,aN7CkB,EAAO;;AM8C3B;EAAE,aNmVoB,EAAO;;AMlV7B;EAAE,aNqhBe,EAAO;;AMphBV;;EAAZ,aN+FgB,EAAO;;AM9Ff;EAAR,aNkKc,EAAO;;AMjKvB;EAAE,aN0hBc,EAAO;;AMzhBR;EAAb,aNyCmB,EAAO;;AMxC5B;;EAAE,aNkYW,EAAO;;AMjYpB;EAAE,aNiMa,EAAO;;AMhMV;EAAV,aN/CgB,EAAO;;AMgDzB;EAAE,aN1EY,EAAO;;AM2ErB;EAAE,aNfmB,EAAO;;AMgB5B;EAAE,aNkLoB,EAAO;;AMjL7B;EAAE,aNgLmB,EAAO;;AM/Kf;EAAX,aNiLiB,EAAO;;AMhL1B;EAAE,aN6KmB,EAAO;;AM5K5B;EAAE,aN3HyB,EAAO;;AM4HZ;EAApB,aNvH0B,EAAO;;AMwHnC;EAAE,aNvHuB,EAAO;;AMwHhC;EAAE,aN/HyB,EAAO;;AMgIlC;EAAE,aN0Ja,EAAO;;AMzJZ;EAAR,aNmjBc,EAAO;;AMljBvB;EAAE,aNoda,EAAO;;AMndZ;EAAR,aNyGc,EAAO;;AMxGvB;EAAE,aNnEiB,EAAO;;AMoE1B;EAAE,aNxHkB,EAAO;;AMyH3B;;EAAE,aNghBa,EAAO;;AM/gBtB;;EAAE,aNuOY,EAAO;;AMtOrB;EAAE,aNNa,EAAO;;AMOtB;EAAE,aN4Ga,EAAO;;AM3Gf;;EAAL,aNkXgB,EAAO;;AMjXjB;;EAAN,aN+Fe,EAAO;;AM9FX;EAAX,aNuSiB,EAAO;;AMtS1B;;EAAE,aN0GgB,EAAO;;AMzGzB;EAAE,aNqac,EAAO;;AMpaZ;;;EAAT,aNlHY,EAAO;;AMmHrB;EAAE,aNqOe,EAAO;;AMpOxB;EAAE,aNmOe,EAAO;;AMlOxB;EAAE,aNsbqB,EAAO;;AMrbjB;EAAX,aNmfiB,EAAO;;AMlf1B;EAAE,aN6ba,EAAO;;AM5btB;EAAE,aNwOa,EAAO;;AMvOb;EAAP,aNqea,EAAO;;AMpetB;EAAE,aNgTiB,EAAO;;AM/SN;EAAlB,aNiTwB,EAAO;;AMhTX;EAApB,aNsI0B,EAAO;;AMrIpB;EAAb,aNkImB,EAAO;;AMjI5B;EAAE,aNkQa,EAAO;;AMjQR;EAAZ,aNvEkB,EAAO;;AMwE3B;EAAE,aNjEgB,EAAO;;AMkEzB;EAAE,aNxEkB,EAAO;;AMyEZ;EAAb,aNxEmB,EAAO;;AMyE5B;EAAE,aNnBe,EAAO;;AMoBxB;;EAAE,aNkYY,EAAO;;AMjYR;;EAAX,aNuYiB,EAAO;;AMtYf;;EAAT,aNqYgB,EAAO;;AMpYzB;EAAE,aNuBgB,EAAO;;AMtBzB;EAAE,aN0MgB,EAAO;;AMzMV;;EAAb,aNieY,EAAO;;AMheZ;;EAAP,aN+Fa,EAAO;;AM9FtB;;EAAE,aN2akB,EAAO;;AM1ad;EAAX,aN1BiB,EAAO;;AM2BZ;EAAZ,aNvBkB,EAAO;;AMwBlB;;EAAP,aNhHY,EAAO;;AMiHrB;EAAE,aN4We,EAAO;;AM3WxB;EAAE,aNwdgB,EAAO;;AMvdzB;;EAAE,aNhDiB,EAAO;;AMiD1B;EAAE,aN6LmB,EAAO;;AM5L5B;EAAE,aNkBgB,EAAO;;AMjBzB;EAAE,aN9CsB,EAAO;;AM+Cf;EAAd,aN9CoB,EAAO;;AM+C7B;EAAE,aN+de,EAAO;;AM9dT;EAAb,aN6YmB,EAAO;;AM5Y5B;EAAE,aNwZgB,EAAO;;AMvZzB;EAAE,aNzIc,EAAO;;AM0IvB;EAAE,aN7Cc,EAAO;;AM8CvB;EAAE,aNrBe,EAAO;;AMsBxB;EAAE,aN6CmB,EAAO;;AM5C5B;EAAE,aNrHkB,EAAO;;AMsHb;EAAZ,aNkIkB,EAAO;;AMjI3B;EAAE,aN5MiB,EAAO;;AM6M1B;EAAE,aNmNc,EAAO;;AMlNvB;EAAE,aNyBmB,EAAO;;AMxB5B;EAAE,aNtJY,EAAO;;AMuJT;EAAV,aNoGgB,EAAO;;AMnGzB;EAAE,aNgRmB,EAAO;;AM/QP;EAAnB,aN5MyB,EAAO;;AM6MlC;EAAE,aN5M0B,EAAO;;AM6MnC;EAAE,aN5MuB,EAAO;;AM6MhC;EAAE,aNhNyB,EAAO;;AMiNlC;EAAE,aN5MkB,EAAO;;AM6M3B;EAAE,aN5MmB,EAAO;;AM6M5B;EAAE,aN5MgB,EAAO;;AM6MX;EAAZ,aNhNkB,EAAO;;AMiN3B;EAAE,aN/Be,EAAO;;AMgCd;EAAR,aNoJc,EAAO;;AMnJb;EAAR,aNsYc,EAAO;;AMrYP;;EAAd,aN6Mc,EAAO;;AM5MvB;EAAE,aNnFgB,EAAO;;AMoFzB;EAAE,aN6QkB,EAAO;;AM5Q3B;EAAE,aN6QmB,EAAO;;AM5QjB;EAAT,aN+Ve,EAAO;;AM9VxB;EAAE,aNxFc,EAAO;;AMyFvB;;EAAE,aNwRa,EAAO;;AMvRR;EAAZ,aN+DkB,EAAO;;AM9D3B;EAAE,aNoCgB,EAAO;;AMnCzB;EAAE,aNqCqB,EAAO;;AMpCnB;EAAT,aNuUe,EAAO;;AMtUxB;EAAE,aN2Ce,EAAO;;AM1CxB;EAAE,aNwLa,EAAO;;AMvLtB;EAAE,aN2Ce,EAAO;;AM1CV;EAAZ,aNiIkB,EAAO;;AMhI3B;EAAE,aNuBc,EAAO;;AMtBL;EAAhB,aNqBsB,EAAO;;AMpB/B;EAAE,aN4XgB,EAAO;;AM3XzB;EAAE,aNzFY,EAAO;;AM0FrB;;EAAE,aN4QiB,EAAO;;AM3Q1B;;;EAAE,aN0VmB,EAAO;;AMzVV;EAAhB,aNoJsB,EAAO;;AMnJ/B;EAAE,aNtEY,EAAO;;AMuErB;EAAE,aN7FiB,EAAO;;AM8F1B;;EAAE,aN3HoB,EAAO;;AM4H7B;EAAE,aNmPgB,EAAO;;AMlPzB;EAAE,aNwGY,EAAO;;AMvGN;EAAb,aNrCmB,EAAO;;AMsC5B;EAAE,aNsWmB,EAAO;;AMrWf;EAAX,aNiWiB,EAAO;;AMhWhB;EAAR,aN5Cc,EAAO;;AM6CP;EAAd,aN0OoB,EAAO;;AMzO7B;EAAE,aNsKkB,EAAO;;AMrKP;EAAlB,aNsKwB,EAAO;;AMrKjC;EAAE,aN6Rc,EAAO;;AM5RvB;EAAE,aNjKkB,EAAO;;AMkKN;EAAnB,aNHyB,EAAO;;AMIxB;EAAR,aN+Pc,EAAO;;AM9Pb;EAAR,aN0Jc,EAAO;;AMzJvB;EAAE,aNnI2B,EAAO;;AMoIpC;EAAE,aNnI4B,EAAO;;AMoIhB;EAAnB,aNnIyB,EAAO;;AMoIlC;EAAE,aNvI2B,EAAO;;AMwI3B;EAAP,aNgFa,EAAO;;AM/Ed;EAAN,aN1FY,EAAO;;AM2FX;EAAR,aNxQc,EAAO;;AMyQvB;EAAE,aNiZkB,EAAO;;AMhZf;EAAV,aNrLgB,EAAO;;AMsLzB;EAAE,aNrEkB,EAAO;;AMsE3B;EAAE,aNrEkB,EAAO;;AMsEb;EAAZ,aNuPkB,EAAO;;AMtP3B;EAAE,aN4MmB,EAAO;;AM3M5B;EAAE,aNqWc,EAAO;;AMpWvB;EAAE,aNqJoB,EAAO;;AMpJX;EAAhB,aNqJsB,EAAO;;AMpJ/B;EAAE,aNmGgB,EAAO;;AMlGzB;EAAE,aNiGkB,EAAO;;AMhGX;EAAd,aNxJoB,EAAO;;AMyJZ;EAAf,aNqLqB,EAAO;;AMpLN;EAAtB,aN/D4B,EAAO;;AMgErC;EAAE,aN+PoB,EAAO;;AM9PlB;EAAT,aNtHe,EAAO;;AMuHxB;;EAAE,aNnL2B,EAAO;;AMoLpC;;EAAE,aNjLyB,EAAO;;AMkLlC;;EAAE,aNnL4B,EAAO;;AMoLrC;;EAAE,aN9EW,EAAO;;AM+EpB;EAAE,aNRW,EAAO;;AMSpB;;EAAE,aNgYW,EAAO;;AM/XX;;EAAP,aNgEW,EAAO;;AM/Db;;;;EAAL,aNuEW,EAAO;;AMtEX;;;EAAP,aNoOW,EAAO;;AMnOpB;;EAAE,aNyEW,EAAO;;AMxEpB;;EAAE,aNnNW,EAAO;;AMoNpB;EAAE,aN9DY,EAAO;;AM+DR;EAAX,aNlDiB,EAAO;;AMmD1B;EAAE,aN4QsB,EAAO;;AM3Q/B;EAAE,aN4QuB,EAAO;;AM3Qb;EAAjB,aN4QuB,EAAO;;AM3QhC;EAAE,aN4QwB,EAAO;;AM3Qb;EAAlB,aN+QwB,EAAO;;AM9QZ;EAAnB,aN+QyB,EAAO;;AM9QrB;EAAX,aNuUiB,EAAO;;AMtU1B;EAAE,aNmUmB,EAAO;;AMlUV;EAAhB,aNiasB,EAAO;;AMha/B;EAAE,aN8Ze,EAAO;;AM7ZxB;EAAE,aNmZY,EAAO;;AMlZN;EAAb,aNmZmB,EAAO;;AMlZ5B;EAAE,aN4ZoB,EAAO;;AM3Z7B;EAAE,aNlHe,EAAO;;AMmHxB;EAAE,aNgRsB,EAAO;;AM/QlB;EAAX,aN2CiB,EAAO;;AM1C1B;EAAE,aNlDc,EAAO;;AMmDhB;EAAL,aN/TW,EAAO;;AMgUpB;EAAE,aNvPiB,EAAO;;AMwP1B;EAAE,aNvPwB,EAAO;;AMwPjC;EAAE,aNkVc,EAAO;;AMjVvB;EAAE,aNkVqB,EAAO;;AMjV9B;EAAE,aN0EuB,EAAO;;AMzEhC;EAAE,aN4EqB,EAAO;;AM3EX;EAAjB,aNyEuB,EAAO;;AMxEhC;EAAE,aNyEwB,EAAO;;AMxExB;EAAP,aNrTa,EAAO;;AMsTX;EAAT,aN4Xe,EAAO;;AM3Xb;EAAT,aNjUe,EAAO;;AMkUxB;EAAE,aN4Da,EAAO;;AM3DtB;EAAE,aNpIgB,EAAO;;AMqIhB;EAAP,aNmOa,EAAO;;AMlOtB;EAAE,aNtDkB,EAAO;;AMuD3B;EAAE,aN+Tc,EAAO;;AM9TvB;EAAE,aNpGc,EAAO;;AMqGvB;EAAE,aNuEY,EAAO;;AMtErB;;EAAE,aN1BgB,EAAO;;AM2BzB;EAAE,aNiRa,EAAO;;AMhRtB;EAAE,aNgGc,EAAO;;AM/FZ;EAAT,aNjUe,EAAO;;AMkUxB;EAAE,aN7PW,EAAO;;AM8Pd;EAAJ,aNgWU,EAAO;;AM/VnB;EAAE,aNsWa,EAAO;;AMrWtB;EAAE,aNqKc,EAAO;;AMpKvB;EAAE,aN2GiB,EAAO;;AM1GR;EAAhB,aNgPsB,EAAO;;AM/O/B;EAAE,aNlU4B,EAAO;;AMmUrC;EAAE,aNpU2B,EAAO;;AMqUrB;;EAAb,aN/O2B,EAAO;;AMgPpB;EAAd,aNzJoB,EAAO;;AM0J7B;EAAE,aNiWkB,EAAO;;AMhW3B;EAAE,aNoVoB,EAAO;;AMnVb;;EAAd,aNgTW,EAAO;;AM/SpB;EAAE,aNqIqB,EAAO;;AMpI9B;EAAE,aNiOqB,EAAO;;AMhOrB;EAAP,aN4Ma,EAAO;;AM3MH;EAAjB,aNnJuB,EAAO;;AMoJnB;EAAX,aNgWiB,EAAO;;AM/V1B;EAAE,aNyFc,EAAO;;AMxFR;;;EAAb,aNsTkB,EAAO;;AMrT3B;;EAAE,aNnDsB,EAAO;;AMoD/B;EAAE,aNoWa,EAAO;;AMnWZ;EAAR,aN3Dc,EAAO;;AM4DvB;EAAE,aN2Ic,EAAO;;AM1IvB;EAAE,aN4IqB,EAAO;;AM3I9B;EAAE,aNiP0B,EAAO;;AMhPnC;EAAE,aN+OmB,EAAO;;AM9Of;EAAX,aNjLiB,EAAO;;AMkL1B;EAAE,aN9KY,EAAO;;AM+KrB;EAAE,aNyGqB,EAAO;;AMxG9B;EAAE,aNuGsB,EAAO;;AMtG/B;EAAE,aN3Kc,EAAO;;AM4KvB;EAAE,aNRc,EAAO;;AMSvB;EAAE,aNHgB,EAAO;;AMIlB;EAAL,aN9IW,EAAO;;AM+IpB;EAAE,aN/RgB,EAAO;;AMgShB;EAAP,aN5Oa,EAAO;;AM6OtB;EAAE,aNoFW,EAAO;;AMnFpB;EAAE,aN2Ma,EAAO;;AM1MtB;EAAE,aNvMY,EAAO;;AMwMZ;EAAP,aNvMa,EAAO;;AMwMtB;EAAE,aN/Te,EAAO;;AMgUxB;EAAE,aN/TsB,EAAO;;AMgUtB;EAAP,aNkNa,EAAO;;AMjNtB;EAAE,aNkNoB,EAAO;;AMjN7B;EAAE,aNoHe,EAAO;;AMnHxB;;EAAE,aN1RW,EAAO;;AM2Rb;;EAAL,aNwOY,EAAO;;AMvOrB;EAAE,aNuQY,EAAO;;AMtQrB;EAAE,aNiMe,EAAO;;AMhMV;EAAZ,aNtMkB,EAAO;;AMuMb;EAAZ,aN2LkB,EAAO;;AM1Lf;EAAV,aN9MgB,EAAO;;AM+MzB;EAAE,aNrJkB,EAAO;;AMsJZ;EAAb,aN9ImB,EAAO;;AM+I5B;EAAE,aN3JoB,EAAO;;AM4J7B;EAAE,aNrJyB,EAAO;;AMsJlC;;;EAAE,aN5JoB,EAAO;;AM6Jf;;EAAZ,aNjKsB,EAAO;;AMkK/B;;EAAE,aNjKoB,EAAO;;AMkK7B;;EAAE,aNrJoB,EAAO;;AMsJ7B;EAAE,aNlKmB,EAAO;;AMmKpB;EAAN,aNkSY,EAAO;;AMjSrB;EAAE,aNvPe,EAAO;;AMwPZ;EAAV,aNtCgB,EAAO;;AMuCZ;;;;;EAAX,aNvBiB,EAAO;;AMwBR;EAAhB,aNtQsB,EAAO;;AMuQ/B;;;EAAE,aN6Fa,EAAO;;AM5FtB;;EAAE,aN1Mc,EAAO;;AM2MT;EAAZ,aNpHkB,EAAO;;AMqH3B;EAAE,aNtHW,EAAO;;AMuHpB;;;EAAE,aNlGmB,EAAO;;AMmG5B;EAAE,aNiNqB,EAAO;;AMhNxB;EAAJ,aN8EU,EAAO;;AM7EnB;;EAAE,aN+Rc,EAAO;;AM9RvB;;EAAE,aNsCmB,EAAO;;AMrC5B;;EAAE,aNsCqB,EAAO;;AMrC9B;EAAE,aNlFe,EAAO;;AMmFT;EAAb,aNjRmB,EAAO;;AMkR5B;EAAE,aNzFc,EAAO;;AM0FvB;EAAE,aNoCiB,EAAO;;AMnCf;EAAT,aN2Ie,EAAO;;AM1IxB;EAAE,aNoHiB,EAAO;;AMnHN;EAAlB,aNoHwB,EAAO;;AMnHzB;EAAN,aNxVY,EAAO;;AMyVJ;;EAAf,aNjJgB,EAAO;;AMkJlB;EAAL,aNuOW,EAAO;;AMtON;EAAZ,aNtWkB,EAAO;;AMuWnB;EAAN,aNsDY,EAAO;;AMrDrB;EAAE,aNoIkB,EAAO;;AMnI3B;EAAE,aNwOc,EAAO;;AMvOf;EAAN,aNiSY,EAAO;;AMhSrB;EAAE,aNSmB,EAAO;;AMR5B;EAAE,aNgRY,EAAO;;AM/QrB;EAAE,aNnVkB,EAAO;;AMoV3B;EAAE,aN2Bc,EAAO;;AM1BvB;EAAE,aNhIqB,EAAO;;AMiI9B;EAAE,aN1Te,EAAO;;AM2TP;EAAf,aN9TqB,EAAO;;AM+T9B;EAAE,aNjUmB,EAAO;;AMkUjB;EAAT,aNpUe,EAAO;;AMqUX;EAAX,aNhUiB,EAAO;;AMiUb;EAAX,aNhUiB,EAAO;;AMiU1B;EAAE,aNzXkB,EAAO;;AM0X3B;EAAE,aNzXoB,EAAO;;AM0X7B;EAAE,aN4Ma,EAAO;;AM3MtB;EAAE,aNjRiB,EAAO;;AMkRpB;EAAJ,aNxZU,EAAO;;AMyZL;EAAZ,aNhOkB,EAAO;;AMiOZ;EAAb,aNGmB,EAAO;;AMF5B;EAAE,aN5XqB,EAAO;;AM6XhB;EAAZ,aNhbkB,EAAO;;AMib3B;EAAE,aNmBiB,EAAO;;AMlB1B;EAAE,aNpEkB,EAAO;;AMqE3B;EAAE,aNlFc,EAAO;;AMmFvB;EAAE,aNlFqB,EAAO;;AMmF9B;EAAE,aNyLkB,EAAO;;AMxL3B;EAAE,aNyLiB,EAAO;;AMxLf;EAAT,aNtYe,EAAO;;AMuYxB;EAAE,aN/WW,EAAO;;AMgXT;EAAT,aNlGe,EAAO;;AMmGxB;EAAE,aNrciB,EAAO;;AMsc1B;EAAE,aN3VU,EAAO;;AM4VnB;;;EAAE,aNjHW,EAAO;;AMkHR;EAAV,aN9CgB,EAAO;;AM+CzB;EAAE,aNpXkB,EAAO;;AMqX3B;EAAE,aNxSsB,EAAO;;AMySnB;EAAV,aN1RgB,EAAO;;AM2Rb;EAAV,aNhMgB,EAAO;;AMiMd;EAAT,aN9Fe,EAAO;;AM+FxB;EAAE,aN+Dc,EAAO;;AM9DvB;EAAE,aN2EoB,EAAO;;AM1E7B;EAAE,aNmFmB,EAAO;;AMlF5B;EAAE,aNoFgB,EAAO;;AMnFZ;EAAX,aNxWiB,EAAO;;AMyWP;EAAjB,aN1WuB,EAAO;;AM2WrB;EAAT,aN3Re,EAAO;;AM4RxB;EAAE,aNoEY,EAAO;;AMnEN;EAAb,aN0MmB,EAAO;;AMzM5B;EAAE,aN3CkB,EAAO;;AM4C3B;EAAE,aN2HmB,EAAO;;AM1H5B;EAAE,aNnJiB,EAAO;;AMoJ1B;EAAE,aNyMa,EAAO;;AMxMtB;EAAE,aNvEY,EAAO;;AMwErB;EAAE,aN9De,EAAO;;AM+DZ;;EAAV,aNkKmB,EAAO;;AMjKT;EAAjB,aNkKuB,EAAO;;AMjKhC;EAAE,aNqMoB,EAAO;;AMpM7B;EAAE,aN3EmB,EAAO;;AM4Ed;EAAZ,aNoMkB,EAAO;;AMnM3B;EAAE,aN5EmB,EAAO;;AM6EX;EAAf,aN3EqB,EAAO;;AM4Eb;EAAf,aN7EqB,EAAO;;AM8EpB;EAAR,aNrDc,EAAO;;AMsDvB;EAAE,aN/MkB,EAAO;;AMgNN;EAAnB,aN3QyB,EAAO;;AM4QlC;EAAE,aNpBmB,EAAO;;AMqB5B;EAAE,aN6MgB,EAAO;;AM5Mf;EAAR,aNsCc,EAAO;;AMrCvB;EAAE,aNoLiB,EAAO;;AMnL1B;EAAE,aNqLkB,EAAO;;AMpL3B;;EAAE,aNzbW,EAAO;;AM0bT;EAAT,aNwLe,EAAO;;AMvLf;EAAP,aN+Ia,EAAO;;AM9ItB;EAAE,aNwGc,EAAO;;AMvGvB;EAAE,aNtFc,EAAO;;AMuFjB;;EAAJ,aNiNoB,EAAO;;AMhNZ;EAAf,aN1DqB,EAAO;;AM2D9B;EAAE,aN9DgB,EAAO;;AM+DT;EAAd,aNlSoB,EAAO;;AMmS7B;;EAAE,aNtcoB,EAAO;;AMuc7B;;EAAE,aNpc8B,EAAO;;AMqcvC;;EAAE,aNvcoB,EAAO;;AMwchB;;EAAX,aNvcuB,EAAO;;AMwchC;;EAAE,aN3cqB,EAAO;;AM4c9B;EAAE,aN9EqB,EAAO;;AM+ElB;EAAV,aNvKgB,EAAO;;AMwKzB;EAAE,aN3EoB,EAAO;;AM4E7B;EAAE,aN3EsB,EAAO;;AM4E/B;EAAE,aN+EmB,EAAO;;AM9EX;EAAf,aN+EqB,EAAO;;AM9E9B;EAAE,aNlZc,EAAO;;AMmZvB;EAAE,aNrZsB,EAAO;;AMsZtB;EAAP,aNvXa,EAAO;;AMwXtB;EAAE,aNjeqB,EAAO;;AMkef;EAAb,aNpLmB,EAAO;;AMqLb;;EAAb,aNpLuB,EAAO;;AMqLhC;;EAAE,aNvLsB,EAAO;;AMwL/B;;EAAE,aNzLqB,EAAO;;AM0L9B;EAAE,aN9LiB,EAAO;;AM+LX;;EAAb,aN/MmB,EAAO;;AMgNb;;EAAb,aNnNoB,EAAO;;AMoNV;EAAjB,aNhNuB,EAAO;;AMiNf;EAAf,aN1NqB,EAAO;;AM2Nd;EAAd,aNjNoB,EAAO;;AMkN7B;EAAE,aNrNsB,EAAO;;AMsN/B;EAAE,aNvNoB,EAAO;;AMwNhB;EAAX,aN4GiB,EAAO;;AM3G1B;EAAE,aNhCkB,EAAO;;AMiC3B;EAAE,aN7WwB,EAAO;;AM8WjC;EAAE,aN3PU,EAAO;;AM4PN;EAAX,aN3PiB,EAAO;;AM4P1B;EAAE,aN+GmB,EAAO;;AM9G5B;EAAE,aNnGqB,EAAO;;AMoGN;EAAtB,aNnG4B,EAAO;;AMoGrC;EAAE,aNjQkB,EAAO;;AMkQZ;EAAb,aNgKmB,EAAO;;AM/JlB;EAAR,aNrBc,EAAO;;AMsBb;EAAR,aNvZc,EAAO;;AMwZvB;EAAE,aNlSe,EAAO;;AMmSf;EAAP,aNtGa,EAAO;;AMuGtB;EAAE,aN/LyB,EAAO;;AMgMlC;;EAAE,aNoEkB,EAAO;;AMnE3B;EAAE,aN9Xc,EAAO;;AM+Xd;EAAP,aN9iBa,EAAO;;AM+iBtB;EAAE,aNxiBc,EAAO;;AMyiBvB;EAAE,aNxcuB,EAAO;;AMychC;EAAE,aN3cwB,EAAO;;AM4cjC;EAAE,aNzcwB,EAAO;;AM0cjC;EAAE,aN9cwB,EAAO;;AM+cjC;EAAE,aN9MgB,EAAO;;AM+Md;EAAT,aNvJe,EAAO;;AMwJxB;EAAE,aNvJiB,EAAO;;AMwJjB;EAAP,aN1Ja,EAAO;;AM2Jf;EAAL,aN7JW,EAAO;;AM8JN;EAAZ,aNjZkB,EAAO;;AMkZ3B;EAAE,aNjZoB,EAAO;;AMkZ7B;EAAE,aN5Na,EAAO;;AM6NtB;EAAE,aN0Ha,EAAO;;AMzHtB;EAAE,aN/eiB,EAAO;;AMgfb;EAAX,aNxSiB,EAAO;;AMySV;EAAd,aNpEoB,EAAO;;AMqErB;EAAN,aNnXY,EAAO;;AMoXrB;EAAE,aN7YuB,EAAO;;AM8YhC;EAAE,aNjagB,EAAO;;AMkajB;EAAN,aN/IY,EAAO;;AMgJrB;EAAE,aN7SoB,EAAO;;AM8StB;EAAL,aNkGW,EAAO;;AMjGJ;EAAd,aNzFoB,EAAO;;AM0FjB;EAAV,aNtJgB,EAAO;;AMuJzB;EAAE,aNnDc,EAAO;;AMoDvB;EAAE,aN1HoB,EAAO;;AM2H7B;EAAE,aN1HsB,EAAO;;AM2H/B;EAAE,aNkBmB,EAAO;;AMjBX;EAAf,aNkBqB,EAAO;;AMjBd;EAAd,aNtCoB,EAAO;;AMuCV;EAAjB,aNtCuB,EAAO;;AMuChC;EAAE,aNnQe,EAAO;;AMoQX;EAAX,aNhgBiB,EAAO;;AMigB1B;EAAE,aNhgBmB,EAAO;;AMigB5B;EAAE,aN5He,EAAO;;AM6HxB;EAAE,aNtSc,EAAO;;AMuSvB;EAAE,aNsHkB,EAAO;;AMrH3B;EAAE,aNsHe,EAAO;;AMrHxB;EAAE,aNhYc,EAAO;;AMiYH;EAAlB,aNyEwB,EAAO;;AMxEjC;EAAE,aN4GsB,EAAO;;AM3GV;EAAnB,aNtGyB,EAAO;;AMuGlC;EAAE,aN3gBa,EAAO;;AM4gBtB;EAAE,aN/iByB,EAAO;;AMgjBlC;EAAE,aN8F4B,EAAO;;AM7F1B;EAAT,aNrgBe,EAAO;;AMsgBxB;EAAE,aNrjBmC,EAAO;;AMsjB5C;;EAAE,aNtlB2C,EAAO;;AMulBpD;;;EAAE,aNjaY,EAAO;;AMkarB;EAAE,aNjTa,EAAO;;AMkTtB;EAAE,aNjTe,EAAO;;AMkTb;;EAAT,aNxDqB,EAAO;;AMyDhB;EAAZ,aNhNkB,EAAO;;AMiN3B;EAAE,aN8Ec,EAAO;;AM7EvB;EAAE,aN8EqB,EAAO;;AM7E9B;EAAE,aNhDgB,EAAO;;AMiDzB;EAAE,aNhDsB,EAAO;;AMiD/B;EAAE,aNhDuB,EAAO;;AMiDhC;EAAE,aN9IkB,EAAO;;AM+IZ;EAAb,aNnWmB,EAAO;;AMoW5B;EAAE,aN0Ga,EAAO;;AMzGT;EAAX,aNWiB,EAAO;;AMVJ;;EAApB,aNxT4B,EAAO;;AMyTrC;;EAAE,aN1VoB,EAAO;;AO/R7B;EH8BE,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,uBAAU;EACV,UAAU,EGrCqB;;AACjC;EHgDI,iBAAiB;EACjB,YAAY;EACZ,aAAa;EACb,UAAU;EACV,kBAAkB;EAClB,WAAW,EACZ;;AI1DH;;;;GAIG;AAaH;EACI,iBAAiB,EA8TpB;EA/TD;IAIQ,cAAc;IACd,aAAa;IACb,YAAY,EAuEf;IApEO;MATZ;QAUgB,YAAY,EAUnB,EAAA;IAPG;MAbZ;QAcgB,YAAY,EAMnB,EAAA;IAHG;MAjBZ;QAkBgB,YAAY,EAEnB,EAAA;IApBT;MAuBY,YAAY;MACZ,sBAAsB;MACtB,mBAAmB,EACtB;IA1BT;MA8BgB,mCAAmC;MACnC,oCAAoC;MACpC,8BArC+B;MAsC/B,wCArCoC;MAsCpC,UAAU;MACV,UAAU,EACb;IApCb;MAuCgB,mCAAmC;MACnC,oCAAoC;MACpC,+BA5C8B;MA6C9B,UAAU;MACV,UAAU,EACb;IA5Cb;MAiDgB,mCAAmC;MACnC,oCAAoC;MACpC,2BAxD+B;MAyD/B,qCAxDoC;MAyDpC,aAAa;MACb,UAAU,EACb;IAvDb;MA0DgB,mCAAmC;MACnC,oCAAoC;MACpC,4BA/D8B;MAgE9B,aAAa;MACb,UAAU,EACb;IA/Db;MAoEgB,WAAW;MACX,WAAW,EACd;IAtEb;MAyEgB,WAAW;MACX,WAAW,EACd;EA3Eb;IAgFQ,UAAU,EACb;EAjFL;IAoFQ,eAAe,EAClB;EAEa;IACV,iBAAiB,EACpB;EAzFL;IA4FQ,YAAY;IACZ,kBAAkB;IAClB,iBA1GsC;IA2GtC,UAAU,EACb;EAhGL;IAmGQ,aAAa,EAChB;EApGL;IAwGQ,2BAA2B,EAC9B;EAzGL;IA6GQ,6BAA6B,EAChC;EAEiC;IAE9B,2BAA2B,EAC9B;EAEmC;IAEhC,6BAA6B,EAChC;EAxHL;IA4HQ,sBAAsB,EACzB;EAE8B;IAE3B,wBAAwB,EAC3B;EAlIL;IAsIQ,wBAAwB,EAC3B;EAvIL;IA2IQ,4BAA4B,EAC/B;EA5IL;IAgJQ,iCAAiC,EACpC;EAjJL;IAoJQ,mBAAmB,EAoBtB;IArBD;MAKQ,wCAAwC,EAC3C;IAzJT;MA4JY,WAAW;MACX,UAAU;MACV,aAAa;MACb,YAAY;MACZ,qBAAqB,EAOxB;MAvKT;QAmKgB,iBAAiB;QACjB,cAAc;QACd,YAAY,EACf;EAtKb;IA2KQ,YAAY;IACZ,UAAU,EA2Ib;IAxIK;;MAEE,mBAAmB;MACnB,mB3EtFmB,E2EuFtB;IAnLT;MAsLY,aAAa;MACb,kBAAkB;MAClB,YAAY,EAsBf;MAzBC;QAMM,aAAa,EAChB;MA5Lb;QAgMgB,iBAAiB;QACjB,e3EpMgB;Q2EqMhB,oBAAoB,EACvB;MAdH;QAkBM,0BAA0B,EAC7B;MAxMb;QA4MgB,sBAAsB,EACzB;IAGkB;MACnB,gBAAgB,EAKnB;MANsB;QAIf,oB3EtNgB,E2EuNnB;IArNb;MAyNY,aAAa;MACb,kBAAkB;MAClB,YAAY,EA2Ff;MA9FC;QAMM,gBAAgB;QAChB,aAAa;QACb,kBAAkB;QAClB,e3EpOgB,E2EqOnB;MAlOb;QAqOgB,aAAa;QACb,kBAAkB;QAClB,YAAY,EACf;MAxOb;QA8OgB,oB3EhPgB;Q2EiPhB,gBAAgB,EACnB;MAhPb;QAoPgB,e3EvPgB,E2EwPnB;MA7BH;QAgCM,mBAAmB,EAYtB;QApQb;UA2PoB,YAAY;UACZ,sBAAsB;UACtB,sCAAsC;UACtC,6B5E/QU;U4EgRV,qCAnQgC;UAoQhC,mBAAmB;UACnB,YAAY;UACZ,WAAW,EACd;MAnQjB;QAwQgB,0B5EzRc;Q4E0Rd,Y3E/HqB;Q2EgIrB,0CA5Q6B,EA6QhC;MA3Qb;QA8QgB,0BAA0B,EAC7B;MA/Qb;QAmRgB,iBAAiB;QACjB,e3EvRgB;Q2EwRhB,oBAAoB,EACvB;MAED;QACI,sBAAsB;QACtB,YAAY;QACZ,aAAa;QACb,kBAAkB;QAClB,kBAAkB;QAClB,gBAAgB;QAChB,mB3EnMe,E2EyNlB;QArTb;UAkSoB,oB3EpSY,E2EqSf;QAnSjB;UAsSoB,0B5EvTU;U4EwTV,Y3E7JiB;U2E8JjB,0CA1SyB,EA2S5B;QAzSjB;UA4SoB,e3E/SY,E2EgTf;QA7SjB;UAiToB,iBAAiB;UACjB,e3ErTY;U2EsTZ,oBAAoB,EACvB;EApTjB;IA2TY,aAAa;IACb,kBAAkB,EACrB;;AAIT;EAEQ,gBAAgB,EACnB;;ACrVL;EAAK,aAAa,EAAG;;AAErB;EAAG,qBAAqB,EAAG;;AAE3B;EAAY,yC7EKkC,E6ELA;;AAEzC;EAAO,e7EFmB;E6EEE,gBAAgB,EAAG;;AACpD;EACI,sB7EJ2B,E6EQ9B;EALD;IAGQ,qF7ENuB,E6EO1B;;AAGL;EACE,sBAAsB,EAKvB;EAND;IAGQ,mBAAmB;IAAC,aAAa;IAAC,UAAU;IAAC,WAAW,EAE3D;IALL;MAIiB,8B7ElBa;M6EkBwB,wBAAwB,EAAG;;AAIhE;EAAQ,aAAa,EAAG;;AAGzC;EAAU,aAAa,EAAG;;AAE1B;EACE,0BAA0B,EAE3B;EAHD;IAEgB,kBAAkB,EAAG;;AAIrC;EACI,sBAAsB;EACtB,mBAAmB;EACnB,YAAY;EACZ,aAAa;EACb,+CAA0B;EAC1B,wBAAqB;EACrB,mCAAmC,EAEtC;;AAED;EACE;IACE,wBAAiB,EAAA;EAEnB;IACE,0BAAiB,EAAA,EAAA;;AAKrB;EACE,mBAAmB;EACnB,SAAS;EACT,UAAU;EACV,iCAAoB,EACrB;;AACa;EACZ,YAAY;EACZ,aAAa;EACb,wBAAwB;EACxB,mBAAmB;EACnB,YAAY;EACZ,cAAc;EACd,oBAAgB;EAChB,0CAA0C,EAC3C;;AAC6B;EAC5B,4CAA4C,EAC7C;;AACD;EACE,4CAA4C,EAC7C;;AACD;EACE;IACE,oBAAgB;IAChB,WAAW,EAAA;EAEb;IACE,WAAW,EAAA,EAAA;;AAMf;EACI,6BAA6B;EAI7B,yCAAyC,EAC5C;;AACS;EACN,mDAAmD;EAGnD,kCAAiC,EACpC;;AACW;EACR,iDAAiD;EAGjD,2BAAoB,EACvB;;AAED;EACM,YAAY;EAAC,sBAAsB,EAAG;;AAG5C;EAAO,gBAAgB;EAAC,oBAAoB;EAAC,YAAY,EAAG;;AAC5D;EAAiB,iBAAiB,EAAG;;AAGrC;EACI,iDAAgC;EAChC,yEAAyE,EAE5E;EAJD;IAGa,oB5ExGmB;I4EwGY,oBAAoB;IAAC,WAAU,EAAE;;AAE7E;EAEQ,sB7EvHuB,E6EyH1B;EAJL;IAGgB,qF7ExHe,E6EwH4E;;AAI3G;EACI,mBAAmB;EAAC,SAAS;EAAC,YAAY;EAAC,YAAY;EAAC,e5EnH5B;E4EmH+C,gBAAgB,EAE9F;EAHqC;IAEvB,e5EnHiB,E4EmHM;;AAGzB;EAAmB,iBAAiB,EAAG;;AACpD;EAAiC,mBAAmB,EAAG;;AAEvD;;;EAEQ,gBAAgB;EAAE,iBAAiB;EAAE,oBAAoB;EAAE,iBAAiB;EAAE,kBAAkB;EAAE,mBAAmB,EAExH;EAJL;;;IAGgB,gBAAgB,EAAI;;AAHpC;;;EAKqB,SAAQ;EAAC,YAAW,EAAG;;AAE5C;EACI,8BAA8B;EAAC,2BAA0B;EAAC,gBAAe,EAC5E;;AAEkB;EAAI,kBAAkB,EAAG;;AAE5C;EAAO,cAAa,EAAG;;ACpJnB;EACI,YAAY;EAAC,2B7EaW;E6EbqB,mBAAmB,EAUnE;EATG;IACI,WAAW;IAAC,mBAAmB;IAAC,YAAY;IAAC,oB7EWzB,E6ELvB;IALI;MAAI,e7ESe;M6ETI,YAAY,EAAG;IALnD;MAMoB,YAAW,EAAE;IANjC;MAQgB,oB7EOgB,E6ENnB;EAEL;IAAU,YAAY;IAAC,kBAAkB;IAAC,iBAAiB;IAAC,mBAAmB;IAAC,YAAY;IAAC,iBAAiB,EAAG;;AAXzH;EAagB,e9ETe;E8ESM,mBAAmB;EAAC,OAAO;EAAC,aAAa;EAAC,aAAa;EAAC,YAAY;EAAC,cAAc,EAAG;;AAEnH;EAAY,gBAAgB,EAAG;;AAEnC;EACI,YAAY,EAEf;EApBL;IAmBe,YAAY;IAAC,2B7EJI;I6EI4B,mBAAmB,EAAG;;AAnBlF;EAsBsB,mBAAmB;EAAC,YAAY,EAAG;;AAtBzD;EAuBwB,mBAAmB;EAAC,WAAW,EAAG;;AAvB1D;EA0Be,YAAY,EAAG;;AA1B9B;EA4BY,YAAY;EAAC,aAAa;EAAC,kBAAkB,EAGhD;EA/BT;IA6BiB,gBAAe,EAAG;EACvB;IAAU,YAAW,EAAO;;AAIhC;EAAO,aAAa,EAAG;;AACvB;EACI,aAAa;EAAC,cAAc;EAAC,mBAAmB,EAGnD;EAvCT;IAqCiB,gBAAe,EAAG;EArCnC;IAsCsB,aAAY,EAAO;;AAMzC;EACI,mBAAmB;EACnB,iBAAiB;EACjB,sBAAsB,EACzB;;AACD;EACI,mBAAmB;EACnB,OAAO;EACP,SAAS;EACT,UAAU;EACV,WAAW;EACX,+BAA+B;EAC/B,4BAA4B;EAC5B,eAAe;EACf,gBAAgB,EACnB;;AAED,sBAAsB;AACtB;EACI;IACI,yBAAa;IACb,gBAAgB;IAChB,aAAa,EAChB,EAAA;;ACnEL;EACI,mBAAmB;EACnB,eAAe,EAqElB;EAvED;IAMY,+BAAyC;IACzC,oBAAoB,EAOvB;IAdT;MASgB,cAAc,EACjB;IAVb;MAYgB,WAAW,EACd;EAbb;IAgBY,uBAAuB;IACvB,sBAAsB,EACzB;EAlBT;IAsBQ,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,mBAAmB;IACnB,OAAO;IACP,QAAQ;IACR,uBAAuB;IACvB,mBAAmB;IAEnB,iDAAgC;IAGhC,yEAAyE;IACzE,iBAAiB,EAoBpB;IAvDL;MAsCY,YAAY;MACZ,WAAW;MACX,YAAY;MACZ,mBAAmB;MACnB,SAAS;MACT,UAAU;MACV,0B9E/BoB;M8EgCpB,iBAAiB;MACjB,mBAAmB;MACnB,wBAAwB;MACxB,WAAW;MACX,0BAAiB,EACpB;IAlDT;MAqDY,aAAa,EAChB;EAGL;IACI,oBAAoB;IACpB,kBAAkB;IAClB,aAAa;IACb,mBAAmB,EACtB;EA9DL;IAiEQ,mBAAmB,EAKtB;IAtEL;MAoEY,WAAW,EACd;;ACrET;EACE,oBAAoB;EACpB,iBAAiB,EAClB;;AACD;EACE,6BAA6B,EAC9B;;AACD;EACE,4BAA4B,EAC7B;;AACU;EACT,YAAY;EACZ,mBAAmB,EACpB;;AACD;EACE,mBAAmB,EACpB;;AACD;EACE,kBAAkB,EACnB;;AACD;;;EAGE,0BAA0B;EAC1B,gCAAgC,EACjC;;AAED;;;EAGE,8BAA8B;EAC9B,+BAA+B,EAChC;;AACa;EACZ,2BAA2B;EAC3B,gBAAgB;EAChB,eAAc,EACf;;AACD;EACE,2BAA2B;EAC3B,gBAAgB,EACjB;;AAED;EACE,eAAe;EAAC,gBAAgB,EACjC;;AAED;EACE,2BAA2B;EAC3B,6BAA6B;EAC7B,8BAA8B;EAC9B,mBAAmB;EACnB,gBAAgB,EACjB;;AAEiB;EAAO,uDAAuD,EAAG;;ACvDnF;EAAU,iBAAiB;EAAC,wBAAwB;EAAE,oBAAoB,EAAG;;AAC7E;EAAW,gBAAgB;EAAC,iBAAiB;EAAC,cAAc,EAAG;;AAE/D;EACC;IAAW,iBAAiB,EAAG,EAAA;;AAG5B;EAAW,uCAAe;EAAwB,uBAAuB,EAAE;;ACP/E;EACE,kBAAkB;EAClB,qBAAqB,EAwCtB;EA1CD;IAMM,cAAc;IACd,iBAAiB;IACjB,kBAAkB,EAEnB;IAVL;MASQ,sBAAsB;MAAC,ejFKC,EiFLoB;EAIpD;IACE,kBAAkB,EAEnB;IADE;MAAI,iBAAiB;MAAE,eAAc;MAAmB,iBAAiB;MAAC,oBAAoB,EAAG;EAGlG;IACE;MACE,iBAAiB,EAClB,EAAA;EAEiB;IAClB,eAAe,EAChB;EAED;IA3BF;;;MA+BM,iBAAiB;MACjB,gBAAgB,EACjB;IACD;MACE,oBAAoB,EACrB;IACD;MACE,iBAAiB,EAClB,EAAA;;ACvCD;EACF,kBAAkB;EAClB,qBAAqB,EAkCtB;EApCD;IAMM,cAAc;IACd,iBAAiB;IACjB,kBAAkB,EAEnB;IAVL;MASQ,sBAAsB;MAAC,elFKC,EkFLoB;EATpD;IAcE,kBAAkB,EAEnB;IADE;MAAI,iBAAiB;MAAE,eAAc;MAAmB,iBAAiB;MAAC,oBAAoB,EAAG;EAGlG;IAlBF;MAoBM,iBAAiB,EAClB,EAAA;EArBL;IAwBI,eAAe,EAChB;EAED;IA3BF;;;MA+BM,iBAAiB;MACjB,gBAAgB,EACjB,EAAA;;ACjCL;EAAK,oBnFe2B,EmFfC;;AAEjC;EACK,YAAY;EAAC,aAAa,EAAG;;AACjC;EAAK,sBAAsB;EAAC,YAAY;EAAC,mBAAmB;EAAC,gBAAgB,EAAG;;AAI/E;EAAI,iBAAiB;EAAE,eAAc;EAAmB,iBAAiB;EAAC,oBAAoB,EAAG;;AAGnG;EACC,kBAAkB,EAClB;;AAED;EACC,iBAAgB;EAAC,kBAAiB,EAmClC;EApCD;IAIK,UAAU;IAAC,yCpFV8B,EoFUI;EAJlD;IAKe,iBAAiB,EAAG;EALnC;IAOG,cAAc,EAKd;IAZH;MASI,kBAAkB,EAElB;MADA;QAAa,kBAAkB,EAAG;EAVtC;IAgBE,iBAAiB,EAEjB;IAlBF;MAiBgC,wBAAuB,EAAG;EAjB1D;IAsBuB,aAAa;IAAC,aAAa,EAE/C;IADA;MAAE,cAAc,EAAG;EAvBtB;IA0BmB,sBAAsB,EAAG;EAK1C;IAAM,mBAAmB,EAAG;EAC5B;IAAY,4BAA4B,EAAG;EAhC7C;IAiCc,mBAAmB;IAAC,oBAAoB,EAAG;EAjCzD;IAkCW,gBAAgB,EAAG;;AAI9B;EAGG,cAAc,EAEd;EALH;IAIK,kBAAkB,EAAG;;AAJ1B;EAMU,gBAAgB,EAAG;;AAN7B;EASgB,eAAe,EAAG;;AAIlC;EACE,yHAAwH;EACxH,iHAAgH;EAChH,2BAA2B;EAC3B,mBAAmB;EAAC,mBAAkB;EACtC,gBAAgB;EAChB,enF1D8B,EmF2D/B;;AACD;EACC,cAAc,EAEd;EADA;IAAa,UAAU,EAAG;;AAG3B;EAAY,eAAgB;EAAC,wBAAwB,EAAG;;AAExD;EAAgB,YAAW;EAAC,mBAAmB,EAAG;;AAElD;EAAO,iBAAiB,EAAG;;ACnF3B;EACC,cAAc,EACd","file":"collejo.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * animate.css -http://daneden.me/animate\n * Version - 3.5.1\n * Licensed under the MIT license - http://opensource.org/licenses/MIT\n *\n * Copyright (c) 2016 Daniel Eden\n */\n.animated {\n -webkit-animation-duration: 1s;\n animation-duration: 1s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both; }\n .animated.infinite {\n -webkit-animation-iteration-count: infinite;\n animation-iteration-count: infinite; }\n .animated.hinge {\n -webkit-animation-duration: 2s;\n animation-duration: 2s; }\n .animated.flipOutX, .animated.flipOutY, .animated.bounceIn, .animated.bounceOut {\n -webkit-animation-duration: .75s;\n animation-duration: .75s; }\n\n@-webkit-keyframes bounce {\n from, 20%, 53%, 80%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n 40%, 43% {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n -webkit-transform: translate3d(0, -30px, 0);\n transform: translate3d(0, -30px, 0); }\n 70% {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n -webkit-transform: translate3d(0, -15px, 0);\n transform: translate3d(0, -15px, 0); }\n 90% {\n -webkit-transform: translate3d(0, -4px, 0);\n transform: translate3d(0, -4px, 0); } }\n\n@keyframes bounce {\n from, 20%, 53%, 80%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n 40%, 43% {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n -webkit-transform: translate3d(0, -30px, 0);\n transform: translate3d(0, -30px, 0); }\n 70% {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n -webkit-transform: translate3d(0, -15px, 0);\n transform: translate3d(0, -15px, 0); }\n 90% {\n -webkit-transform: translate3d(0, -4px, 0);\n transform: translate3d(0, -4px, 0); } }\n\n.bounce {\n -webkit-animation-name: bounce;\n animation-name: bounce;\n -webkit-transform-origin: center bottom;\n transform-origin: center bottom; }\n\n@-webkit-keyframes flash {\n from, 50%, to {\n opacity: 1; }\n 25%, 75% {\n opacity: 0; } }\n\n@keyframes flash {\n from, 50%, to {\n opacity: 1; }\n 25%, 75% {\n opacity: 0; } }\n\n.flash {\n -webkit-animation-name: flash;\n animation-name: flash; }\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n@-webkit-keyframes pulse {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); }\n 50% {\n -webkit-transform: scale3d(1.05, 1.05, 1.05);\n transform: scale3d(1.05, 1.05, 1.05); }\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); } }\n\n@keyframes pulse {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); }\n 50% {\n -webkit-transform: scale3d(1.05, 1.05, 1.05);\n transform: scale3d(1.05, 1.05, 1.05); }\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); } }\n\n.pulse {\n -webkit-animation-name: pulse;\n animation-name: pulse; }\n\n@-webkit-keyframes rubberBand {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); }\n 30% {\n -webkit-transform: scale3d(1.25, 0.75, 1);\n transform: scale3d(1.25, 0.75, 1); }\n 40% {\n -webkit-transform: scale3d(0.75, 1.25, 1);\n transform: scale3d(0.75, 1.25, 1); }\n 50% {\n -webkit-transform: scale3d(1.15, 0.85, 1);\n transform: scale3d(1.15, 0.85, 1); }\n 65% {\n -webkit-transform: scale3d(0.95, 1.05, 1);\n transform: scale3d(0.95, 1.05, 1); }\n 75% {\n -webkit-transform: scale3d(1.05, 0.95, 1);\n transform: scale3d(1.05, 0.95, 1); }\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); } }\n\n@keyframes rubberBand {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); }\n 30% {\n -webkit-transform: scale3d(1.25, 0.75, 1);\n transform: scale3d(1.25, 0.75, 1); }\n 40% {\n -webkit-transform: scale3d(0.75, 1.25, 1);\n transform: scale3d(0.75, 1.25, 1); }\n 50% {\n -webkit-transform: scale3d(1.15, 0.85, 1);\n transform: scale3d(1.15, 0.85, 1); }\n 65% {\n -webkit-transform: scale3d(0.95, 1.05, 1);\n transform: scale3d(0.95, 1.05, 1); }\n 75% {\n -webkit-transform: scale3d(1.05, 0.95, 1);\n transform: scale3d(1.05, 0.95, 1); }\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); } }\n\n.rubberBand {\n -webkit-animation-name: rubberBand;\n animation-name: rubberBand; }\n\n@-webkit-keyframes shake {\n from, to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n 10%, 30%, 50%, 70%, 90% {\n -webkit-transform: translate3d(-10px, 0, 0);\n transform: translate3d(-10px, 0, 0); }\n 20%, 40%, 60%, 80% {\n -webkit-transform: translate3d(10px, 0, 0);\n transform: translate3d(10px, 0, 0); } }\n\n@keyframes shake {\n from, to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n 10%, 30%, 50%, 70%, 90% {\n -webkit-transform: translate3d(-10px, 0, 0);\n transform: translate3d(-10px, 0, 0); }\n 20%, 40%, 60%, 80% {\n -webkit-transform: translate3d(10px, 0, 0);\n transform: translate3d(10px, 0, 0); } }\n\n.shake {\n -webkit-animation-name: shake;\n animation-name: shake; }\n\n@-webkit-keyframes headShake {\n 0% {\n -webkit-transform: translateX(0);\n transform: translateX(0); }\n 6.5% {\n -webkit-transform: translateX(-6px) rotateY(-9deg);\n transform: translateX(-6px) rotateY(-9deg); }\n 18.5% {\n -webkit-transform: translateX(5px) rotateY(7deg);\n transform: translateX(5px) rotateY(7deg); }\n 31.5% {\n -webkit-transform: translateX(-3px) rotateY(-5deg);\n transform: translateX(-3px) rotateY(-5deg); }\n 43.5% {\n -webkit-transform: translateX(2px) rotateY(3deg);\n transform: translateX(2px) rotateY(3deg); }\n 50% {\n -webkit-transform: translateX(0);\n transform: translateX(0); } }\n\n@keyframes headShake {\n 0% {\n -webkit-transform: translateX(0);\n transform: translateX(0); }\n 6.5% {\n -webkit-transform: translateX(-6px) rotateY(-9deg);\n transform: translateX(-6px) rotateY(-9deg); }\n 18.5% {\n -webkit-transform: translateX(5px) rotateY(7deg);\n transform: translateX(5px) rotateY(7deg); }\n 31.5% {\n -webkit-transform: translateX(-3px) rotateY(-5deg);\n transform: translateX(-3px) rotateY(-5deg); }\n 43.5% {\n -webkit-transform: translateX(2px) rotateY(3deg);\n transform: translateX(2px) rotateY(3deg); }\n 50% {\n -webkit-transform: translateX(0);\n transform: translateX(0); } }\n\n.headShake {\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out;\n -webkit-animation-name: headShake;\n animation-name: headShake; }\n\n@-webkit-keyframes swing {\n 20% {\n -webkit-transform: rotate3d(0, 0, 1, 15deg);\n transform: rotate3d(0, 0, 1, 15deg); }\n 40% {\n -webkit-transform: rotate3d(0, 0, 1, -10deg);\n transform: rotate3d(0, 0, 1, -10deg); }\n 60% {\n -webkit-transform: rotate3d(0, 0, 1, 5deg);\n transform: rotate3d(0, 0, 1, 5deg); }\n 80% {\n -webkit-transform: rotate3d(0, 0, 1, -5deg);\n transform: rotate3d(0, 0, 1, -5deg); }\n to {\n -webkit-transform: rotate3d(0, 0, 1, 0deg);\n transform: rotate3d(0, 0, 1, 0deg); } }\n\n@keyframes swing {\n 20% {\n -webkit-transform: rotate3d(0, 0, 1, 15deg);\n transform: rotate3d(0, 0, 1, 15deg); }\n 40% {\n -webkit-transform: rotate3d(0, 0, 1, -10deg);\n transform: rotate3d(0, 0, 1, -10deg); }\n 60% {\n -webkit-transform: rotate3d(0, 0, 1, 5deg);\n transform: rotate3d(0, 0, 1, 5deg); }\n 80% {\n -webkit-transform: rotate3d(0, 0, 1, -5deg);\n transform: rotate3d(0, 0, 1, -5deg); }\n to {\n -webkit-transform: rotate3d(0, 0, 1, 0deg);\n transform: rotate3d(0, 0, 1, 0deg); } }\n\n.swing {\n -webkit-transform-origin: top center;\n transform-origin: top center;\n -webkit-animation-name: swing;\n animation-name: swing; }\n\n@-webkit-keyframes tada {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); }\n 10%, 20% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); }\n 30%, 50%, 70%, 90% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); }\n 40%, 60%, 80% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); }\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); } }\n\n@keyframes tada {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); }\n 10%, 20% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); }\n 30%, 50%, 70%, 90% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); }\n 40%, 60%, 80% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); }\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); } }\n\n.tada {\n -webkit-animation-name: tada;\n animation-name: tada; }\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n@-webkit-keyframes wobble {\n from {\n -webkit-transform: none;\n transform: none; }\n 15% {\n -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); }\n 30% {\n -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); }\n 45% {\n -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); }\n 60% {\n -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); }\n 75% {\n -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); }\n to {\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes wobble {\n from {\n -webkit-transform: none;\n transform: none; }\n 15% {\n -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); }\n 30% {\n -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); }\n 45% {\n -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); }\n 60% {\n -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); }\n 75% {\n -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); }\n to {\n -webkit-transform: none;\n transform: none; } }\n\n.wobble {\n -webkit-animation-name: wobble;\n animation-name: wobble; }\n\n@-webkit-keyframes jello {\n from, 11.1%, to {\n -webkit-transform: none;\n transform: none; }\n 22.2% {\n -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n transform: skewX(-12.5deg) skewY(-12.5deg); }\n 33.3% {\n -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n transform: skewX(6.25deg) skewY(6.25deg); }\n 44.4% {\n -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n transform: skewX(-3.125deg) skewY(-3.125deg); }\n 55.5% {\n -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n transform: skewX(1.5625deg) skewY(1.5625deg); }\n 66.6% {\n -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n transform: skewX(-0.78125deg) skewY(-0.78125deg); }\n 77.7% {\n -webkit-transform: skewX(0.39063deg) skewY(0.39063deg);\n transform: skewX(0.39063deg) skewY(0.39063deg); }\n 88.8% {\n -webkit-transform: skewX(-0.19531deg) skewY(-0.19531deg);\n transform: skewX(-0.19531deg) skewY(-0.19531deg); } }\n\n@keyframes jello {\n from, 11.1%, to {\n -webkit-transform: none;\n transform: none; }\n 22.2% {\n -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n transform: skewX(-12.5deg) skewY(-12.5deg); }\n 33.3% {\n -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n transform: skewX(6.25deg) skewY(6.25deg); }\n 44.4% {\n -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n transform: skewX(-3.125deg) skewY(-3.125deg); }\n 55.5% {\n -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n transform: skewX(1.5625deg) skewY(1.5625deg); }\n 66.6% {\n -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n transform: skewX(-0.78125deg) skewY(-0.78125deg); }\n 77.7% {\n -webkit-transform: skewX(0.39063deg) skewY(0.39063deg);\n transform: skewX(0.39063deg) skewY(0.39063deg); }\n 88.8% {\n -webkit-transform: skewX(-0.19531deg) skewY(-0.19531deg);\n transform: skewX(-0.19531deg) skewY(-0.19531deg); } }\n\n.jello {\n -webkit-animation-name: jello;\n animation-name: jello;\n -webkit-transform-origin: center;\n transform-origin: center; }\n\n@-webkit-keyframes bounceIn {\n from, 20%, 40%, 60%, 80%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n 0% {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3); }\n 20% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1);\n transform: scale3d(1.1, 1.1, 1.1); }\n 40% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9);\n transform: scale3d(0.9, 0.9, 0.9); }\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(1.03, 1.03, 1.03);\n transform: scale3d(1.03, 1.03, 1.03); }\n 80% {\n -webkit-transform: scale3d(0.97, 0.97, 0.97);\n transform: scale3d(0.97, 0.97, 0.97); }\n to {\n opacity: 1;\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); } }\n\n@keyframes bounceIn {\n from, 20%, 40%, 60%, 80%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n 0% {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3); }\n 20% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1);\n transform: scale3d(1.1, 1.1, 1.1); }\n 40% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9);\n transform: scale3d(0.9, 0.9, 0.9); }\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(1.03, 1.03, 1.03);\n transform: scale3d(1.03, 1.03, 1.03); }\n 80% {\n -webkit-transform: scale3d(0.97, 0.97, 0.97);\n transform: scale3d(0.97, 0.97, 0.97); }\n to {\n opacity: 1;\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1); } }\n\n.bounceIn {\n -webkit-animation-name: bounceIn;\n animation-name: bounceIn; }\n\n@-webkit-keyframes bounceInDown {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n 0% {\n opacity: 0;\n -webkit-transform: translate3d(0, -3000px, 0);\n transform: translate3d(0, -3000px, 0); }\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(0, 25px, 0);\n transform: translate3d(0, 25px, 0); }\n 75% {\n -webkit-transform: translate3d(0, -10px, 0);\n transform: translate3d(0, -10px, 0); }\n 90% {\n -webkit-transform: translate3d(0, 5px, 0);\n transform: translate3d(0, 5px, 0); }\n to {\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes bounceInDown {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n 0% {\n opacity: 0;\n -webkit-transform: translate3d(0, -3000px, 0);\n transform: translate3d(0, -3000px, 0); }\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(0, 25px, 0);\n transform: translate3d(0, 25px, 0); }\n 75% {\n -webkit-transform: translate3d(0, -10px, 0);\n transform: translate3d(0, -10px, 0); }\n 90% {\n -webkit-transform: translate3d(0, 5px, 0);\n transform: translate3d(0, 5px, 0); }\n to {\n -webkit-transform: none;\n transform: none; } }\n\n.bounceInDown {\n -webkit-animation-name: bounceInDown;\n animation-name: bounceInDown; }\n\n@-webkit-keyframes bounceInLeft {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n 0% {\n opacity: 0;\n -webkit-transform: translate3d(-3000px, 0, 0);\n transform: translate3d(-3000px, 0, 0); }\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(25px, 0, 0);\n transform: translate3d(25px, 0, 0); }\n 75% {\n -webkit-transform: translate3d(-10px, 0, 0);\n transform: translate3d(-10px, 0, 0); }\n 90% {\n -webkit-transform: translate3d(5px, 0, 0);\n transform: translate3d(5px, 0, 0); }\n to {\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes bounceInLeft {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n 0% {\n opacity: 0;\n -webkit-transform: translate3d(-3000px, 0, 0);\n transform: translate3d(-3000px, 0, 0); }\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(25px, 0, 0);\n transform: translate3d(25px, 0, 0); }\n 75% {\n -webkit-transform: translate3d(-10px, 0, 0);\n transform: translate3d(-10px, 0, 0); }\n 90% {\n -webkit-transform: translate3d(5px, 0, 0);\n transform: translate3d(5px, 0, 0); }\n to {\n -webkit-transform: none;\n transform: none; } }\n\n.bounceInLeft {\n -webkit-animation-name: bounceInLeft;\n animation-name: bounceInLeft; }\n\n@-webkit-keyframes bounceInRight {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n from {\n opacity: 0;\n -webkit-transform: translate3d(3000px, 0, 0);\n transform: translate3d(3000px, 0, 0); }\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(-25px, 0, 0);\n transform: translate3d(-25px, 0, 0); }\n 75% {\n -webkit-transform: translate3d(10px, 0, 0);\n transform: translate3d(10px, 0, 0); }\n 90% {\n -webkit-transform: translate3d(-5px, 0, 0);\n transform: translate3d(-5px, 0, 0); }\n to {\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes bounceInRight {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n from {\n opacity: 0;\n -webkit-transform: translate3d(3000px, 0, 0);\n transform: translate3d(3000px, 0, 0); }\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(-25px, 0, 0);\n transform: translate3d(-25px, 0, 0); }\n 75% {\n -webkit-transform: translate3d(10px, 0, 0);\n transform: translate3d(10px, 0, 0); }\n 90% {\n -webkit-transform: translate3d(-5px, 0, 0);\n transform: translate3d(-5px, 0, 0); }\n to {\n -webkit-transform: none;\n transform: none; } }\n\n.bounceInRight {\n -webkit-animation-name: bounceInRight;\n animation-name: bounceInRight; }\n\n@-webkit-keyframes bounceInUp {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 3000px, 0);\n transform: translate3d(0, 3000px, 0); }\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0); }\n 75% {\n -webkit-transform: translate3d(0, 10px, 0);\n transform: translate3d(0, 10px, 0); }\n 90% {\n -webkit-transform: translate3d(0, -5px, 0);\n transform: translate3d(0, -5px, 0); }\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); } }\n\n@keyframes bounceInUp {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 3000px, 0);\n transform: translate3d(0, 3000px, 0); }\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0); }\n 75% {\n -webkit-transform: translate3d(0, 10px, 0);\n transform: translate3d(0, 10px, 0); }\n 90% {\n -webkit-transform: translate3d(0, -5px, 0);\n transform: translate3d(0, -5px, 0); }\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); } }\n\n.bounceInUp {\n -webkit-animation-name: bounceInUp;\n animation-name: bounceInUp; }\n\n@-webkit-keyframes bounceOut {\n 20% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9);\n transform: scale3d(0.9, 0.9, 0.9); }\n 50%, 55% {\n opacity: 1;\n -webkit-transform: scale3d(1.1, 1.1, 1.1);\n transform: scale3d(1.1, 1.1, 1.1); }\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3); } }\n\n@keyframes bounceOut {\n 20% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9);\n transform: scale3d(0.9, 0.9, 0.9); }\n 50%, 55% {\n opacity: 1;\n -webkit-transform: scale3d(1.1, 1.1, 1.1);\n transform: scale3d(1.1, 1.1, 1.1); }\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3); } }\n\n.bounceOut {\n -webkit-animation-name: bounceOut;\n animation-name: bounceOut; }\n\n@-webkit-keyframes bounceOutDown {\n 20% {\n -webkit-transform: translate3d(0, 10px, 0);\n transform: translate3d(0, 10px, 0); }\n 40%, 45% {\n opacity: 1;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0); }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0); } }\n\n@keyframes bounceOutDown {\n 20% {\n -webkit-transform: translate3d(0, 10px, 0);\n transform: translate3d(0, 10px, 0); }\n 40%, 45% {\n opacity: 1;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0); }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0); } }\n\n.bounceOutDown {\n -webkit-animation-name: bounceOutDown;\n animation-name: bounceOutDown; }\n\n@-webkit-keyframes bounceOutLeft {\n 20% {\n opacity: 1;\n -webkit-transform: translate3d(20px, 0, 0);\n transform: translate3d(20px, 0, 0); }\n to {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0); } }\n\n@keyframes bounceOutLeft {\n 20% {\n opacity: 1;\n -webkit-transform: translate3d(20px, 0, 0);\n transform: translate3d(20px, 0, 0); }\n to {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0); } }\n\n.bounceOutLeft {\n -webkit-animation-name: bounceOutLeft;\n animation-name: bounceOutLeft; }\n\n@-webkit-keyframes bounceOutRight {\n 20% {\n opacity: 1;\n -webkit-transform: translate3d(-20px, 0, 0);\n transform: translate3d(-20px, 0, 0); }\n to {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0); } }\n\n@keyframes bounceOutRight {\n 20% {\n opacity: 1;\n -webkit-transform: translate3d(-20px, 0, 0);\n transform: translate3d(-20px, 0, 0); }\n to {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0); } }\n\n.bounceOutRight {\n -webkit-animation-name: bounceOutRight;\n animation-name: bounceOutRight; }\n\n@-webkit-keyframes bounceOutUp {\n 20% {\n -webkit-transform: translate3d(0, -10px, 0);\n transform: translate3d(0, -10px, 0); }\n 40%, 45% {\n opacity: 1;\n -webkit-transform: translate3d(0, 20px, 0);\n transform: translate3d(0, 20px, 0); }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0); } }\n\n@keyframes bounceOutUp {\n 20% {\n -webkit-transform: translate3d(0, -10px, 0);\n transform: translate3d(0, -10px, 0); }\n 40%, 45% {\n opacity: 1;\n -webkit-transform: translate3d(0, 20px, 0);\n transform: translate3d(0, 20px, 0); }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0); } }\n\n.bounceOutUp {\n -webkit-animation-name: bounceOutUp;\n animation-name: bounceOutUp; }\n\n@-webkit-keyframes fadeIn {\n from {\n opacity: 0; }\n to {\n opacity: 1; } }\n\n@keyframes fadeIn {\n from {\n opacity: 0; }\n to {\n opacity: 1; } }\n\n.fadeIn {\n -webkit-animation-name: fadeIn;\n animation-name: fadeIn; }\n\n@-webkit-keyframes fadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes fadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n.fadeInDown {\n -webkit-animation-name: fadeInDown;\n animation-name: fadeInDown; }\n\n@-webkit-keyframes fadeInDownBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes fadeInDownBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n.fadeInDownBig {\n -webkit-animation-name: fadeInDownBig;\n animation-name: fadeInDownBig; }\n\n@-webkit-keyframes fadeInLeft {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes fadeInLeft {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n.fadeInLeft {\n -webkit-animation-name: fadeInLeft;\n animation-name: fadeInLeft; }\n\n@-webkit-keyframes fadeInLeftBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes fadeInLeftBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n.fadeInLeftBig {\n -webkit-animation-name: fadeInLeftBig;\n animation-name: fadeInLeftBig; }\n\n@-webkit-keyframes fadeInRight {\n from {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes fadeInRight {\n from {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n.fadeInRight {\n -webkit-animation-name: fadeInRight;\n animation-name: fadeInRight; }\n\n@-webkit-keyframes fadeInRightBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes fadeInRightBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n.fadeInRightBig {\n -webkit-animation-name: fadeInRightBig;\n animation-name: fadeInRightBig; }\n\n@-webkit-keyframes fadeInUp {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes fadeInUp {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n.fadeInUp {\n -webkit-animation-name: fadeInUp;\n animation-name: fadeInUp; }\n\n@-webkit-keyframes fadeInUpBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes fadeInUpBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n.fadeInUpBig {\n -webkit-animation-name: fadeInUpBig;\n animation-name: fadeInUpBig; }\n\n@-webkit-keyframes fadeOut {\n from {\n opacity: 1; }\n to {\n opacity: 0; } }\n\n@keyframes fadeOut {\n from {\n opacity: 1; }\n to {\n opacity: 0; } }\n\n.fadeOut {\n -webkit-animation-name: fadeOut;\n animation-name: fadeOut; }\n\n@-webkit-keyframes fadeOutDown {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0); } }\n\n@keyframes fadeOutDown {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0); } }\n\n.fadeOutDown {\n -webkit-animation-name: fadeOutDown;\n animation-name: fadeOutDown; }\n\n@-webkit-keyframes fadeOutDownBig {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0); } }\n\n@keyframes fadeOutDownBig {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0); } }\n\n.fadeOutDownBig {\n -webkit-animation-name: fadeOutDownBig;\n animation-name: fadeOutDownBig; }\n\n@-webkit-keyframes fadeOutLeft {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0); } }\n\n@keyframes fadeOutLeft {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0); } }\n\n.fadeOutLeft {\n -webkit-animation-name: fadeOutLeft;\n animation-name: fadeOutLeft; }\n\n@-webkit-keyframes fadeOutLeftBig {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0); } }\n\n@keyframes fadeOutLeftBig {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0); } }\n\n.fadeOutLeftBig {\n -webkit-animation-name: fadeOutLeftBig;\n animation-name: fadeOutLeftBig; }\n\n@-webkit-keyframes fadeOutRight {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0); } }\n\n@keyframes fadeOutRight {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0); } }\n\n.fadeOutRight {\n -webkit-animation-name: fadeOutRight;\n animation-name: fadeOutRight; }\n\n@-webkit-keyframes fadeOutRightBig {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0); } }\n\n@keyframes fadeOutRightBig {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0); } }\n\n.fadeOutRightBig {\n -webkit-animation-name: fadeOutRightBig;\n animation-name: fadeOutRightBig; }\n\n@-webkit-keyframes fadeOutUp {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0); } }\n\n@keyframes fadeOutUp {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0); } }\n\n.fadeOutUp {\n -webkit-animation-name: fadeOutUp;\n animation-name: fadeOutUp; }\n\n@-webkit-keyframes fadeOutUpBig {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0); } }\n\n@keyframes fadeOutUpBig {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0); } }\n\n.fadeOutUpBig {\n -webkit-animation-name: fadeOutUpBig;\n animation-name: fadeOutUpBig; }\n\n@-webkit-keyframes flip {\n from {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out; }\n 40% {\n -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out; }\n 50% {\n -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; }\n 80% {\n -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; }\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; } }\n\n@keyframes flip {\n from {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out; }\n 40% {\n -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out; }\n 50% {\n -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; }\n 80% {\n -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; }\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; } }\n\n.animated.flip {\n -webkit-backface-visibility: visible;\n backface-visibility: visible;\n -webkit-animation-name: flip;\n animation-name: flip; }\n\n@-webkit-keyframes flipInX {\n from {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 0; }\n 40% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; }\n 60% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1; }\n 80% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg); }\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px); } }\n\n@keyframes flipInX {\n from {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 0; }\n 40% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; }\n 60% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1; }\n 80% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg); }\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px); } }\n\n.flipInX {\n -webkit-backface-visibility: visible !important;\n backface-visibility: visible !important;\n -webkit-animation-name: flipInX;\n animation-name: flipInX; }\n\n@-webkit-keyframes flipInY {\n from {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 0; }\n 40% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; }\n 60% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n opacity: 1; }\n 80% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -5deg); }\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px); } }\n\n@keyframes flipInY {\n from {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 0; }\n 40% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; }\n 60% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n opacity: 1; }\n 80% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -5deg); }\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px); } }\n\n.flipInY {\n -webkit-backface-visibility: visible !important;\n backface-visibility: visible !important;\n -webkit-animation-name: flipInY;\n animation-name: flipInY; }\n\n@-webkit-keyframes flipOutX {\n from {\n -webkit-transform: perspective(400px);\n transform: perspective(400px); }\n 30% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1; }\n to {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0; } }\n\n@keyframes flipOutX {\n from {\n -webkit-transform: perspective(400px);\n transform: perspective(400px); }\n 30% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1; }\n to {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0; } }\n\n.flipOutX {\n -webkit-animation-name: flipOutX;\n animation-name: flipOutX;\n -webkit-backface-visibility: visible !important;\n backface-visibility: visible !important; }\n\n@-webkit-keyframes flipOutY {\n from {\n -webkit-transform: perspective(400px);\n transform: perspective(400px); }\n 30% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n opacity: 1; }\n to {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n opacity: 0; } }\n\n@keyframes flipOutY {\n from {\n -webkit-transform: perspective(400px);\n transform: perspective(400px); }\n 30% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n opacity: 1; }\n to {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n opacity: 0; } }\n\n.flipOutY {\n -webkit-backface-visibility: visible !important;\n backface-visibility: visible !important;\n -webkit-animation-name: flipOutY;\n animation-name: flipOutY; }\n\n@-webkit-keyframes lightSpeedIn {\n from {\n -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n transform: translate3d(100%, 0, 0) skewX(-30deg);\n opacity: 0; }\n 60% {\n -webkit-transform: skewX(20deg);\n transform: skewX(20deg);\n opacity: 1; }\n 80% {\n -webkit-transform: skewX(-5deg);\n transform: skewX(-5deg);\n opacity: 1; }\n to {\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n@keyframes lightSpeedIn {\n from {\n -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n transform: translate3d(100%, 0, 0) skewX(-30deg);\n opacity: 0; }\n 60% {\n -webkit-transform: skewX(20deg);\n transform: skewX(20deg);\n opacity: 1; }\n 80% {\n -webkit-transform: skewX(-5deg);\n transform: skewX(-5deg);\n opacity: 1; }\n to {\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n.lightSpeedIn {\n -webkit-animation-name: lightSpeedIn;\n animation-name: lightSpeedIn;\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out; }\n\n@-webkit-keyframes lightSpeedOut {\n from {\n opacity: 1; }\n to {\n -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n transform: translate3d(100%, 0, 0) skewX(30deg);\n opacity: 0; } }\n\n@keyframes lightSpeedOut {\n from {\n opacity: 1; }\n to {\n -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n transform: translate3d(100%, 0, 0) skewX(30deg);\n opacity: 0; } }\n\n.lightSpeedOut {\n -webkit-animation-name: lightSpeedOut;\n animation-name: lightSpeedOut;\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in; }\n\n@-webkit-keyframes rotateIn {\n from {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: rotate3d(0, 0, 1, -200deg);\n transform: rotate3d(0, 0, 1, -200deg);\n opacity: 0; }\n to {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n@keyframes rotateIn {\n from {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: rotate3d(0, 0, 1, -200deg);\n transform: rotate3d(0, 0, 1, -200deg);\n opacity: 0; }\n to {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n.rotateIn {\n -webkit-animation-name: rotateIn;\n animation-name: rotateIn; }\n\n@-webkit-keyframes rotateInDownLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0; }\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n@keyframes rotateInDownLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0; }\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n.rotateInDownLeft {\n -webkit-animation-name: rotateInDownLeft;\n animation-name: rotateInDownLeft; }\n\n@-webkit-keyframes rotateInDownRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0; }\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n@keyframes rotateInDownRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0; }\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n.rotateInDownRight {\n -webkit-animation-name: rotateInDownRight;\n animation-name: rotateInDownRight; }\n\n@-webkit-keyframes rotateInUpLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0; }\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n@keyframes rotateInUpLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0; }\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n.rotateInUpLeft {\n -webkit-animation-name: rotateInUpLeft;\n animation-name: rotateInUpLeft; }\n\n@-webkit-keyframes rotateInUpRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, -90deg);\n transform: rotate3d(0, 0, 1, -90deg);\n opacity: 0; }\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n@keyframes rotateInUpRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, -90deg);\n transform: rotate3d(0, 0, 1, -90deg);\n opacity: 0; }\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1; } }\n\n.rotateInUpRight {\n -webkit-animation-name: rotateInUpRight;\n animation-name: rotateInUpRight; }\n\n@-webkit-keyframes rotateOut {\n from {\n -webkit-transform-origin: center;\n transform-origin: center;\n opacity: 1; }\n to {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: rotate3d(0, 0, 1, 200deg);\n transform: rotate3d(0, 0, 1, 200deg);\n opacity: 0; } }\n\n@keyframes rotateOut {\n from {\n -webkit-transform-origin: center;\n transform-origin: center;\n opacity: 1; }\n to {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: rotate3d(0, 0, 1, 200deg);\n transform: rotate3d(0, 0, 1, 200deg);\n opacity: 0; } }\n\n.rotateOut {\n -webkit-animation-name: rotateOut;\n animation-name: rotateOut; }\n\n@-webkit-keyframes rotateOutDownLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n opacity: 1; }\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0; } }\n\n@keyframes rotateOutDownLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n opacity: 1; }\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0; } }\n\n.rotateOutDownLeft {\n -webkit-animation-name: rotateOutDownLeft;\n animation-name: rotateOutDownLeft; }\n\n@-webkit-keyframes rotateOutDownRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n opacity: 1; }\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0; } }\n\n@keyframes rotateOutDownRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n opacity: 1; }\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0; } }\n\n.rotateOutDownRight {\n -webkit-animation-name: rotateOutDownRight;\n animation-name: rotateOutDownRight; }\n\n@-webkit-keyframes rotateOutUpLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n opacity: 1; }\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0; } }\n\n@keyframes rotateOutUpLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n opacity: 1; }\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0; } }\n\n.rotateOutUpLeft {\n -webkit-animation-name: rotateOutUpLeft;\n animation-name: rotateOutUpLeft; }\n\n@-webkit-keyframes rotateOutUpRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n opacity: 1; }\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, 90deg);\n transform: rotate3d(0, 0, 1, 90deg);\n opacity: 0; } }\n\n@keyframes rotateOutUpRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n opacity: 1; }\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, 90deg);\n transform: rotate3d(0, 0, 1, 90deg);\n opacity: 0; } }\n\n.rotateOutUpRight {\n -webkit-animation-name: rotateOutUpRight;\n animation-name: rotateOutUpRight; }\n\n@-webkit-keyframes hinge {\n 0% {\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out; }\n 20%, 60% {\n -webkit-transform: rotate3d(0, 0, 1, 80deg);\n transform: rotate3d(0, 0, 1, 80deg);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out; }\n 40%, 80% {\n -webkit-transform: rotate3d(0, 0, 1, 60deg);\n transform: rotate3d(0, 0, 1, 60deg);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out;\n opacity: 1; }\n to {\n -webkit-transform: translate3d(0, 700px, 0);\n transform: translate3d(0, 700px, 0);\n opacity: 0; } }\n\n@keyframes hinge {\n 0% {\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out; }\n 20%, 60% {\n -webkit-transform: rotate3d(0, 0, 1, 80deg);\n transform: rotate3d(0, 0, 1, 80deg);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out; }\n 40%, 80% {\n -webkit-transform: rotate3d(0, 0, 1, 60deg);\n transform: rotate3d(0, 0, 1, 60deg);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out;\n opacity: 1; }\n to {\n -webkit-transform: translate3d(0, 700px, 0);\n transform: translate3d(0, 700px, 0);\n opacity: 0; } }\n\n.hinge {\n -webkit-animation-name: hinge;\n animation-name: hinge; }\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n@-webkit-keyframes rollIn {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n@keyframes rollIn {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); }\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none; } }\n\n.rollIn {\n -webkit-animation-name: rollIn;\n animation-name: rollIn; }\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n@-webkit-keyframes rollOut {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } }\n\n@keyframes rollOut {\n from {\n opacity: 1; }\n to {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } }\n\n.rollOut {\n -webkit-animation-name: rollOut;\n animation-name: rollOut; }\n\n@-webkit-keyframes zoomIn {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3); }\n 50% {\n opacity: 1; } }\n\n@keyframes zoomIn {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3); }\n 50% {\n opacity: 1; } }\n\n.zoomIn {\n -webkit-animation-name: zoomIn;\n animation-name: zoomIn; }\n\n@-webkit-keyframes zoomInDown {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomInDown {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomInDown {\n -webkit-animation-name: zoomInDown;\n animation-name: zoomInDown; }\n\n@-webkit-keyframes zoomInLeft {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomInLeft {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomInLeft {\n -webkit-animation-name: zoomInLeft;\n animation-name: zoomInLeft; }\n\n@-webkit-keyframes zoomInRight {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomInRight {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomInRight {\n -webkit-animation-name: zoomInRight;\n animation-name: zoomInRight; }\n\n@-webkit-keyframes zoomInUp {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomInUp {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomInUp {\n -webkit-animation-name: zoomInUp;\n animation-name: zoomInUp; }\n\n@-webkit-keyframes zoomOut {\n from {\n opacity: 1; }\n 50% {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3); }\n to {\n opacity: 0; } }\n\n@keyframes zoomOut {\n from {\n opacity: 1; }\n 50% {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3); }\n to {\n opacity: 0; } }\n\n.zoomOut {\n -webkit-animation-name: zoomOut;\n animation-name: zoomOut; }\n\n@-webkit-keyframes zoomOutDown {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n -webkit-transform-origin: center bottom;\n transform-origin: center bottom;\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomOutDown {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n -webkit-transform-origin: center bottom;\n transform-origin: center bottom;\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomOutDown {\n -webkit-animation-name: zoomOutDown;\n animation-name: zoomOutDown; }\n\n@-webkit-keyframes zoomOutLeft {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); }\n to {\n opacity: 0;\n -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);\n transform: scale(0.1) translate3d(-2000px, 0, 0);\n -webkit-transform-origin: left center;\n transform-origin: left center; } }\n\n@keyframes zoomOutLeft {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); }\n to {\n opacity: 0;\n -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);\n transform: scale(0.1) translate3d(-2000px, 0, 0);\n -webkit-transform-origin: left center;\n transform-origin: left center; } }\n\n.zoomOutLeft {\n -webkit-animation-name: zoomOutLeft;\n animation-name: zoomOutLeft; }\n\n@-webkit-keyframes zoomOutRight {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); }\n to {\n opacity: 0;\n -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);\n transform: scale(0.1) translate3d(2000px, 0, 0);\n -webkit-transform-origin: right center;\n transform-origin: right center; } }\n\n@keyframes zoomOutRight {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); }\n to {\n opacity: 0;\n -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);\n transform: scale(0.1) translate3d(2000px, 0, 0);\n -webkit-transform-origin: right center;\n transform-origin: right center; } }\n\n.zoomOutRight {\n -webkit-animation-name: zoomOutRight;\n animation-name: zoomOutRight; }\n\n@-webkit-keyframes zoomOutUp {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n -webkit-transform-origin: center bottom;\n transform-origin: center bottom;\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomOutUp {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n -webkit-transform-origin: center bottom;\n transform-origin: center bottom;\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomOutUp {\n -webkit-animation-name: zoomOutUp;\n animation-name: zoomOutUp; }\n\n@-webkit-keyframes slideInDown {\n from {\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0);\n visibility: visible; }\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInDown {\n from {\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0);\n visibility: visible; }\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); } }\n\n.slideInDown {\n -webkit-animation-name: slideInDown;\n animation-name: slideInDown; }\n\n@-webkit-keyframes slideInLeft {\n from {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n visibility: visible; }\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInLeft {\n from {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n visibility: visible; }\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); } }\n\n.slideInLeft {\n -webkit-animation-name: slideInLeft;\n animation-name: slideInLeft; }\n\n@-webkit-keyframes slideInRight {\n from {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n visibility: visible; }\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInRight {\n from {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n visibility: visible; }\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); } }\n\n.slideInRight {\n -webkit-animation-name: slideInRight;\n animation-name: slideInRight; }\n\n@-webkit-keyframes slideInUp {\n from {\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0);\n visibility: visible; }\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInUp {\n from {\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0);\n visibility: visible; }\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); } }\n\n.slideInUp {\n -webkit-animation-name: slideInUp;\n animation-name: slideInUp; }\n\n@-webkit-keyframes slideOutDown {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0); } }\n\n@keyframes slideOutDown {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0); } }\n\n.slideOutDown {\n -webkit-animation-name: slideOutDown;\n animation-name: slideOutDown; }\n\n@-webkit-keyframes slideOutLeft {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0); } }\n\n@keyframes slideOutLeft {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0); } }\n\n.slideOutLeft {\n -webkit-animation-name: slideOutLeft;\n animation-name: slideOutLeft; }\n\n@-webkit-keyframes slideOutRight {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0); } }\n\n@keyframes slideOutRight {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0); } }\n\n.slideOutRight {\n -webkit-animation-name: slideOutRight;\n animation-name: slideOutRight; }\n\n@-webkit-keyframes slideOutUp {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0); } }\n\n@keyframes slideOutUp {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0); } }\n\n.slideOutUp {\n -webkit-animation-name: slideOutUp;\n animation-name: slideOutUp; }\n\n/**\r\n * selectize.bootstrap3.css (v0.12.1) - Bootstrap 3 Theme\r\n * Copyright (c) 2013–2015 Brian Reavis & contributors\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\r\n * file except in compliance with the License. You may obtain a copy of the License at:\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software distributed under\r\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n * ANY KIND, either express or implied. See the License for the specific language\r\n * governing permissions and limitations under the License.\r\n *\r\n * @author Brian Reavis \r\n */\n.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder {\n visibility: visible !important;\n background: #f2f2f2 !important;\n background: rgba(0, 0, 0, 0.06) !important;\n border: 0 none !important;\n -webkit-box-shadow: inset 0 0 12px 4px #ffffff;\n box-shadow: inset 0 0 12px 4px #ffffff; }\n\n.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after {\n content: '!';\n visibility: hidden; }\n\n.selectize-control.plugin-drag_drop .ui-sortable-helper {\n -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); }\n\n.selectize-dropdown-header {\n position: relative;\n padding: 3px 12px;\n border-bottom: 1px solid #d0d0d0;\n background: #f8f8f8;\n -webkit-border-radius: 4px 4px 0 0;\n -moz-border-radius: 4px 4px 0 0;\n border-radius: 4px 4px 0 0; }\n\n.selectize-dropdown-header-close {\n position: absolute;\n right: 12px;\n top: 50%;\n color: #333333;\n opacity: 0.4;\n margin-top: -12px;\n line-height: 20px;\n font-size: 20px !important; }\n\n.selectize-dropdown-header-close:hover {\n color: #000000; }\n\n.selectize-dropdown.plugin-optgroup_columns .optgroup {\n border-right: 1px solid #f2f2f2;\n border-top: 0 none;\n float: left;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\n.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child {\n border-right: 0 none; }\n\n.selectize-dropdown.plugin-optgroup_columns .optgroup:before {\n display: none; }\n\n.selectize-dropdown.plugin-optgroup_columns .optgroup-header {\n border-top: 0 none; }\n\n.selectize-control.plugin-remove_button [data-value] {\n position: relative;\n padding-right: 24px !important; }\n\n.selectize-control.plugin-remove_button [data-value] .remove {\n z-index: 1;\n /* fixes ie bug (see #392) */\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 17px;\n text-align: center;\n font-weight: bold;\n font-size: 12px;\n color: inherit;\n text-decoration: none;\n vertical-align: middle;\n display: inline-block;\n padding: 1px 0 0 0;\n border-left: 1px solid transparent;\n -webkit-border-radius: 0 2px 2px 0;\n -moz-border-radius: 0 2px 2px 0;\n border-radius: 0 2px 2px 0;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\n.selectize-control.plugin-remove_button [data-value] .remove:hover {\n background: rgba(0, 0, 0, 0.05); }\n\n.selectize-control.plugin-remove_button [data-value].active .remove {\n border-left-color: transparent; }\n\n.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover {\n background: none; }\n\n.selectize-control.plugin-remove_button .disabled [data-value] .remove {\n border-left-color: rgba(77, 77, 77, 0); }\n\n.selectize-control {\n position: relative; }\n\n.selectize-dropdown,\n.selectize-input,\n.selectize-input input {\n color: #333333;\n font-family: inherit;\n font-size: inherit;\n line-height: 20px;\n -webkit-font-smoothing: inherit; }\n\n.selectize-input,\n.selectize-control.single .selectize-input.input-active {\n background: #ffffff;\n cursor: text;\n display: inline-block; }\n\n.selectize-input {\n border: 1px solid #cccccc;\n padding: 6px 12px;\n display: inline-block;\n width: 100%;\n overflow: hidden;\n position: relative;\n z-index: 1;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-box-shadow: none;\n box-shadow: none;\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px; }\n\n.selectize-control.multi .selectize-input.has-items {\n padding: 5px 12px 2px; }\n\n.selectize-input.full {\n background-color: #ffffff; }\n\n.selectize-input.disabled,\n.selectize-input.disabled * {\n cursor: default !important; }\n\n.selectize-input.focus {\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); }\n\n.selectize-input.dropdown-active {\n -webkit-border-radius: 4px 4px 0 0;\n -moz-border-radius: 4px 4px 0 0;\n border-radius: 4px 4px 0 0; }\n\n.selectize-input > * {\n vertical-align: baseline;\n display: -moz-inline-stack;\n display: inline-block;\n zoom: 1;\n *display: inline; }\n\n.selectize-control.multi .selectize-input > div {\n cursor: pointer;\n margin: 0 3px 3px 0;\n padding: 1px 3px;\n background: #efefef;\n color: #333333;\n border: 0 solid transparent; }\n\n.selectize-control.multi .selectize-input > div.active {\n background: #428bca;\n color: #ffffff;\n border: 0 solid transparent; }\n\n.selectize-control.multi .selectize-input.disabled > div,\n.selectize-control.multi .selectize-input.disabled > div.active {\n color: #808080;\n background: #ffffff;\n border: 0 solid rgba(77, 77, 77, 0); }\n\n.selectize-input > input {\n display: inline-block !important;\n padding: 0 !important;\n min-height: 0 !important;\n max-height: none !important;\n max-width: 100% !important;\n margin: 0 !important;\n text-indent: 0 !important;\n border: 0 none !important;\n background: none !important;\n line-height: inherit !important;\n -webkit-user-select: auto !important;\n -webkit-box-shadow: none !important;\n box-shadow: none !important; }\n\n.selectize-input > input::-ms-clear {\n display: none; }\n\n.selectize-input > input:focus {\n outline: none !important; }\n\n.selectize-input::after {\n content: ' ';\n display: block;\n clear: left; }\n\n.selectize-input.dropdown-active::before {\n content: ' ';\n display: block;\n position: absolute;\n background: #ffffff;\n height: 1px;\n bottom: 0;\n left: 0;\n right: 0; }\n\n.selectize-dropdown {\n position: absolute;\n z-index: 10;\n border: 1px solid #d0d0d0;\n background: #ffffff;\n margin: -1px 0 0 0;\n border-top: 0 none;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n -webkit-border-radius: 0 0 4px 4px;\n -moz-border-radius: 0 0 4px 4px;\n border-radius: 0 0 4px 4px; }\n\n.selectize-dropdown [data-selectable] {\n cursor: pointer;\n overflow: hidden; }\n\n.selectize-dropdown [data-selectable] .highlight {\n background: rgba(255, 237, 40, 0.4);\n -webkit-border-radius: 1px;\n -moz-border-radius: 1px;\n border-radius: 1px; }\n\n.selectize-dropdown [data-selectable],\n.selectize-dropdown .optgroup-header {\n padding: 3px 12px; }\n\n.selectize-dropdown .optgroup:first-child .optgroup-header {\n border-top: 0 none; }\n\n.selectize-dropdown .optgroup-header {\n color: #777777;\n background: #ffffff;\n cursor: default; }\n\n.selectize-dropdown .active {\n background-color: #f5f5f5;\n color: #262626; }\n\n.selectize-dropdown .active.create {\n color: #262626; }\n\n.selectize-dropdown .create {\n color: rgba(51, 51, 51, 0.5); }\n\n.selectize-dropdown-content {\n overflow-y: auto;\n overflow-x: hidden;\n max-height: 200px; }\n\n.selectize-control.single .selectize-input,\n.selectize-control.single .selectize-input input {\n cursor: pointer; }\n\n.selectize-control.single .selectize-input.input-active,\n.selectize-control.single .selectize-input.input-active input {\n cursor: text; }\n\n.selectize-control.single .selectize-input:after {\n content: ' ';\n display: block;\n position: absolute;\n top: 50%;\n right: 17px;\n margin-top: -3px;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 5px 0 5px;\n border-color: #333333 transparent transparent transparent; }\n\n.selectize-control.single .selectize-input.dropdown-active:after {\n margin-top: -4px;\n border-width: 0 5px 5px 5px;\n border-color: transparent transparent #333333 transparent; }\n\n.selectize-control.rtl.single .selectize-input:after {\n left: 17px;\n right: auto; }\n\n.selectize-control.rtl .selectize-input > input {\n margin: 0 4px 0 -2px !important; }\n\n.selectize-control .selectize-input.disabled {\n opacity: 0.5;\n background-color: #ffffff; }\n\n.selectize-dropdown,\n.selectize-dropdown.form-control {\n height: auto;\n padding: 0;\n margin: 2px 0 0 0;\n z-index: 1000;\n background: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); }\n\n.selectize-dropdown .optgroup-header {\n font-size: 12px;\n line-height: 1.42857143; }\n\n.selectize-dropdown .optgroup:first-child:before {\n display: none; }\n\n.selectize-dropdown .optgroup:before {\n content: ' ';\n display: block;\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n margin-left: -12px;\n margin-right: -12px; }\n\n.selectize-dropdown-content {\n padding: 5px 0; }\n\n.selectize-dropdown-header {\n padding: 6px 12px; }\n\n.selectize-input {\n min-height: 34px; }\n\n.selectize-input.dropdown-active {\n -webkit-border-radius: 4px;\n -moz-border-radius: 4px;\n border-radius: 4px; }\n\n.selectize-input.dropdown-active::before {\n display: none; }\n\n.selectize-input.focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n\n.has-error .selectize-input {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n\n.has-error .selectize-input:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }\n\n.selectize-control.multi .selectize-input.has-items {\n padding-left: 9px;\n padding-right: 9px; }\n\n.selectize-control.multi .selectize-input > div {\n -webkit-border-radius: 3px;\n -moz-border-radius: 3px;\n border-radius: 3px; }\n\n.form-control.selectize-control {\n padding: 0;\n border: none;\n background: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n -webkit-border-radius: 0;\n -moz-border-radius: 0;\n border-radius: 0; }\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%; }\n\nbody {\n margin: 0; }\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block; }\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline; }\n\naudio:not([controls]) {\n display: none;\n height: 0; }\n\n[hidden],\ntemplate {\n display: none; }\n\na {\n background-color: transparent; }\n\na:active,\na:hover {\n outline: 0; }\n\nabbr[title] {\n border-bottom: 1px dotted; }\n\nb,\nstrong {\n font-weight: bold; }\n\ndfn {\n font-style: italic; }\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\nmark {\n background: #ff0;\n color: #000; }\n\nsmall {\n font-size: 80%; }\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline; }\n\nsup {\n top: -0.5em; }\n\nsub {\n bottom: -0.25em; }\n\nimg {\n border: 0; }\n\nsvg:not(:root) {\n overflow: hidden; }\n\nfigure {\n margin: 1em 40px; }\n\nhr {\n box-sizing: content-box;\n height: 0; }\n\npre {\n overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em; }\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0; }\n\nbutton {\n overflow: visible; }\n\nbutton,\nselect {\n text-transform: none; }\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer; }\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\ninput {\n line-height: normal; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto; }\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none; }\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em; }\n\nlegend {\n border: 0;\n padding: 0; }\n\ntextarea {\n overflow: auto; }\n\noptgroup {\n font-weight: bold; }\n\ntable {\n border-collapse: collapse;\n border-spacing: 0; }\n\ntd,\nth {\n padding: 0; }\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n a,\n a:visited {\n text-decoration: underline; }\n a[href]:after {\n content: \" (\" attr(href) \")\"; }\n abbr[title]:after {\n content: \" (\" attr(title) \")\"; }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\"; }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n thead {\n display: table-header-group; }\n tr,\n img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3; }\n h2,\n h3 {\n page-break-after: avoid; }\n .navbar {\n display: none; }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important; }\n .label {\n border: 1px solid #000; }\n .table {\n border-collapse: collapse !important; }\n .table td,\n .table th {\n background-color: #fff !important; }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important; } }\n\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: transparent; }\n\nbody {\n font-family: \"Roboto\", sans-serif;\n font-size: 14px;\n line-height: 1.428571429;\n color: #333333;\n background-color: #fff; }\n\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit; }\n\na {\n color: #2487ca;\n text-decoration: none; }\n a:hover, a:focus {\n color: #185c89;\n text-decoration: underline; }\n a:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n\nfigure {\n margin: 0; }\n\nimg {\n vertical-align: middle; }\n\n.img-responsive {\n display: block;\n max-width: 100%;\n height: auto; }\n\n.img-rounded {\n border-radius: 6px; }\n\n.img-thumbnail {\n padding: 4px;\n line-height: 1.428571429;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto; }\n\n.img-circle {\n border-radius: 50%; }\n\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee; }\n\n.sr-only, .bootstrap-datetimepicker-widget .btn[data-action=\"incrementHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"incrementMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"decrementHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"decrementMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"showHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"showMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"togglePeriod\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"clear\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"today\"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto; }\n\n[role=\"button\"] {\n cursor: pointer; }\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit; }\n h1 small,\n h1 .small, h2 small,\n h2 .small, h3 small,\n h3 .small, h4 small,\n h4 .small, h5 small,\n h5 .small, h6 small,\n h6 .small,\n .h1 small,\n .h1 .small, .h2 small,\n .h2 .small, .h3 small,\n .h3 .small, .h4 small,\n .h4 .small, .h5 small,\n .h5 .small, .h6 small,\n .h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777; }\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: 20px;\n margin-bottom: 10px; }\n h1 small,\n h1 .small, .h1 small,\n .h1 .small,\n h2 small,\n h2 .small, .h2 small,\n .h2 .small,\n h3 small,\n h3 .small, .h3 small,\n .h3 .small {\n font-size: 65%; }\n\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: 10px;\n margin-bottom: 10px; }\n h4 small,\n h4 .small, .h4 small,\n .h4 .small,\n h5 small,\n h5 .small, .h5 small,\n .h5 .small,\n h6 small,\n h6 .small, .h6 small,\n .h6 .small {\n font-size: 75%; }\n\nh1, .h1 {\n font-size: 36px; }\n\nh2, .h2 {\n font-size: 30px; }\n\nh3, .h3 {\n font-size: 24px; }\n\nh4, .h4 {\n font-size: 18px; }\n\nh5, .h5 {\n font-size: 14px; }\n\nh6, .h6 {\n font-size: 12px; }\n\np {\n margin: 0 0 10px; }\n\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4; }\n @media (min-width: 768px) {\n .lead {\n font-size: 21px; } }\n\nsmall,\n.small {\n font-size: 85%; }\n\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em; }\n\n.text-left {\n text-align: left; }\n\n.text-right, .dash-content .table td.tools-column {\n text-align: right; }\n\n.text-center {\n text-align: center; }\n\n.text-justify {\n text-align: justify; }\n\n.text-nowrap {\n white-space: nowrap; }\n\n.text-lowercase {\n text-transform: lowercase; }\n\n.text-uppercase, .initialism {\n text-transform: uppercase; }\n\n.text-capitalize {\n text-transform: capitalize; }\n\n.text-muted {\n color: #777777; }\n\n.text-primary {\n color: #2487ca; }\n\na.text-primary:hover,\na.text-primary:focus {\n color: #1c6a9f; }\n\n.text-success {\n color: #3c763d; }\n\na.text-success:hover,\na.text-success:focus {\n color: #2b542c; }\n\n.text-info {\n color: #31708f; }\n\na.text-info:hover,\na.text-info:focus {\n color: #245269; }\n\n.text-warning {\n color: #8a6d3b; }\n\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c; }\n\n.text-danger {\n color: #a94442; }\n\na.text-danger:hover,\na.text-danger:focus {\n color: #843534; }\n\n.bg-primary {\n color: #fff; }\n\n.bg-primary {\n background-color: #2487ca; }\n\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #1c6a9f; }\n\n.bg-success {\n background-color: #dff0d8; }\n\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3; }\n\n.bg-info {\n background-color: #d9edf7; }\n\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee; }\n\n.bg-warning {\n background-color: #fcf8e3; }\n\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5; }\n\n.bg-danger {\n background-color: #f2dede; }\n\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9; }\n\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee; }\n\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px; }\n ul ul,\n ul ol,\n ol ul,\n ol ol {\n margin-bottom: 0; }\n\n.list-unstyled {\n padding-left: 0;\n list-style: none; }\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px; }\n .list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px; }\n\ndl {\n margin-top: 0;\n margin-bottom: 20px; }\n\ndt,\ndd {\n line-height: 1.428571429; }\n\ndt {\n font-weight: bold; }\n\ndd {\n margin-left: 0; }\n\n.dl-horizontal dd:before, .dl-horizontal dd:after {\n content: \" \";\n display: table; }\n\n.dl-horizontal dd:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .dl-horizontal dd {\n margin-left: 180px; } }\n\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777; }\n\n.initialism {\n font-size: 90%; }\n\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee; }\n blockquote p:last-child,\n blockquote ul:last-child,\n blockquote ol:last-child {\n margin-bottom: 0; }\n blockquote footer,\n blockquote small,\n blockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.428571429;\n color: #777777; }\n blockquote footer:before,\n blockquote small:before,\n blockquote .small:before {\n content: '\\2014 \\00A0'; }\n\n.blockquote-reverse,\nblockquote.pull-right,\n.panel .panel-footer blockquote.tools-footer {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right; }\n .blockquote-reverse footer:before,\n .blockquote-reverse small:before,\n .blockquote-reverse .small:before,\n blockquote.pull-right footer:before, .panel .panel-footer blockquote.tools-footer footer:before,\n blockquote.pull-right small:before, .panel .panel-footer blockquote.tools-footer small:before,\n blockquote.pull-right .small:before, .panel .panel-footer blockquote.tools-footer .small:before {\n content: ''; }\n .blockquote-reverse footer:after,\n .blockquote-reverse small:after,\n .blockquote-reverse .small:after,\n blockquote.pull-right footer:after, .panel .panel-footer blockquote.tools-footer footer:after,\n blockquote.pull-right small:after, .panel .panel-footer blockquote.tools-footer small:after,\n blockquote.pull-right .small:after, .panel .panel-footer blockquote.tools-footer .small:after {\n content: '\\00A0 \\2014'; }\n\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.428571429; }\n\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px; }\n\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); }\n kbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none; }\n\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.428571429;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px; }\n pre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0; }\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll; }\n\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px; }\n .container:before, .container:after {\n content: \" \";\n display: table; }\n .container:after {\n clear: both; }\n @media (min-width: 768px) {\n .container {\n width: 750px; } }\n @media (min-width: 992px) {\n .container {\n width: 970px; } }\n @media (min-width: 1200px) {\n .container {\n width: 1170px; } }\n\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px; }\n .container-fluid:before, .container-fluid:after {\n content: \" \";\n display: table; }\n .container-fluid:after {\n clear: both; }\n\n.row {\n margin-left: -15px;\n margin-right: -15px; }\n .row:before, .row:after {\n content: \" \";\n display: table; }\n .row:after {\n clear: both; }\n\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px; }\n\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left; }\n\n.col-xs-1 {\n width: 8.3333333333%; }\n\n.col-xs-2 {\n width: 16.6666666667%; }\n\n.col-xs-3 {\n width: 25%; }\n\n.col-xs-4 {\n width: 33.3333333333%; }\n\n.col-xs-5 {\n width: 41.6666666667%; }\n\n.col-xs-6 {\n width: 50%; }\n\n.col-xs-7 {\n width: 58.3333333333%; }\n\n.col-xs-8 {\n width: 66.6666666667%; }\n\n.col-xs-9 {\n width: 75%; }\n\n.col-xs-10 {\n width: 83.3333333333%; }\n\n.col-xs-11 {\n width: 91.6666666667%; }\n\n.col-xs-12 {\n width: 100%; }\n\n.col-xs-pull-0 {\n right: auto; }\n\n.col-xs-pull-1 {\n right: 8.3333333333%; }\n\n.col-xs-pull-2 {\n right: 16.6666666667%; }\n\n.col-xs-pull-3 {\n right: 25%; }\n\n.col-xs-pull-4 {\n right: 33.3333333333%; }\n\n.col-xs-pull-5 {\n right: 41.6666666667%; }\n\n.col-xs-pull-6 {\n right: 50%; }\n\n.col-xs-pull-7 {\n right: 58.3333333333%; }\n\n.col-xs-pull-8 {\n right: 66.6666666667%; }\n\n.col-xs-pull-9 {\n right: 75%; }\n\n.col-xs-pull-10 {\n right: 83.3333333333%; }\n\n.col-xs-pull-11 {\n right: 91.6666666667%; }\n\n.col-xs-pull-12 {\n right: 100%; }\n\n.col-xs-push-0 {\n left: auto; }\n\n.col-xs-push-1 {\n left: 8.3333333333%; }\n\n.col-xs-push-2 {\n left: 16.6666666667%; }\n\n.col-xs-push-3 {\n left: 25%; }\n\n.col-xs-push-4 {\n left: 33.3333333333%; }\n\n.col-xs-push-5 {\n left: 41.6666666667%; }\n\n.col-xs-push-6 {\n left: 50%; }\n\n.col-xs-push-7 {\n left: 58.3333333333%; }\n\n.col-xs-push-8 {\n left: 66.6666666667%; }\n\n.col-xs-push-9 {\n left: 75%; }\n\n.col-xs-push-10 {\n left: 83.3333333333%; }\n\n.col-xs-push-11 {\n left: 91.6666666667%; }\n\n.col-xs-push-12 {\n left: 100%; }\n\n.col-xs-offset-0 {\n margin-left: 0%; }\n\n.col-xs-offset-1 {\n margin-left: 8.3333333333%; }\n\n.col-xs-offset-2 {\n margin-left: 16.6666666667%; }\n\n.col-xs-offset-3 {\n margin-left: 25%; }\n\n.col-xs-offset-4 {\n margin-left: 33.3333333333%; }\n\n.col-xs-offset-5 {\n margin-left: 41.6666666667%; }\n\n.col-xs-offset-6 {\n margin-left: 50%; }\n\n.col-xs-offset-7 {\n margin-left: 58.3333333333%; }\n\n.col-xs-offset-8 {\n margin-left: 66.6666666667%; }\n\n.col-xs-offset-9 {\n margin-left: 75%; }\n\n.col-xs-offset-10 {\n margin-left: 83.3333333333%; }\n\n.col-xs-offset-11 {\n margin-left: 91.6666666667%; }\n\n.col-xs-offset-12 {\n margin-left: 100%; }\n\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left; }\n .col-sm-1 {\n width: 8.3333333333%; }\n .col-sm-2 {\n width: 16.6666666667%; }\n .col-sm-3 {\n width: 25%; }\n .col-sm-4 {\n width: 33.3333333333%; }\n .col-sm-5 {\n width: 41.6666666667%; }\n .col-sm-6 {\n width: 50%; }\n .col-sm-7 {\n width: 58.3333333333%; }\n .col-sm-8 {\n width: 66.6666666667%; }\n .col-sm-9 {\n width: 75%; }\n .col-sm-10 {\n width: 83.3333333333%; }\n .col-sm-11 {\n width: 91.6666666667%; }\n .col-sm-12 {\n width: 100%; }\n .col-sm-pull-0 {\n right: auto; }\n .col-sm-pull-1 {\n right: 8.3333333333%; }\n .col-sm-pull-2 {\n right: 16.6666666667%; }\n .col-sm-pull-3 {\n right: 25%; }\n .col-sm-pull-4 {\n right: 33.3333333333%; }\n .col-sm-pull-5 {\n right: 41.6666666667%; }\n .col-sm-pull-6 {\n right: 50%; }\n .col-sm-pull-7 {\n right: 58.3333333333%; }\n .col-sm-pull-8 {\n right: 66.6666666667%; }\n .col-sm-pull-9 {\n right: 75%; }\n .col-sm-pull-10 {\n right: 83.3333333333%; }\n .col-sm-pull-11 {\n right: 91.6666666667%; }\n .col-sm-pull-12 {\n right: 100%; }\n .col-sm-push-0 {\n left: auto; }\n .col-sm-push-1 {\n left: 8.3333333333%; }\n .col-sm-push-2 {\n left: 16.6666666667%; }\n .col-sm-push-3 {\n left: 25%; }\n .col-sm-push-4 {\n left: 33.3333333333%; }\n .col-sm-push-5 {\n left: 41.6666666667%; }\n .col-sm-push-6 {\n left: 50%; }\n .col-sm-push-7 {\n left: 58.3333333333%; }\n .col-sm-push-8 {\n left: 66.6666666667%; }\n .col-sm-push-9 {\n left: 75%; }\n .col-sm-push-10 {\n left: 83.3333333333%; }\n .col-sm-push-11 {\n left: 91.6666666667%; }\n .col-sm-push-12 {\n left: 100%; }\n .col-sm-offset-0 {\n margin-left: 0%; }\n .col-sm-offset-1 {\n margin-left: 8.3333333333%; }\n .col-sm-offset-2 {\n margin-left: 16.6666666667%; }\n .col-sm-offset-3 {\n margin-left: 25%; }\n .col-sm-offset-4 {\n margin-left: 33.3333333333%; }\n .col-sm-offset-5 {\n margin-left: 41.6666666667%; }\n .col-sm-offset-6 {\n margin-left: 50%; }\n .col-sm-offset-7 {\n margin-left: 58.3333333333%; }\n .col-sm-offset-8 {\n margin-left: 66.6666666667%; }\n .col-sm-offset-9 {\n margin-left: 75%; }\n .col-sm-offset-10 {\n margin-left: 83.3333333333%; }\n .col-sm-offset-11 {\n margin-left: 91.6666666667%; }\n .col-sm-offset-12 {\n margin-left: 100%; } }\n\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left; }\n .col-md-1 {\n width: 8.3333333333%; }\n .col-md-2 {\n width: 16.6666666667%; }\n .col-md-3 {\n width: 25%; }\n .col-md-4 {\n width: 33.3333333333%; }\n .col-md-5 {\n width: 41.6666666667%; }\n .col-md-6 {\n width: 50%; }\n .col-md-7 {\n width: 58.3333333333%; }\n .col-md-8 {\n width: 66.6666666667%; }\n .col-md-9 {\n width: 75%; }\n .col-md-10 {\n width: 83.3333333333%; }\n .col-md-11 {\n width: 91.6666666667%; }\n .col-md-12 {\n width: 100%; }\n .col-md-pull-0 {\n right: auto; }\n .col-md-pull-1 {\n right: 8.3333333333%; }\n .col-md-pull-2 {\n right: 16.6666666667%; }\n .col-md-pull-3 {\n right: 25%; }\n .col-md-pull-4 {\n right: 33.3333333333%; }\n .col-md-pull-5 {\n right: 41.6666666667%; }\n .col-md-pull-6 {\n right: 50%; }\n .col-md-pull-7 {\n right: 58.3333333333%; }\n .col-md-pull-8 {\n right: 66.6666666667%; }\n .col-md-pull-9 {\n right: 75%; }\n .col-md-pull-10 {\n right: 83.3333333333%; }\n .col-md-pull-11 {\n right: 91.6666666667%; }\n .col-md-pull-12 {\n right: 100%; }\n .col-md-push-0 {\n left: auto; }\n .col-md-push-1 {\n left: 8.3333333333%; }\n .col-md-push-2 {\n left: 16.6666666667%; }\n .col-md-push-3 {\n left: 25%; }\n .col-md-push-4 {\n left: 33.3333333333%; }\n .col-md-push-5 {\n left: 41.6666666667%; }\n .col-md-push-6 {\n left: 50%; }\n .col-md-push-7 {\n left: 58.3333333333%; }\n .col-md-push-8 {\n left: 66.6666666667%; }\n .col-md-push-9 {\n left: 75%; }\n .col-md-push-10 {\n left: 83.3333333333%; }\n .col-md-push-11 {\n left: 91.6666666667%; }\n .col-md-push-12 {\n left: 100%; }\n .col-md-offset-0 {\n margin-left: 0%; }\n .col-md-offset-1 {\n margin-left: 8.3333333333%; }\n .col-md-offset-2 {\n margin-left: 16.6666666667%; }\n .col-md-offset-3 {\n margin-left: 25%; }\n .col-md-offset-4 {\n margin-left: 33.3333333333%; }\n .col-md-offset-5 {\n margin-left: 41.6666666667%; }\n .col-md-offset-6 {\n margin-left: 50%; }\n .col-md-offset-7 {\n margin-left: 58.3333333333%; }\n .col-md-offset-8 {\n margin-left: 66.6666666667%; }\n .col-md-offset-9 {\n margin-left: 75%; }\n .col-md-offset-10 {\n margin-left: 83.3333333333%; }\n .col-md-offset-11 {\n margin-left: 91.6666666667%; }\n .col-md-offset-12 {\n margin-left: 100%; } }\n\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left; }\n .col-lg-1 {\n width: 8.3333333333%; }\n .col-lg-2 {\n width: 16.6666666667%; }\n .col-lg-3 {\n width: 25%; }\n .col-lg-4 {\n width: 33.3333333333%; }\n .col-lg-5 {\n width: 41.6666666667%; }\n .col-lg-6 {\n width: 50%; }\n .col-lg-7 {\n width: 58.3333333333%; }\n .col-lg-8 {\n width: 66.6666666667%; }\n .col-lg-9 {\n width: 75%; }\n .col-lg-10 {\n width: 83.3333333333%; }\n .col-lg-11 {\n width: 91.6666666667%; }\n .col-lg-12 {\n width: 100%; }\n .col-lg-pull-0 {\n right: auto; }\n .col-lg-pull-1 {\n right: 8.3333333333%; }\n .col-lg-pull-2 {\n right: 16.6666666667%; }\n .col-lg-pull-3 {\n right: 25%; }\n .col-lg-pull-4 {\n right: 33.3333333333%; }\n .col-lg-pull-5 {\n right: 41.6666666667%; }\n .col-lg-pull-6 {\n right: 50%; }\n .col-lg-pull-7 {\n right: 58.3333333333%; }\n .col-lg-pull-8 {\n right: 66.6666666667%; }\n .col-lg-pull-9 {\n right: 75%; }\n .col-lg-pull-10 {\n right: 83.3333333333%; }\n .col-lg-pull-11 {\n right: 91.6666666667%; }\n .col-lg-pull-12 {\n right: 100%; }\n .col-lg-push-0 {\n left: auto; }\n .col-lg-push-1 {\n left: 8.3333333333%; }\n .col-lg-push-2 {\n left: 16.6666666667%; }\n .col-lg-push-3 {\n left: 25%; }\n .col-lg-push-4 {\n left: 33.3333333333%; }\n .col-lg-push-5 {\n left: 41.6666666667%; }\n .col-lg-push-6 {\n left: 50%; }\n .col-lg-push-7 {\n left: 58.3333333333%; }\n .col-lg-push-8 {\n left: 66.6666666667%; }\n .col-lg-push-9 {\n left: 75%; }\n .col-lg-push-10 {\n left: 83.3333333333%; }\n .col-lg-push-11 {\n left: 91.6666666667%; }\n .col-lg-push-12 {\n left: 100%; }\n .col-lg-offset-0 {\n margin-left: 0%; }\n .col-lg-offset-1 {\n margin-left: 8.3333333333%; }\n .col-lg-offset-2 {\n margin-left: 16.6666666667%; }\n .col-lg-offset-3 {\n margin-left: 25%; }\n .col-lg-offset-4 {\n margin-left: 33.3333333333%; }\n .col-lg-offset-5 {\n margin-left: 41.6666666667%; }\n .col-lg-offset-6 {\n margin-left: 50%; }\n .col-lg-offset-7 {\n margin-left: 58.3333333333%; }\n .col-lg-offset-8 {\n margin-left: 66.6666666667%; }\n .col-lg-offset-9 {\n margin-left: 75%; }\n .col-lg-offset-10 {\n margin-left: 83.3333333333%; }\n .col-lg-offset-11 {\n margin-left: 91.6666666667%; }\n .col-lg-offset-12 {\n margin-left: 100%; } }\n\ntable {\n background-color: transparent; }\n\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left; }\n\nth {\n text-align: left; }\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px; }\n .table > thead > tr > th,\n .table > thead > tr > td,\n .table > tbody > tr > th,\n .table > tbody > tr > td,\n .table > tfoot > tr > th,\n .table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.428571429;\n vertical-align: top;\n border-top: 1px solid #ddd; }\n .table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd; }\n .table > caption + thead > tr:first-child > th,\n .table > caption + thead > tr:first-child > td,\n .table > colgroup + thead > tr:first-child > th,\n .table > colgroup + thead > tr:first-child > td,\n .table > thead:first-child > tr:first-child > th,\n .table > thead:first-child > tr:first-child > td {\n border-top: 0; }\n .table > tbody + tbody {\n border-top: 2px solid #ddd; }\n .table .table {\n background-color: #fff; }\n\n.table-condensed > thead > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > th,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > th,\n.table-condensed > tfoot > tr > td {\n padding: 5px; }\n\n.table-bordered {\n border: 1px solid #ddd; }\n .table-bordered > thead > tr > th,\n .table-bordered > thead > tr > td,\n .table-bordered > tbody > tr > th,\n .table-bordered > tbody > tr > td,\n .table-bordered > tfoot > tr > th,\n .table-bordered > tfoot > tr > td {\n border: 1px solid #ddd; }\n .table-bordered > thead > tr > th,\n .table-bordered > thead > tr > td {\n border-bottom-width: 2px; }\n\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9; }\n\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5; }\n\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column; }\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell; }\n\n.table > thead > tr > td.active,\n.table > thead > tr > th.active,\n.table > thead > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5; }\n\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8; }\n\n.table > thead > tr > td.success,\n.table > thead > tr > th.success,\n.table > thead > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8; }\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6; }\n\n.table > thead > tr > td.info,\n.table > thead > tr > th.info,\n.table > thead > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr > td.info,\n.table > tbody > tr > th.info,\n.table > tbody > tr.info > td,\n.table > tbody > tr.info > th,\n.table > tfoot > tr > td.info,\n.table > tfoot > tr > th.info,\n.table > tfoot > tr.info > td,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7; }\n\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3; }\n\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3; }\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc; }\n\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede; }\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc; }\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; }\n @media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd; }\n .table-responsive > .table {\n margin-bottom: 0; }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap; }\n .table-responsive > .table-bordered {\n border: 0; }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0; }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0; }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0; } }\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0; }\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5; }\n\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold; }\n\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal; }\n\ninput[type=\"file\"] {\n display: block; }\n\ninput[type=\"range\"] {\n display: block;\n width: 100%; }\n\nselect[multiple],\nselect[size] {\n height: auto; }\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.428571429;\n color: #555555; }\n\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.428571429;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n .form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n .form-control::-moz-placeholder {\n color: #999;\n opacity: 1; }\n .form-control:-ms-input-placeholder {\n color: #999; }\n .form-control::-webkit-input-placeholder {\n color: #999; }\n .form-control::-ms-expand {\n border: 0;\n background-color: transparent; }\n .form-control[disabled], .form-control[readonly],\n fieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1; }\n .form-control[disabled],\n fieldset[disabled] .form-control {\n cursor: not-allowed; }\n\ntextarea.form-control {\n height: auto; }\n\ninput[type=\"search\"] {\n -webkit-appearance: none; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px; }\n input[type=\"date\"].input-sm, .input-group-sm > input[type=\"date\"].form-control,\n .input-group-sm > input[type=\"date\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"date\"].btn,\n .input-group-sm input[type=\"date\"],\n input[type=\"time\"].input-sm,\n .input-group-sm > input[type=\"time\"].form-control,\n .input-group-sm > input[type=\"time\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"time\"].btn,\n .input-group-sm\n input[type=\"time\"],\n input[type=\"datetime-local\"].input-sm,\n .input-group-sm > input[type=\"datetime-local\"].form-control,\n .input-group-sm > input[type=\"datetime-local\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-sm\n input[type=\"datetime-local\"],\n input[type=\"month\"].input-sm,\n .input-group-sm > input[type=\"month\"].form-control,\n .input-group-sm > input[type=\"month\"].input-group-addon,\n .input-group-sm > .input-group-btn > input[type=\"month\"].btn,\n .input-group-sm\n input[type=\"month\"] {\n line-height: 30px; }\n input[type=\"date\"].input-lg, .input-group-lg > input[type=\"date\"].form-control,\n .input-group-lg > input[type=\"date\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"date\"].btn,\n .input-group-lg input[type=\"date\"],\n input[type=\"time\"].input-lg,\n .input-group-lg > input[type=\"time\"].form-control,\n .input-group-lg > input[type=\"time\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"time\"].btn,\n .input-group-lg\n input[type=\"time\"],\n input[type=\"datetime-local\"].input-lg,\n .input-group-lg > input[type=\"datetime-local\"].form-control,\n .input-group-lg > input[type=\"datetime-local\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"datetime-local\"].btn,\n .input-group-lg\n input[type=\"datetime-local\"],\n input[type=\"month\"].input-lg,\n .input-group-lg > input[type=\"month\"].form-control,\n .input-group-lg > input[type=\"month\"].input-group-addon,\n .input-group-lg > .input-group-btn > input[type=\"month\"].btn,\n .input-group-lg\n input[type=\"month\"] {\n line-height: 46px; } }\n\n.form-group {\n margin-bottom: 15px; }\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px; }\n .radio label,\n .checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer; }\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9; }\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; }\n\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer; }\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; }\n\ninput[type=\"radio\"][disabled], input[type=\"radio\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled]\ninput[type=\"checkbox\"] {\n cursor: not-allowed; }\n\n.radio-inline.disabled,\nfieldset[disabled] .radio-inline,\n.checkbox-inline.disabled,\nfieldset[disabled]\n.checkbox-inline {\n cursor: not-allowed; }\n\n.radio.disabled label,\nfieldset[disabled] .radio label,\n.checkbox.disabled label,\nfieldset[disabled]\n.checkbox label {\n cursor: not-allowed; }\n\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px; }\n .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control,\n .input-group-lg > .form-control-static.input-group-addon,\n .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control,\n .input-group-sm > .form-control-static.input-group-addon,\n .input-group-sm > .input-group-btn > .form-control-static.btn {\n padding-left: 0;\n padding-right: 0; }\n\n.input-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\nselect.input-sm, .input-group-sm > select.form-control,\n.input-group-sm > select.input-group-addon,\n.input-group-sm > .input-group-btn > select.btn {\n height: 30px;\n line-height: 30px; }\n\ntextarea.input-sm, .input-group-sm > textarea.form-control,\n.input-group-sm > textarea.input-group-addon,\n.input-group-sm > .input-group-btn > textarea.btn,\nselect[multiple].input-sm,\n.input-group-sm > select[multiple].form-control,\n.input-group-sm > select[multiple].input-group-addon,\n.input-group-sm > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px; }\n\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto; }\n\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5; }\n\n.input-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px; }\n\nselect.input-lg, .input-group-lg > select.form-control,\n.input-group-lg > select.input-group-addon,\n.input-group-lg > .input-group-btn > select.btn {\n height: 46px;\n line-height: 46px; }\n\ntextarea.input-lg, .input-group-lg > textarea.form-control,\n.input-group-lg > textarea.input-group-addon,\n.input-group-lg > .input-group-btn > textarea.btn,\nselect[multiple].input-lg,\n.input-group-lg > select[multiple].form-control,\n.input-group-lg > select[multiple].input-group-addon,\n.input-group-lg > .input-group-btn > select[multiple].btn {\n height: auto; }\n\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px; }\n\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px; }\n\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto; }\n\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333; }\n\n.has-feedback {\n position: relative; }\n .has-feedback .form-control {\n padding-right: 42.5px; }\n\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none; }\n\n.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback,\n.input-group-lg > .input-group-addon + .form-control-feedback,\n.input-group-lg > .input-group-btn > .btn + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px; }\n\n.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback,\n.input-group-sm > .input-group-addon + .form-control-feedback,\n.input-group-sm > .input-group-btn > .btn + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px; }\n\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d; }\n\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }\n\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8; }\n\n.has-success .form-control-feedback {\n color: #3c763d; }\n\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b; }\n\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }\n\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3; }\n\n.has-warning .form-control-feedback {\n color: #8a6d3b; }\n\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442; }\n\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n .has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }\n\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede; }\n\n.has-error .form-control-feedback {\n color: #a94442; }\n\n.has-feedback label ~ .form-control-feedback {\n top: 25px; }\n\n.has-feedback label.sr-only ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"incrementHours\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"incrementHours\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"incrementMinutes\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"incrementMinutes\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"decrementHours\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"decrementHours\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"decrementMinutes\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"decrementMinutes\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"showHours\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"showHours\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"showMinutes\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"showMinutes\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"togglePeriod\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"togglePeriod\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"clear\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"clear\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.btn[data-action=\"today\"]::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.btn[data-action=\"today\"]::after ~ .form-control-feedback, .has-feedback .bootstrap-datetimepicker-widget label.picker-switch::after ~ .form-control-feedback, .bootstrap-datetimepicker-widget .has-feedback label.picker-switch::after ~ .form-control-feedback {\n top: 0; }\n\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373; }\n\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle; }\n .form-inline .form-control-static {\n display: inline-block; }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle; }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto; }\n .form-inline .input-group > .form-control {\n width: 100%; }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle; }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0; }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0; }\n .form-inline .has-feedback .form-control-feedback {\n top: 0; } }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px; }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px; }\n\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px; }\n .form-horizontal .form-group:before, .form-horizontal .form-group:after {\n content: \" \";\n display: table; }\n .form-horizontal .form-group:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px; } }\n\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px; }\n\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px; } }\n\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px; } }\n\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.428571429;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px; }\n .btn:hover, .btn:focus, .btn.focus {\n color: #333;\n text-decoration: none; }\n .btn:active, .btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .btn.disabled, .btn[disabled],\n fieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none; }\n\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none; }\n\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc; }\n .btn-default:focus, .btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c; }\n .btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .btn-default:active, .btn-default.active,\n .open > .btn-default.dropdown-toggle {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad; }\n .btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus,\n .open > .btn-default.dropdown-toggle:hover,\n .open > .btn-default.dropdown-toggle:focus,\n .open > .btn-default.dropdown-toggle.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c; }\n .btn-default:active, .btn-default.active,\n .open > .btn-default.dropdown-toggle {\n background-image: none; }\n .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus,\n fieldset[disabled] .btn-default:hover,\n fieldset[disabled] .btn-default:focus,\n fieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc; }\n .btn-default .badge {\n color: #fff;\n background-color: #333; }\n\n.btn-primary {\n color: #fff;\n background-color: #2487ca;\n border-color: #2079b4; }\n .btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #1c6a9f;\n border-color: #0d3048; }\n .btn-primary:hover {\n color: #fff;\n background-color: #1c6a9f;\n border-color: #175680; }\n .btn-primary:active, .btn-primary.active,\n .open > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #1c6a9f;\n border-color: #175680; }\n .btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus,\n .open > .btn-primary.dropdown-toggle:hover,\n .open > .btn-primary.dropdown-toggle:focus,\n .open > .btn-primary.dropdown-toggle.focus {\n color: #fff;\n background-color: #175680;\n border-color: #0d3048; }\n .btn-primary:active, .btn-primary.active,\n .open > .btn-primary.dropdown-toggle {\n background-image: none; }\n .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus,\n fieldset[disabled] .btn-primary:hover,\n fieldset[disabled] .btn-primary:focus,\n fieldset[disabled] .btn-primary.focus {\n background-color: #2487ca;\n border-color: #2079b4; }\n .btn-primary .badge {\n color: #2487ca;\n background-color: #fff; }\n\n.btn-success {\n color: #fff;\n background-color: #27ae60;\n border-color: #229955; }\n .btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #1e8449;\n border-color: #0b311b; }\n .btn-success:hover {\n color: #fff;\n background-color: #1e8449;\n border-color: #176739; }\n .btn-success:active, .btn-success.active,\n .open > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e8449;\n border-color: #176739; }\n .btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus,\n .open > .btn-success.dropdown-toggle:hover,\n .open > .btn-success.dropdown-toggle:focus,\n .open > .btn-success.dropdown-toggle.focus {\n color: #fff;\n background-color: #176739;\n border-color: #0b311b; }\n .btn-success:active, .btn-success.active,\n .open > .btn-success.dropdown-toggle {\n background-image: none; }\n .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus,\n fieldset[disabled] .btn-success:hover,\n fieldset[disabled] .btn-success:focus,\n fieldset[disabled] .btn-success.focus {\n background-color: #27ae60;\n border-color: #229955; }\n .btn-success .badge {\n color: #27ae60;\n background-color: #fff; }\n\n.btn-info {\n color: #fff;\n background-color: #2980b9;\n border-color: #2472a4; }\n .btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #20638f;\n border-color: #0d293c; }\n .btn-info:hover {\n color: #fff;\n background-color: #20638f;\n border-color: #194f72; }\n .btn-info:active, .btn-info.active,\n .open > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #20638f;\n border-color: #194f72; }\n .btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus,\n .open > .btn-info.dropdown-toggle:hover,\n .open > .btn-info.dropdown-toggle:focus,\n .open > .btn-info.dropdown-toggle.focus {\n color: #fff;\n background-color: #194f72;\n border-color: #0d293c; }\n .btn-info:active, .btn-info.active,\n .open > .btn-info.dropdown-toggle {\n background-image: none; }\n .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus,\n fieldset[disabled] .btn-info:hover,\n fieldset[disabled] .btn-info:focus,\n fieldset[disabled] .btn-info.focus {\n background-color: #2980b9;\n border-color: #2472a4; }\n .btn-info .badge {\n color: #2980b9;\n background-color: #fff; }\n\n.btn-warning {\n color: #fff;\n background-color: #e67e22;\n border-color: #d67118; }\n .btn-warning:focus, .btn-warning.focus {\n color: #fff;\n background-color: #bf6516;\n border-color: #64350b; }\n .btn-warning:hover {\n color: #fff;\n background-color: #bf6516;\n border-color: #9f5412; }\n .btn-warning:active, .btn-warning.active,\n .open > .btn-warning.dropdown-toggle {\n color: #fff;\n background-color: #bf6516;\n border-color: #9f5412; }\n .btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus,\n .open > .btn-warning.dropdown-toggle:hover,\n .open > .btn-warning.dropdown-toggle:focus,\n .open > .btn-warning.dropdown-toggle.focus {\n color: #fff;\n background-color: #9f5412;\n border-color: #64350b; }\n .btn-warning:active, .btn-warning.active,\n .open > .btn-warning.dropdown-toggle {\n background-image: none; }\n .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus,\n fieldset[disabled] .btn-warning:hover,\n fieldset[disabled] .btn-warning:focus,\n fieldset[disabled] .btn-warning.focus {\n background-color: #e67e22;\n border-color: #d67118; }\n .btn-warning .badge {\n color: #e67e22;\n background-color: #fff; }\n\n.btn-danger {\n color: #fff;\n background-color: #c0392b;\n border-color: #ab3326; }\n .btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #962d22;\n border-color: #43140f; }\n .btn-danger:hover {\n color: #fff;\n background-color: #962d22;\n border-color: #79241b; }\n .btn-danger:active, .btn-danger.active,\n .open > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #962d22;\n border-color: #79241b; }\n .btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus,\n .open > .btn-danger.dropdown-toggle:hover,\n .open > .btn-danger.dropdown-toggle:focus,\n .open > .btn-danger.dropdown-toggle.focus {\n color: #fff;\n background-color: #79241b;\n border-color: #43140f; }\n .btn-danger:active, .btn-danger.active,\n .open > .btn-danger.dropdown-toggle {\n background-image: none; }\n .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus,\n fieldset[disabled] .btn-danger:hover,\n fieldset[disabled] .btn-danger:focus,\n fieldset[disabled] .btn-danger.focus {\n background-color: #c0392b;\n border-color: #ab3326; }\n .btn-danger .badge {\n color: #c0392b;\n background-color: #fff; }\n\n.btn-link {\n color: #2487ca;\n font-weight: normal;\n border-radius: 0; }\n .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled],\n fieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none; }\n .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {\n border-color: transparent; }\n .btn-link:hover, .btn-link:focus {\n color: #185c89;\n text-decoration: underline;\n background-color: transparent; }\n .btn-link[disabled]:hover, .btn-link[disabled]:focus,\n fieldset[disabled] .btn-link:hover,\n fieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none; }\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px; }\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.btn-xs, .btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px; }\n\n.btn-block {\n display: block;\n width: 100%; }\n\n.btn-block + .btn-block {\n margin-top: 5px; }\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%; }\n\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear; }\n .fade.in {\n opacity: 1; }\n\n.collapse {\n display: none; }\n .collapse.in {\n display: block; }\n\ntr.collapse.in {\n display: table-row; }\n\ntbody.collapse.in {\n display: table-row-group; }\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease; }\n\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent; }\n\n.dropup,\n.dropdown {\n position: relative; }\n\n.dropdown-toggle:focus {\n outline: 0; }\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box; }\n .dropdown-menu.pull-right, .panel .panel-footer .dropdown-menu.tools-footer {\n right: 0;\n left: auto; }\n .dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5; }\n .dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.428571429;\n color: #333333;\n white-space: nowrap; }\n\n.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5; }\n\n.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #2487ca; }\n\n.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n color: #777777; }\n\n.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed; }\n\n.open > .dropdown-menu {\n display: block; }\n\n.open > a {\n outline: 0; }\n\n.dropdown-menu-right {\n left: auto;\n right: 0; }\n\n.dropdown-menu-left {\n left: 0;\n right: auto; }\n\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.428571429;\n color: #777777;\n white-space: nowrap; }\n\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990; }\n\n.pull-right > .dropdown-menu, .panel .panel-footer .tools-footer > .dropdown-menu {\n right: 0;\n left: auto; }\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\"; }\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px; }\n\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto; }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto; } }\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; }\n .btn-group > .btn,\n .btn-group-vertical > .btn {\n position: relative;\n float: left; }\n .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n .btn-group-vertical > .btn:hover,\n .btn-group-vertical > .btn:focus,\n .btn-group-vertical > .btn:active,\n .btn-group-vertical > .btn.active {\n z-index: 2; }\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px; }\n\n.btn-toolbar {\n margin-left: -5px; }\n .btn-toolbar:before, .btn-toolbar:after {\n content: \" \";\n display: table; }\n .btn-toolbar:after {\n clear: both; }\n .btn-toolbar .btn,\n .btn-toolbar .btn-group,\n .btn-toolbar .input-group {\n float: left; }\n .btn-toolbar > .btn,\n .btn-toolbar > .btn-group,\n .btn-toolbar > .input-group {\n margin-left: 5px; }\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0; }\n\n.btn-group > .btn:first-child {\n margin-left: 0; }\n .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group > .btn-group {\n float: left; }\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0; }\n\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px; }\n\n.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px; }\n\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n .btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none; }\n\n.btn .caret {\n margin-left: 0; }\n\n.btn-lg .caret, .btn-group-lg > .btn .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0; }\n\n.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret {\n border-width: 0 5px 5px; }\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%; }\n\n.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {\n content: \" \";\n display: table; }\n\n.btn-group-vertical > .btn-group:after {\n clear: both; }\n\n.btn-group-vertical > .btn-group > .btn {\n float: none; }\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0; }\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px; }\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0; }\n\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate; }\n .btn-group-justified > .btn,\n .btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%; }\n .btn-group-justified > .btn-group .btn {\n width: 100%; }\n .btn-group-justified > .btn-group .dropdown-menu {\n left: auto; }\n\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none; }\n\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate; }\n .input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0; }\n .input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0; }\n .input-group .form-control:focus {\n z-index: 3; }\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell; }\n .input-group-addon:not(:first-child):not(:last-child),\n .input-group-btn:not(:first-child):not(:last-child),\n .input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0; }\n\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; }\n\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px; }\n .input-group-addon.input-sm,\n .input-group-sm > .input-group-addon,\n .input-group-sm > .input-group-btn > .input-group-addon.btn {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px; }\n .input-group-addon.input-lg,\n .input-group-lg > .input-group-addon,\n .input-group-lg > .input-group-btn > .input-group-addon.btn {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px; }\n .input-group-addon input[type=\"radio\"],\n .input-group-addon input[type=\"checkbox\"] {\n margin-top: 0; }\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0; }\n\n.input-group-addon:first-child {\n border-right: 0; }\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0; }\n\n.input-group-addon:last-child {\n border-left: 0; }\n\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap; }\n .input-group-btn > .btn {\n position: relative; }\n .input-group-btn > .btn + .btn {\n margin-left: -1px; }\n .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active {\n z-index: 2; }\n .input-group-btn:first-child > .btn,\n .input-group-btn:first-child > .btn-group {\n margin-right: -1px; }\n .input-group-btn:last-child > .btn,\n .input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px; }\n\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none; }\n .nav:before, .nav:after {\n content: \" \";\n display: table; }\n .nav:after {\n clear: both; }\n .nav > li {\n position: relative;\n display: block; }\n .nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px; }\n .nav > li > a:hover, .nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee; }\n .nav > li.disabled > a {\n color: #777777; }\n .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed; }\n .nav .open > a, .nav .open > a:hover, .nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #2487ca; }\n .nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5; }\n .nav > li > a > img {\n max-width: none; }\n\n.nav-tabs {\n border-bottom: 1px solid #ddd; }\n .nav-tabs > li {\n float: left;\n margin-bottom: -1px; }\n .nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.428571429;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0; }\n .nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd; }\n .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default; }\n\n.nav-pills > li {\n float: left; }\n .nav-pills > li > a {\n border-radius: 4px; }\n .nav-pills > li + li {\n margin-left: 2px; }\n .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #2487ca; }\n\n.nav-stacked > li {\n float: none; }\n .nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0; }\n\n.nav-justified, .nav-tabs.nav-justified {\n width: 100%; }\n .nav-justified > li, .nav-tabs.nav-justified > li {\n float: none; }\n .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px; }\n .nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto; }\n @media (min-width: 768px) {\n .nav-justified > li, .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%; }\n .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n margin-bottom: 0; } }\n\n.nav-tabs-justified, .nav-tabs.nav-justified {\n border-bottom: 0; }\n .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px; }\n .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd; }\n @media (min-width: 768px) {\n .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0; }\n .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff; } }\n\n.tab-content > .tab-pane {\n display: none; }\n\n.tab-content > .active {\n display: block; }\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent; }\n .navbar:before, .navbar:after {\n content: \" \";\n display: table; }\n .navbar:after {\n clear: both; }\n @media (min-width: 768px) {\n .navbar {\n border-radius: 4px; } }\n\n.navbar-header:before, .navbar-header:after {\n content: \" \";\n display: table; }\n\n.navbar-header:after {\n clear: both; }\n\n@media (min-width: 768px) {\n .navbar-header {\n float: left; } }\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch; }\n .navbar-collapse:before, .navbar-collapse:after {\n content: \" \";\n display: table; }\n .navbar-collapse:after {\n clear: both; }\n .navbar-collapse.in {\n overflow-y: auto; }\n @media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none; }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important; }\n .navbar-collapse.in {\n overflow-y: visible; }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0; } }\n\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px; }\n @media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px; } }\n\n.container > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-header,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px; }\n @media (min-width: 768px) {\n .container > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-header,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0; } }\n\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px; }\n @media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0; } }\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030; }\n @media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0; } }\n\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px; }\n\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0; }\n\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px; }\n .navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none; }\n .navbar-brand > img {\n display: block; }\n @media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px; } }\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px; }\n .navbar-toggle:focus {\n outline: 0; }\n .navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px; }\n .navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px; }\n @media (min-width: 768px) {\n .navbar-toggle {\n display: none; } }\n\n.navbar-nav {\n margin: 7.5px -15px; }\n .navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px; }\n @media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none; }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px; }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px; }\n .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none; } }\n @media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0; }\n .navbar-nav > li {\n float: left; }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px; } }\n\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px; }\n @media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle; }\n .navbar-form .form-control-static {\n display: inline-block; }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle; }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto; }\n .navbar-form .input-group > .form-control {\n width: 100%; }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle; }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0; }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0; }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0; } }\n @media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px; }\n .navbar-form .form-group:last-child {\n margin-bottom: 0; } }\n @media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none; } }\n\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px; }\n .navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn {\n margin-top: 10px;\n margin-bottom: 10px; }\n .navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn {\n margin-top: 14px;\n margin-bottom: 14px; }\n\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px; }\n @media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px; } }\n\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important; }\n .navbar-right {\n float: right !important;\n margin-right: -15px; }\n .navbar-right ~ .navbar-right {\n margin-right: 0; } }\n\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7; }\n .navbar-default .navbar-brand {\n color: #777; }\n .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent; }\n .navbar-default .navbar-text {\n color: #777; }\n .navbar-default .navbar-nav > li > a {\n color: #777; }\n .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent; }\n .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7; }\n .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent; }\n .navbar-default .navbar-toggle {\n border-color: #ddd; }\n .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {\n background-color: #ddd; }\n .navbar-default .navbar-toggle .icon-bar {\n background-color: #888; }\n .navbar-default .navbar-collapse,\n .navbar-default .navbar-form {\n border-color: #e7e7e7; }\n .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555; }\n @media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777; }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent; }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7; }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent; } }\n .navbar-default .navbar-link {\n color: #777; }\n .navbar-default .navbar-link:hover {\n color: #333; }\n .navbar-default .btn-link {\n color: #777; }\n .navbar-default .btn-link:hover, .navbar-default .btn-link:focus {\n color: #333; }\n .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus,\n fieldset[disabled] .navbar-default .btn-link:hover,\n fieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc; }\n\n.navbar-inverse {\n background-color: #222;\n border-color: #090909; }\n .navbar-inverse .navbar-brand {\n color: #9d9d9d; }\n .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-text {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #090909; }\n .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent; }\n .navbar-inverse .navbar-toggle {\n border-color: #333; }\n .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {\n background-color: #333; }\n .navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff; }\n .navbar-inverse .navbar-collapse,\n .navbar-inverse .navbar-form {\n border-color: #101010; }\n .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #090909;\n color: #fff; }\n @media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #090909; }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent; } }\n .navbar-inverse .navbar-link {\n color: #9d9d9d; }\n .navbar-inverse .navbar-link:hover {\n color: #fff; }\n .navbar-inverse .btn-link {\n color: #9d9d9d; }\n .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {\n color: #fff; }\n .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus,\n fieldset[disabled] .navbar-inverse .btn-link:hover,\n fieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444; }\n\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px; }\n .breadcrumb > li {\n display: inline-block; }\n .breadcrumb > li + li:before {\n content: \"/ \";\n padding: 0 5px;\n color: #ccc; }\n .breadcrumb > .active {\n color: #777777; }\n\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px; }\n .pagination > li {\n display: inline; }\n .pagination > li > a,\n .pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.428571429;\n text-decoration: none;\n color: #2487ca;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px; }\n .pagination > li:first-child > a,\n .pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px; }\n .pagination > li:last-child > a,\n .pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px; }\n .pagination > li > a:hover, .pagination > li > a:focus,\n .pagination > li > span:hover,\n .pagination > li > span:focus {\n z-index: 2;\n color: #185c89;\n background-color: #eeeeee;\n border-color: #ddd; }\n .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,\n .pagination > .active > span,\n .pagination > .active > span:hover,\n .pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #2487ca;\n border-color: #2487ca;\n cursor: default; }\n .pagination > .disabled > span,\n .pagination > .disabled > span:hover,\n .pagination > .disabled > span:focus,\n .pagination > .disabled > a,\n .pagination > .disabled > a:hover,\n .pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed; }\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333; }\n\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px; }\n\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px; }\n\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5; }\n\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px; }\n\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px; }\n\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center; }\n .pager:before, .pager:after {\n content: \" \";\n display: table; }\n .pager:after {\n clear: both; }\n .pager li {\n display: inline; }\n .pager li > a,\n .pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px; }\n .pager li > a:hover,\n .pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee; }\n .pager .next > a,\n .pager .next > span {\n float: right; }\n .pager .previous > a,\n .pager .previous > span {\n float: left; }\n .pager .disabled > a,\n .pager .disabled > a:hover,\n .pager .disabled > a:focus,\n .pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed; }\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em; }\n .label:empty {\n display: none; }\n .btn .label {\n position: relative;\n top: -1px; }\n\na.label:hover, a.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer; }\n\n.label-default {\n background-color: #777777; }\n .label-default[href]:hover, .label-default[href]:focus {\n background-color: #5e5e5e; }\n\n.label-primary {\n background-color: #2487ca; }\n .label-primary[href]:hover, .label-primary[href]:focus {\n background-color: #1c6a9f; }\n\n.label-success {\n background-color: #27ae60; }\n .label-success[href]:hover, .label-success[href]:focus {\n background-color: #1e8449; }\n\n.label-info {\n background-color: #2980b9; }\n .label-info[href]:hover, .label-info[href]:focus {\n background-color: #20638f; }\n\n.label-warning {\n background-color: #e67e22; }\n .label-warning[href]:hover, .label-warning[href]:focus {\n background-color: #bf6516; }\n\n.label-danger {\n background-color: #c0392b; }\n .label-danger[href]:hover, .label-danger[href]:focus {\n background-color: #962d22; }\n\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px; }\n .badge:empty {\n display: none; }\n .btn .badge {\n position: relative;\n top: -1px; }\n .btn-xs .badge, .btn-group-xs > .btn .badge,\n .btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px; }\n .list-group-item.active > .badge,\n .nav-pills > .active > a > .badge {\n color: #2487ca;\n background-color: #fff; }\n .list-group-item > .badge {\n float: right; }\n .list-group-item > .badge + .badge {\n margin-right: 5px; }\n .nav-pills > li > a > .badge {\n margin-left: 3px; }\n\na.badge:hover, a.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer; }\n\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee; }\n .jumbotron h1,\n .jumbotron .h1 {\n color: inherit; }\n .jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200; }\n .jumbotron > hr {\n border-top-color: #d5d5d5; }\n .container .jumbotron,\n .container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px; }\n .jumbotron .container {\n max-width: 100%; }\n @media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px; }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px; }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px; } }\n\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.428571429;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out; }\n .thumbnail > img,\n .thumbnail a > img {\n display: block;\n max-width: 100%;\n height: auto;\n margin-left: auto;\n margin-right: auto; }\n .thumbnail .caption {\n padding: 9px;\n color: #333333; }\n\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #2487ca; }\n\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px; }\n .alert h4 {\n margin-top: 0;\n color: inherit; }\n .alert .alert-link {\n font-weight: bold; }\n .alert > p,\n .alert > ul {\n margin-bottom: 0; }\n .alert > p + p {\n margin-top: 5px; }\n\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px; }\n .alert-dismissable .close,\n .alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit; }\n\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d; }\n .alert-success hr {\n border-top-color: #c9e2b3; }\n .alert-success .alert-link {\n color: #2b542c; }\n\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f; }\n .alert-info hr {\n border-top-color: #a6e1ec; }\n .alert-info .alert-link {\n color: #245269; }\n\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b; }\n .alert-warning hr {\n border-top-color: #f7e1b5; }\n .alert-warning .alert-link {\n color: #66512c; }\n\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442; }\n .alert-danger hr {\n border-top-color: #e4b9c0; }\n .alert-danger .alert-link {\n color: #843534; }\n\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0; }\n to {\n background-position: 0 0; } }\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0; }\n to {\n background-position: 0 0; } }\n\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); }\n\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #2487ca;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease; }\n\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px; }\n\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite; }\n\n.progress-bar-success {\n background-color: #27ae60; }\n .progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-info {\n background-color: #2980b9; }\n .progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-warning {\n background-color: #e67e22; }\n .progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-danger {\n background-color: #c0392b; }\n .progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.media {\n margin-top: 15px; }\n .media:first-child {\n margin-top: 0; }\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden; }\n\n.media-body {\n width: 10000px; }\n\n.media-object {\n display: block; }\n .media-object.img-thumbnail {\n max-width: none; }\n\n.media-right,\n.media > .pull-right, .panel .panel-footer\n.media > .tools-footer {\n padding-left: 10px; }\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px; }\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top; }\n\n.media-middle {\n vertical-align: middle; }\n\n.media-bottom {\n vertical-align: bottom; }\n\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px; }\n\n.media-list {\n padding-left: 0;\n list-style: none; }\n\n.list-group {\n margin-bottom: 20px;\n padding-left: 0; }\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd; }\n .list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px; }\n .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px; }\n\na.list-group-item,\nbutton.list-group-item {\n color: #555; }\n a.list-group-item .list-group-item-heading,\n button.list-group-item .list-group-item-heading {\n color: #333; }\n a.list-group-item:hover, a.list-group-item:focus,\n button.list-group-item:hover,\n button.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5; }\n\nbutton.list-group-item {\n width: 100%;\n text-align: left; }\n\n.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed; }\n .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading {\n color: inherit; }\n .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text {\n color: #777777; }\n\n.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #2487ca;\n border-color: #2487ca; }\n .list-group-item.active .list-group-item-heading,\n .list-group-item.active .list-group-item-heading > small,\n .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading,\n .list-group-item.active:hover .list-group-item-heading > small,\n .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading,\n .list-group-item.active:focus .list-group-item-heading > small,\n .list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit; }\n .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {\n color: #c5e2f5; }\n\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8; }\n\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d; }\n a.list-group-item-success .list-group-item-heading,\n button.list-group-item-success .list-group-item-heading {\n color: inherit; }\n a.list-group-item-success:hover, a.list-group-item-success:focus,\n button.list-group-item-success:hover,\n button.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6; }\n a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus,\n button.list-group-item-success.active,\n button.list-group-item-success.active:hover,\n button.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d; }\n\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7; }\n\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f; }\n a.list-group-item-info .list-group-item-heading,\n button.list-group-item-info .list-group-item-heading {\n color: inherit; }\n a.list-group-item-info:hover, a.list-group-item-info:focus,\n button.list-group-item-info:hover,\n button.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3; }\n a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus,\n button.list-group-item-info.active,\n button.list-group-item-info.active:hover,\n button.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f; }\n\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3; }\n\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b; }\n a.list-group-item-warning .list-group-item-heading,\n button.list-group-item-warning .list-group-item-heading {\n color: inherit; }\n a.list-group-item-warning:hover, a.list-group-item-warning:focus,\n button.list-group-item-warning:hover,\n button.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc; }\n a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus,\n button.list-group-item-warning.active,\n button.list-group-item-warning.active:hover,\n button.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b; }\n\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede; }\n\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442; }\n a.list-group-item-danger .list-group-item-heading,\n button.list-group-item-danger .list-group-item-heading {\n color: inherit; }\n a.list-group-item-danger:hover, a.list-group-item-danger:focus,\n button.list-group-item-danger:hover,\n button.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc; }\n a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus,\n button.list-group-item-danger.active,\n button.list-group-item-danger.active:hover,\n button.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442; }\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px; }\n\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3; }\n\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); }\n\n.panel-body {\n padding: 15px; }\n .panel-body:before, .panel-body:after {\n content: \" \";\n display: table; }\n .panel-body:after {\n clear: both; }\n\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px; }\n .panel-heading > .dropdown .dropdown-toggle {\n color: inherit; }\n\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit; }\n .panel-title > a,\n .panel-title > small,\n .panel-title > .small,\n .panel-title > small > a,\n .panel-title > .small > a {\n color: inherit; }\n\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px; }\n\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0; }\n .panel > .list-group .list-group-item,\n .panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0; }\n .panel > .list-group:first-child .list-group-item:first-child,\n .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px; }\n .panel > .list-group:last-child .list-group-item:last-child,\n .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px; }\n\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0; }\n\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0; }\n\n.list-group + .panel-footer {\n border-top-width: 0; }\n\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0; }\n .panel > .table caption,\n .panel > .table-responsive > .table caption,\n .panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px; }\n\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px; }\n .panel > .table:first-child > thead:first-child > tr:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px; }\n .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px; }\n .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px; }\n\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px; }\n .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px; }\n\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd; }\n\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0; }\n\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0; }\n .panel > .table-bordered > thead > tr > th:first-child,\n .panel > .table-bordered > thead > tr > td:first-child,\n .panel > .table-bordered > tbody > tr > th:first-child,\n .panel > .table-bordered > tbody > tr > td:first-child,\n .panel > .table-bordered > tfoot > tr > th:first-child,\n .panel > .table-bordered > tfoot > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0; }\n .panel > .table-bordered > thead > tr > th:last-child,\n .panel > .table-bordered > thead > tr > td:last-child,\n .panel > .table-bordered > tbody > tr > th:last-child,\n .panel > .table-bordered > tbody > tr > td:last-child,\n .panel > .table-bordered > tfoot > tr > th:last-child,\n .panel > .table-bordered > tfoot > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0; }\n .panel > .table-bordered > thead > tr:first-child > td,\n .panel > .table-bordered > thead > tr:first-child > th,\n .panel > .table-bordered > tbody > tr:first-child > td,\n .panel > .table-bordered > tbody > tr:first-child > th,\n .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0; }\n .panel > .table-bordered > tbody > tr:last-child > td,\n .panel > .table-bordered > tbody > tr:last-child > th,\n .panel > .table-bordered > tfoot > tr:last-child > td,\n .panel > .table-bordered > tfoot > tr:last-child > th,\n .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0; }\n\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0; }\n\n.panel-group {\n margin-bottom: 20px; }\n .panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px; }\n .panel-group .panel + .panel {\n margin-top: 5px; }\n .panel-group .panel-heading {\n border-bottom: 0; }\n .panel-group .panel-heading + .panel-collapse > .panel-body,\n .panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd; }\n .panel-group .panel-footer {\n border-top: 0; }\n .panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd; }\n\n.panel-default {\n border-color: #ddd; }\n .panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd; }\n .panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd; }\n .panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333; }\n .panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd; }\n\n.panel-primary {\n border-color: #2487ca; }\n .panel-primary > .panel-heading {\n color: #fff;\n background-color: #2487ca;\n border-color: #2487ca; }\n .panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #2487ca; }\n .panel-primary > .panel-heading .badge {\n color: #2487ca;\n background-color: #fff; }\n .panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #2487ca; }\n\n.panel-success {\n border-color: #d6e9c6; }\n .panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6; }\n .panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6; }\n .panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d; }\n .panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6; }\n\n.panel-info {\n border-color: #bce8f1; }\n .panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1; }\n .panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1; }\n .panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f; }\n .panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1; }\n\n.panel-warning {\n border-color: #faebcc; }\n .panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc; }\n .panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc; }\n .panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b; }\n .panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc; }\n\n.panel-danger {\n border-color: #ebccd1; }\n .panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1; }\n .panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1; }\n .panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442; }\n .panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1; }\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden; }\n .embed-responsive .embed-responsive-item,\n .embed-responsive iframe,\n .embed-responsive embed,\n .embed-responsive object,\n .embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0; }\n\n.embed-responsive-16by9 {\n padding-bottom: 56.25%; }\n\n.embed-responsive-4by3 {\n padding-bottom: 75%; }\n\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }\n .well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15); }\n\n.well-lg {\n padding: 24px;\n border-radius: 6px; }\n\n.well-sm {\n padding: 9px;\n border-radius: 3px; }\n\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20); }\n .close:hover, .close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none; }\n\n.modal-open {\n overflow: hidden; }\n\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0; }\n .modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out; }\n .modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0); }\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto; }\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px; }\n\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0; }\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000; }\n .modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0); }\n .modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50); }\n\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5; }\n .modal-header:before, .modal-header:after {\n content: \" \";\n display: table; }\n .modal-header:after {\n clear: both; }\n\n.modal-header .close {\n margin-top: -2px; }\n\n.modal-title {\n margin: 0;\n line-height: 1.428571429; }\n\n.modal-body {\n position: relative;\n padding: 15px; }\n\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5; }\n .modal-footer:before, .modal-footer:after {\n content: \" \";\n display: table; }\n .modal-footer:after {\n clear: both; }\n .modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; }\n .modal-footer .btn-group .btn + .btn {\n margin-left: -1px; }\n .modal-footer .btn-block + .btn-block {\n margin-left: 0; }\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto; }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }\n .modal-sm {\n width: 300px; } }\n\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px; } }\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Roboto\", sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.428571429;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0); }\n .tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90); }\n .tooltip.top {\n margin-top: -3px;\n padding: 5px 0; }\n .tooltip.right {\n margin-left: 3px;\n padding: 0 5px; }\n .tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0; }\n .tooltip.left {\n margin-left: -3px;\n padding: 0 5px; }\n\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px; }\n\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid; }\n\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000; }\n\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000; }\n\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000; }\n\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000; }\n\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000; }\n\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000; }\n\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000; }\n\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000; }\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Roboto\", sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.428571429;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); }\n .popover.top {\n margin-top: -10px; }\n .popover.right {\n margin-left: 10px; }\n .popover.bottom {\n margin-top: 10px; }\n .popover.left {\n margin-left: -10px; }\n\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0; }\n\n.popover-content {\n padding: 9px 14px; }\n\n.popover > .arrow, .popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid; }\n\n.popover > .arrow {\n border-width: 11px; }\n\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\"; }\n\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px; }\n .popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff; }\n\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25); }\n .popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff; }\n\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px; }\n .popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff; }\n\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25); }\n .popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px; }\n\n.carousel {\n position: relative; }\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%; }\n .carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left; }\n .carousel-inner > .item > img,\n .carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n line-height: 1; }\n @media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px; }\n .carousel-inner > .item.next, .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0; }\n .carousel-inner > .item.prev, .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0; }\n .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0; } }\n .carousel-inner > .active,\n .carousel-inner > .next,\n .carousel-inner > .prev {\n display: block; }\n .carousel-inner > .active {\n left: 0; }\n .carousel-inner > .next,\n .carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%; }\n .carousel-inner > .next {\n left: 100%; }\n .carousel-inner > .prev {\n left: -100%; }\n .carousel-inner > .next.left,\n .carousel-inner > .prev.right {\n left: 0; }\n .carousel-inner > .active.left {\n left: -100%; }\n .carousel-inner > .active.right {\n left: 100%; }\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: transparent; }\n .carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); }\n .carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); }\n .carousel-control:hover, .carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90); }\n .carousel-control .icon-prev,\n .carousel-control .icon-next,\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block; }\n .carousel-control .icon-prev,\n .carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px; }\n .carousel-control .icon-next,\n .carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px; }\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif; }\n .carousel-control .icon-prev:before {\n content: '\\2039'; }\n .carousel-control .icon-next:before {\n content: '\\203a'; }\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center; }\n .carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: transparent; }\n .carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff; }\n\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }\n .carousel-caption .btn {\n text-shadow: none; }\n\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px; }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px; }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px; }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px; }\n .carousel-indicators {\n bottom: 20px; } }\n\n.clearfix:before, .clearfix:after {\n content: \" \";\n display: table; }\n\n.clearfix:after {\n clear: both; }\n\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto; }\n\n.pull-right, .panel .panel-footer .tools-footer {\n float: right !important; }\n\n.pull-left {\n float: left !important; }\n\n.hide {\n display: none !important; }\n\n.show {\n display: block !important; }\n\n.invisible {\n visibility: hidden; }\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0; }\n\n.hidden {\n display: none !important; }\n\n.affix {\n position: fixed; }\n\n@-ms-viewport {\n width: device-width; }\n\n.visible-xs {\n display: none !important; }\n\n.visible-sm {\n display: none !important; }\n\n.visible-md {\n display: none !important; }\n\n.visible-lg {\n display: none !important; }\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important; }\n\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important; }\n table.visible-xs {\n display: table !important; }\n tr.visible-xs {\n display: table-row !important; }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important; } }\n\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important; }\n table.visible-sm {\n display: table !important; }\n tr.visible-sm {\n display: table-row !important; }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important; }\n table.visible-md {\n display: table !important; }\n tr.visible-md {\n display: table-row !important; }\n th.visible-md,\n td.visible-md {\n display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important; }\n table.visible-lg {\n display: table !important; }\n tr.visible-lg {\n display: table-row !important; }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important; } }\n\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important; } }\n\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important; } }\n\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important; } }\n\n.visible-print {\n display: none !important; }\n\n@media print {\n .visible-print {\n display: block !important; }\n table.visible-print {\n display: table !important; }\n tr.visible-print {\n display: table-row !important; }\n th.visible-print,\n td.visible-print {\n display: table-cell !important; } }\n\n.visible-print-block {\n display: none !important; }\n @media print {\n .visible-print-block {\n display: block !important; } }\n\n.visible-print-inline {\n display: none !important; }\n @media print {\n .visible-print-inline {\n display: inline !important; } }\n\n.visible-print-inline-block {\n display: none !important; }\n @media print {\n .visible-print-inline-block {\n display: inline-block !important; } }\n\n@media print {\n .hidden-print {\n display: none !important; } }\n\n/*!\n * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n font-family: 'FontAwesome';\n src: url(\"../fonts/fontawesome-webfont.eot?v=4.6.3\");\n src: url(\"../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3\") format(\"embedded-opentype\"), url(\"../fonts/fontawesome-webfont.woff2?v=4.6.3\") format(\"woff2\"), url(\"../fonts/fontawesome-webfont.woff?v=4.6.3\") format(\"woff\"), url(\"../fonts/fontawesome-webfont.ttf?v=4.6.3\") format(\"truetype\"), url(\"../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular\") format(\"svg\");\n font-weight: normal;\n font-style: normal; }\n\n.fa {\n display: inline-block;\n font: normal normal normal 14px/1 FontAwesome;\n font-size: inherit;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n font-size: 1.3333333333em;\n line-height: 0.75em;\n vertical-align: -15%; }\n\n.fa-2x {\n font-size: 2em; }\n\n.fa-3x {\n font-size: 3em; }\n\n.fa-4x {\n font-size: 4em; }\n\n.fa-5x {\n font-size: 5em; }\n\n.fa-fw {\n width: 1.2857142857em;\n text-align: center; }\n\n.fa-ul {\n padding-left: 0;\n margin-left: 2.1428571429em;\n list-style-type: none; }\n .fa-ul > li {\n position: relative; }\n\n.fa-li {\n position: absolute;\n left: -2.1428571429em;\n width: 2.1428571429em;\n top: 0.1428571429em;\n text-align: center; }\n .fa-li.fa-lg {\n left: -1.8571428571em; }\n\n.fa-border {\n padding: .2em .25em .15em;\n border: solid 0.08em #eee;\n border-radius: .1em; }\n\n.fa-pull-left {\n float: left; }\n\n.fa-pull-right {\n float: right; }\n\n.fa.fa-pull-left {\n margin-right: .3em; }\n\n.fa.fa-pull-right {\n margin-left: .3em; }\n\n/* Deprecated as of 4.4.0 */\n.pull-right, .panel .panel-footer .tools-footer {\n float: right; }\n\n.pull-left {\n float: left; }\n\n.fa.pull-left {\n margin-right: .3em; }\n\n.fa.pull-right, .panel .panel-footer .fa.tools-footer {\n margin-left: .3em; }\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg); } }\n\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg); } }\n\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg); }\n\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n -ms-transform: rotate(180deg);\n transform: rotate(180deg); }\n\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n -ms-transform: rotate(270deg);\n transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n -ms-transform: scale(-1, 1);\n transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n -ms-transform: scale(1, -1);\n transform: scale(1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n filter: none; }\n\n.fa-stack {\n position: relative;\n display: inline-block;\n width: 2em;\n height: 2em;\n line-height: 2em;\n vertical-align: middle; }\n\n.fa-stack-1x, .fa-stack-2x {\n position: absolute;\n left: 0;\n width: 100%;\n text-align: center; }\n\n.fa-stack-1x {\n line-height: inherit; }\n\n.fa-stack-2x {\n font-size: 2em; }\n\n.fa-inverse {\n color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters that represent icons */\n.fa-glass:before {\n content: \"\"; }\n\n.fa-music:before {\n content: \"\"; }\n\n.fa-search:before {\n content: \"\"; }\n\n.fa-envelope-o:before {\n content: \"\"; }\n\n.fa-heart:before {\n content: \"\"; }\n\n.fa-star:before {\n content: \"\"; }\n\n.fa-star-o:before {\n content: \"\"; }\n\n.fa-user:before {\n content: \"\"; }\n\n.fa-film:before {\n content: \"\"; }\n\n.fa-th-large:before {\n content: \"\"; }\n\n.fa-th:before {\n content: \"\"; }\n\n.fa-th-list:before {\n content: \"\"; }\n\n.fa-check:before {\n content: \"\"; }\n\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n content: \"\"; }\n\n.fa-search-plus:before {\n content: \"\"; }\n\n.fa-search-minus:before {\n content: \"\"; }\n\n.fa-power-off:before {\n content: \"\"; }\n\n.fa-signal:before {\n content: \"\"; }\n\n.fa-gear:before,\n.fa-cog:before {\n content: \"\"; }\n\n.fa-trash-o:before {\n content: \"\"; }\n\n.fa-home:before {\n content: \"\"; }\n\n.fa-file-o:before {\n content: \"\"; }\n\n.fa-clock-o:before {\n content: \"\"; }\n\n.fa-road:before {\n content: \"\"; }\n\n.fa-download:before {\n content: \"\"; }\n\n.fa-arrow-circle-o-down:before {\n content: \"\"; }\n\n.fa-arrow-circle-o-up:before {\n content: \"\"; }\n\n.fa-inbox:before {\n content: \"\"; }\n\n.fa-play-circle-o:before {\n content: \"\"; }\n\n.fa-rotate-right:before,\n.fa-repeat:before {\n content: \"\"; }\n\n.fa-refresh:before {\n content: \"\"; }\n\n.fa-list-alt:before {\n content: \"\"; }\n\n.fa-lock:before {\n content: \"\"; }\n\n.fa-flag:before {\n content: \"\"; }\n\n.fa-headphones:before {\n content: \"\"; }\n\n.fa-volume-off:before {\n content: \"\"; }\n\n.fa-volume-down:before {\n content: \"\"; }\n\n.fa-volume-up:before {\n content: \"\"; }\n\n.fa-qrcode:before {\n content: \"\"; }\n\n.fa-barcode:before {\n content: \"\"; }\n\n.fa-tag:before {\n content: \"\"; }\n\n.fa-tags:before {\n content: \"\"; }\n\n.fa-book:before {\n content: \"\"; }\n\n.fa-bookmark:before {\n content: \"\"; }\n\n.fa-print:before {\n content: \"\"; }\n\n.fa-camera:before {\n content: \"\"; }\n\n.fa-font:before {\n content: \"\"; }\n\n.fa-bold:before {\n content: \"\"; }\n\n.fa-italic:before {\n content: \"\"; }\n\n.fa-text-height:before {\n content: \"\"; }\n\n.fa-text-width:before {\n content: \"\"; }\n\n.fa-align-left:before {\n content: \"\"; }\n\n.fa-align-center:before {\n content: \"\"; }\n\n.fa-align-right:before {\n content: \"\"; }\n\n.fa-align-justify:before {\n content: \"\"; }\n\n.fa-list:before {\n content: \"\"; }\n\n.fa-dedent:before,\n.fa-outdent:before {\n content: \"\"; }\n\n.fa-indent:before {\n content: \"\"; }\n\n.fa-video-camera:before {\n content: \"\"; }\n\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n content: \"\"; }\n\n.fa-pencil:before {\n content: \"\"; }\n\n.fa-map-marker:before {\n content: \"\"; }\n\n.fa-adjust:before {\n content: \"\"; }\n\n.fa-tint:before {\n content: \"\"; }\n\n.fa-edit:before,\n.fa-pencil-square-o:before {\n content: \"\"; }\n\n.fa-share-square-o:before {\n content: \"\"; }\n\n.fa-check-square-o:before {\n content: \"\"; }\n\n.fa-arrows:before {\n content: \"\"; }\n\n.fa-step-backward:before {\n content: \"\"; }\n\n.fa-fast-backward:before {\n content: \"\"; }\n\n.fa-backward:before {\n content: \"\"; }\n\n.fa-play:before {\n content: \"\"; }\n\n.fa-pause:before {\n content: \"\"; }\n\n.fa-stop:before {\n content: \"\"; }\n\n.fa-forward:before {\n content: \"\"; }\n\n.fa-fast-forward:before {\n content: \"\"; }\n\n.fa-step-forward:before {\n content: \"\"; }\n\n.fa-eject:before {\n content: \"\"; }\n\n.fa-chevron-left:before {\n content: \"\"; }\n\n.fa-chevron-right:before {\n content: \"\"; }\n\n.fa-plus-circle:before {\n content: \"\"; }\n\n.fa-minus-circle:before {\n content: \"\"; }\n\n.fa-times-circle:before {\n content: \"\"; }\n\n.fa-check-circle:before {\n content: \"\"; }\n\n.fa-question-circle:before {\n content: \"\"; }\n\n.fa-info-circle:before {\n content: \"\"; }\n\n.fa-crosshairs:before {\n content: \"\"; }\n\n.fa-times-circle-o:before {\n content: \"\"; }\n\n.fa-check-circle-o:before {\n content: \"\"; }\n\n.fa-ban:before {\n content: \"\"; }\n\n.fa-arrow-left:before {\n content: \"\"; }\n\n.fa-arrow-right:before {\n content: \"\"; }\n\n.fa-arrow-up:before {\n content: \"\"; }\n\n.fa-arrow-down:before {\n content: \"\"; }\n\n.fa-mail-forward:before,\n.fa-share:before {\n content: \"\"; }\n\n.fa-expand:before {\n content: \"\"; }\n\n.fa-compress:before {\n content: \"\"; }\n\n.fa-plus:before {\n content: \"\"; }\n\n.fa-minus:before {\n content: \"\"; }\n\n.fa-asterisk:before {\n content: \"\"; }\n\n.fa-exclamation-circle:before {\n content: \"\"; }\n\n.fa-gift:before {\n content: \"\"; }\n\n.fa-leaf:before {\n content: \"\"; }\n\n.fa-fire:before {\n content: \"\"; }\n\n.fa-eye:before {\n content: \"\"; }\n\n.fa-eye-slash:before {\n content: \"\"; }\n\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n content: \"\"; }\n\n.fa-plane:before {\n content: \"\"; }\n\n.fa-calendar:before {\n content: \"\"; }\n\n.fa-random:before {\n content: \"\"; }\n\n.fa-comment:before {\n content: \"\"; }\n\n.fa-magnet:before {\n content: \"\"; }\n\n.fa-chevron-up:before {\n content: \"\"; }\n\n.fa-chevron-down:before {\n content: \"\"; }\n\n.fa-retweet:before {\n content: \"\"; }\n\n.fa-shopping-cart:before {\n content: \"\"; }\n\n.fa-folder:before {\n content: \"\"; }\n\n.fa-folder-open:before {\n content: \"\"; }\n\n.fa-arrows-v:before {\n content: \"\"; }\n\n.fa-arrows-h:before {\n content: \"\"; }\n\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n content: \"\"; }\n\n.fa-twitter-square:before {\n content: \"\"; }\n\n.fa-facebook-square:before {\n content: \"\"; }\n\n.fa-camera-retro:before {\n content: \"\"; }\n\n.fa-key:before {\n content: \"\"; }\n\n.fa-gears:before,\n.fa-cogs:before {\n content: \"\"; }\n\n.fa-comments:before {\n content: \"\"; }\n\n.fa-thumbs-o-up:before {\n content: \"\"; }\n\n.fa-thumbs-o-down:before {\n content: \"\"; }\n\n.fa-star-half:before {\n content: \"\"; }\n\n.fa-heart-o:before {\n content: \"\"; }\n\n.fa-sign-out:before {\n content: \"\"; }\n\n.fa-linkedin-square:before {\n content: \"\"; }\n\n.fa-thumb-tack:before {\n content: \"\"; }\n\n.fa-external-link:before {\n content: \"\"; }\n\n.fa-sign-in:before {\n content: \"\"; }\n\n.fa-trophy:before {\n content: \"\"; }\n\n.fa-github-square:before {\n content: \"\"; }\n\n.fa-upload:before {\n content: \"\"; }\n\n.fa-lemon-o:before {\n content: \"\"; }\n\n.fa-phone:before {\n content: \"\"; }\n\n.fa-square-o:before {\n content: \"\"; }\n\n.fa-bookmark-o:before {\n content: \"\"; }\n\n.fa-phone-square:before {\n content: \"\"; }\n\n.fa-twitter:before {\n content: \"\"; }\n\n.fa-facebook-f:before,\n.fa-facebook:before {\n content: \"\"; }\n\n.fa-github:before {\n content: \"\"; }\n\n.fa-unlock:before {\n content: \"\"; }\n\n.fa-credit-card:before {\n content: \"\"; }\n\n.fa-feed:before,\n.fa-rss:before {\n content: \"\"; }\n\n.fa-hdd-o:before {\n content: \"\"; }\n\n.fa-bullhorn:before {\n content: \"\"; }\n\n.fa-bell:before {\n content: \"\"; }\n\n.fa-certificate:before {\n content: \"\"; }\n\n.fa-hand-o-right:before {\n content: \"\"; }\n\n.fa-hand-o-left:before {\n content: \"\"; }\n\n.fa-hand-o-up:before {\n content: \"\"; }\n\n.fa-hand-o-down:before {\n content: \"\"; }\n\n.fa-arrow-circle-left:before {\n content: \"\"; }\n\n.fa-arrow-circle-right:before {\n content: \"\"; }\n\n.fa-arrow-circle-up:before {\n content: \"\"; }\n\n.fa-arrow-circle-down:before {\n content: \"\"; }\n\n.fa-globe:before {\n content: \"\"; }\n\n.fa-wrench:before {\n content: \"\"; }\n\n.fa-tasks:before {\n content: \"\"; }\n\n.fa-filter:before {\n content: \"\"; }\n\n.fa-briefcase:before {\n content: \"\"; }\n\n.fa-arrows-alt:before {\n content: \"\"; }\n\n.fa-group:before,\n.fa-users:before {\n content: \"\"; }\n\n.fa-chain:before,\n.fa-link:before {\n content: \"\"; }\n\n.fa-cloud:before {\n content: \"\"; }\n\n.fa-flask:before {\n content: \"\"; }\n\n.fa-cut:before,\n.fa-scissors:before {\n content: \"\"; }\n\n.fa-copy:before,\n.fa-files-o:before {\n content: \"\"; }\n\n.fa-paperclip:before {\n content: \"\"; }\n\n.fa-save:before,\n.fa-floppy-o:before {\n content: \"\"; }\n\n.fa-square:before {\n content: \"\"; }\n\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n content: \"\"; }\n\n.fa-list-ul:before {\n content: \"\"; }\n\n.fa-list-ol:before {\n content: \"\"; }\n\n.fa-strikethrough:before {\n content: \"\"; }\n\n.fa-underline:before {\n content: \"\"; }\n\n.fa-table:before {\n content: \"\"; }\n\n.fa-magic:before {\n content: \"\"; }\n\n.fa-truck:before {\n content: \"\"; }\n\n.fa-pinterest:before {\n content: \"\"; }\n\n.fa-pinterest-square:before {\n content: \"\"; }\n\n.fa-google-plus-square:before {\n content: \"\"; }\n\n.fa-google-plus:before {\n content: \"\"; }\n\n.fa-money:before {\n content: \"\"; }\n\n.fa-caret-down:before {\n content: \"\"; }\n\n.fa-caret-up:before {\n content: \"\"; }\n\n.fa-caret-left:before {\n content: \"\"; }\n\n.fa-caret-right:before {\n content: \"\"; }\n\n.fa-columns:before {\n content: \"\"; }\n\n.fa-unsorted:before,\n.fa-sort:before {\n content: \"\"; }\n\n.fa-sort-down:before,\n.fa-sort-desc:before {\n content: \"\"; }\n\n.fa-sort-up:before,\n.fa-sort-asc:before {\n content: \"\"; }\n\n.fa-envelope:before {\n content: \"\"; }\n\n.fa-linkedin:before {\n content: \"\"; }\n\n.fa-rotate-left:before,\n.fa-undo:before {\n content: \"\"; }\n\n.fa-legal:before,\n.fa-gavel:before {\n content: \"\"; }\n\n.fa-dashboard:before,\n.fa-tachometer:before {\n content: \"\"; }\n\n.fa-comment-o:before {\n content: \"\"; }\n\n.fa-comments-o:before {\n content: \"\"; }\n\n.fa-flash:before,\n.fa-bolt:before {\n content: \"\"; }\n\n.fa-sitemap:before {\n content: \"\"; }\n\n.fa-umbrella:before {\n content: \"\"; }\n\n.fa-paste:before,\n.fa-clipboard:before {\n content: \"\"; }\n\n.fa-lightbulb-o:before {\n content: \"\"; }\n\n.fa-exchange:before {\n content: \"\"; }\n\n.fa-cloud-download:before {\n content: \"\"; }\n\n.fa-cloud-upload:before {\n content: \"\"; }\n\n.fa-user-md:before {\n content: \"\"; }\n\n.fa-stethoscope:before {\n content: \"\"; }\n\n.fa-suitcase:before {\n content: \"\"; }\n\n.fa-bell-o:before {\n content: \"\"; }\n\n.fa-coffee:before {\n content: \"\"; }\n\n.fa-cutlery:before {\n content: \"\"; }\n\n.fa-file-text-o:before {\n content: \"\"; }\n\n.fa-building-o:before {\n content: \"\"; }\n\n.fa-hospital-o:before {\n content: \"\"; }\n\n.fa-ambulance:before {\n content: \"\"; }\n\n.fa-medkit:before {\n content: \"\"; }\n\n.fa-fighter-jet:before {\n content: \"\"; }\n\n.fa-beer:before {\n content: \"\"; }\n\n.fa-h-square:before {\n content: \"\"; }\n\n.fa-plus-square:before {\n content: \"\"; }\n\n.fa-angle-double-left:before {\n content: \"\"; }\n\n.fa-angle-double-right:before {\n content: \"\"; }\n\n.fa-angle-double-up:before {\n content: \"\"; }\n\n.fa-angle-double-down:before {\n content: \"\"; }\n\n.fa-angle-left:before {\n content: \"\"; }\n\n.fa-angle-right:before {\n content: \"\"; }\n\n.fa-angle-up:before {\n content: \"\"; }\n\n.fa-angle-down:before {\n content: \"\"; }\n\n.fa-desktop:before {\n content: \"\"; }\n\n.fa-laptop:before {\n content: \"\"; }\n\n.fa-tablet:before {\n content: \"\"; }\n\n.fa-mobile-phone:before,\n.fa-mobile:before {\n content: \"\"; }\n\n.fa-circle-o:before {\n content: \"\"; }\n\n.fa-quote-left:before {\n content: \"\"; }\n\n.fa-quote-right:before {\n content: \"\"; }\n\n.fa-spinner:before {\n content: \"\"; }\n\n.fa-circle:before {\n content: \"\"; }\n\n.fa-mail-reply:before,\n.fa-reply:before {\n content: \"\"; }\n\n.fa-github-alt:before {\n content: \"\"; }\n\n.fa-folder-o:before {\n content: \"\"; }\n\n.fa-folder-open-o:before {\n content: \"\"; }\n\n.fa-smile-o:before {\n content: \"\"; }\n\n.fa-frown-o:before {\n content: \"\"; }\n\n.fa-meh-o:before {\n content: \"\"; }\n\n.fa-gamepad:before {\n content: \"\"; }\n\n.fa-keyboard-o:before {\n content: \"\"; }\n\n.fa-flag-o:before {\n content: \"\"; }\n\n.fa-flag-checkered:before {\n content: \"\"; }\n\n.fa-terminal:before {\n content: \"\"; }\n\n.fa-code:before {\n content: \"\"; }\n\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n content: \"\"; }\n\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n content: \"\"; }\n\n.fa-location-arrow:before {\n content: \"\"; }\n\n.fa-crop:before {\n content: \"\"; }\n\n.fa-code-fork:before {\n content: \"\"; }\n\n.fa-unlink:before,\n.fa-chain-broken:before {\n content: \"\"; }\n\n.fa-question:before {\n content: \"\"; }\n\n.fa-info:before {\n content: \"\"; }\n\n.fa-exclamation:before {\n content: \"\"; }\n\n.fa-superscript:before {\n content: \"\"; }\n\n.fa-subscript:before {\n content: \"\"; }\n\n.fa-eraser:before {\n content: \"\"; }\n\n.fa-puzzle-piece:before {\n content: \"\"; }\n\n.fa-microphone:before {\n content: \"\"; }\n\n.fa-microphone-slash:before {\n content: \"\"; }\n\n.fa-shield:before {\n content: \"\"; }\n\n.fa-calendar-o:before {\n content: \"\"; }\n\n.fa-fire-extinguisher:before {\n content: \"\"; }\n\n.fa-rocket:before {\n content: \"\"; }\n\n.fa-maxcdn:before {\n content: \"\"; }\n\n.fa-chevron-circle-left:before {\n content: \"\"; }\n\n.fa-chevron-circle-right:before {\n content: \"\"; }\n\n.fa-chevron-circle-up:before {\n content: \"\"; }\n\n.fa-chevron-circle-down:before {\n content: \"\"; }\n\n.fa-html5:before {\n content: \"\"; }\n\n.fa-css3:before {\n content: \"\"; }\n\n.fa-anchor:before {\n content: \"\"; }\n\n.fa-unlock-alt:before {\n content: \"\"; }\n\n.fa-bullseye:before {\n content: \"\"; }\n\n.fa-ellipsis-h:before {\n content: \"\"; }\n\n.fa-ellipsis-v:before {\n content: \"\"; }\n\n.fa-rss-square:before {\n content: \"\"; }\n\n.fa-play-circle:before {\n content: \"\"; }\n\n.fa-ticket:before {\n content: \"\"; }\n\n.fa-minus-square:before {\n content: \"\"; }\n\n.fa-minus-square-o:before {\n content: \"\"; }\n\n.fa-level-up:before {\n content: \"\"; }\n\n.fa-level-down:before {\n content: \"\"; }\n\n.fa-check-square:before {\n content: \"\"; }\n\n.fa-pencil-square:before {\n content: \"\"; }\n\n.fa-external-link-square:before {\n content: \"\"; }\n\n.fa-share-square:before {\n content: \"\"; }\n\n.fa-compass:before {\n content: \"\"; }\n\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n content: \"\"; }\n\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n content: \"\"; }\n\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n content: \"\"; }\n\n.fa-euro:before,\n.fa-eur:before {\n content: \"\"; }\n\n.fa-gbp:before {\n content: \"\"; }\n\n.fa-dollar:before,\n.fa-usd:before {\n content: \"\"; }\n\n.fa-rupee:before,\n.fa-inr:before {\n content: \"\"; }\n\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n content: \"\"; }\n\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n content: \"\"; }\n\n.fa-won:before,\n.fa-krw:before {\n content: \"\"; }\n\n.fa-bitcoin:before,\n.fa-btc:before {\n content: \"\"; }\n\n.fa-file:before {\n content: \"\"; }\n\n.fa-file-text:before {\n content: \"\"; }\n\n.fa-sort-alpha-asc:before {\n content: \"\"; }\n\n.fa-sort-alpha-desc:before {\n content: \"\"; }\n\n.fa-sort-amount-asc:before {\n content: \"\"; }\n\n.fa-sort-amount-desc:before {\n content: \"\"; }\n\n.fa-sort-numeric-asc:before {\n content: \"\"; }\n\n.fa-sort-numeric-desc:before {\n content: \"\"; }\n\n.fa-thumbs-up:before {\n content: \"\"; }\n\n.fa-thumbs-down:before {\n content: \"\"; }\n\n.fa-youtube-square:before {\n content: \"\"; }\n\n.fa-youtube:before {\n content: \"\"; }\n\n.fa-xing:before {\n content: \"\"; }\n\n.fa-xing-square:before {\n content: \"\"; }\n\n.fa-youtube-play:before {\n content: \"\"; }\n\n.fa-dropbox:before {\n content: \"\"; }\n\n.fa-stack-overflow:before {\n content: \"\"; }\n\n.fa-instagram:before {\n content: \"\"; }\n\n.fa-flickr:before {\n content: \"\"; }\n\n.fa-adn:before {\n content: \"\"; }\n\n.fa-bitbucket:before {\n content: \"\"; }\n\n.fa-bitbucket-square:before {\n content: \"\"; }\n\n.fa-tumblr:before {\n content: \"\"; }\n\n.fa-tumblr-square:before {\n content: \"\"; }\n\n.fa-long-arrow-down:before {\n content: \"\"; }\n\n.fa-long-arrow-up:before {\n content: \"\"; }\n\n.fa-long-arrow-left:before {\n content: \"\"; }\n\n.fa-long-arrow-right:before {\n content: \"\"; }\n\n.fa-apple:before {\n content: \"\"; }\n\n.fa-windows:before {\n content: \"\"; }\n\n.fa-android:before {\n content: \"\"; }\n\n.fa-linux:before {\n content: \"\"; }\n\n.fa-dribbble:before {\n content: \"\"; }\n\n.fa-skype:before {\n content: \"\"; }\n\n.fa-foursquare:before {\n content: \"\"; }\n\n.fa-trello:before {\n content: \"\"; }\n\n.fa-female:before {\n content: \"\"; }\n\n.fa-male:before {\n content: \"\"; }\n\n.fa-gittip:before,\n.fa-gratipay:before {\n content: \"\"; }\n\n.fa-sun-o:before {\n content: \"\"; }\n\n.fa-moon-o:before {\n content: \"\"; }\n\n.fa-archive:before {\n content: \"\"; }\n\n.fa-bug:before {\n content: \"\"; }\n\n.fa-vk:before {\n content: \"\"; }\n\n.fa-weibo:before {\n content: \"\"; }\n\n.fa-renren:before {\n content: \"\"; }\n\n.fa-pagelines:before {\n content: \"\"; }\n\n.fa-stack-exchange:before {\n content: \"\"; }\n\n.fa-arrow-circle-o-right:before {\n content: \"\"; }\n\n.fa-arrow-circle-o-left:before {\n content: \"\"; }\n\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n content: \"\"; }\n\n.fa-dot-circle-o:before {\n content: \"\"; }\n\n.fa-wheelchair:before {\n content: \"\"; }\n\n.fa-vimeo-square:before {\n content: \"\"; }\n\n.fa-turkish-lira:before,\n.fa-try:before {\n content: \"\"; }\n\n.fa-plus-square-o:before {\n content: \"\"; }\n\n.fa-space-shuttle:before {\n content: \"\"; }\n\n.fa-slack:before {\n content: \"\"; }\n\n.fa-envelope-square:before {\n content: \"\"; }\n\n.fa-wordpress:before {\n content: \"\"; }\n\n.fa-openid:before {\n content: \"\"; }\n\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n content: \"\"; }\n\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n content: \"\"; }\n\n.fa-yahoo:before {\n content: \"\"; }\n\n.fa-google:before {\n content: \"\"; }\n\n.fa-reddit:before {\n content: \"\"; }\n\n.fa-reddit-square:before {\n content: \"\"; }\n\n.fa-stumbleupon-circle:before {\n content: \"\"; }\n\n.fa-stumbleupon:before {\n content: \"\"; }\n\n.fa-delicious:before {\n content: \"\"; }\n\n.fa-digg:before {\n content: \"\"; }\n\n.fa-pied-piper-pp:before {\n content: \"\"; }\n\n.fa-pied-piper-alt:before {\n content: \"\"; }\n\n.fa-drupal:before {\n content: \"\"; }\n\n.fa-joomla:before {\n content: \"\"; }\n\n.fa-language:before {\n content: \"\"; }\n\n.fa-fax:before {\n content: \"\"; }\n\n.fa-building:before {\n content: \"\"; }\n\n.fa-child:before {\n content: \"\"; }\n\n.fa-paw:before {\n content: \"\"; }\n\n.fa-spoon:before {\n content: \"\"; }\n\n.fa-cube:before {\n content: \"\"; }\n\n.fa-cubes:before {\n content: \"\"; }\n\n.fa-behance:before {\n content: \"\"; }\n\n.fa-behance-square:before {\n content: \"\"; }\n\n.fa-steam:before {\n content: \"\"; }\n\n.fa-steam-square:before {\n content: \"\"; }\n\n.fa-recycle:before {\n content: \"\"; }\n\n.fa-automobile:before,\n.fa-car:before {\n content: \"\"; }\n\n.fa-cab:before,\n.fa-taxi:before {\n content: \"\"; }\n\n.fa-tree:before {\n content: \"\"; }\n\n.fa-spotify:before {\n content: \"\"; }\n\n.fa-deviantart:before {\n content: \"\"; }\n\n.fa-soundcloud:before {\n content: \"\"; }\n\n.fa-database:before {\n content: \"\"; }\n\n.fa-file-pdf-o:before {\n content: \"\"; }\n\n.fa-file-word-o:before {\n content: \"\"; }\n\n.fa-file-excel-o:before {\n content: \"\"; }\n\n.fa-file-powerpoint-o:before {\n content: \"\"; }\n\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n content: \"\"; }\n\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n content: \"\"; }\n\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n content: \"\"; }\n\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n content: \"\"; }\n\n.fa-file-code-o:before {\n content: \"\"; }\n\n.fa-vine:before {\n content: \"\"; }\n\n.fa-codepen:before {\n content: \"\"; }\n\n.fa-jsfiddle:before {\n content: \"\"; }\n\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n content: \"\"; }\n\n.fa-circle-o-notch:before {\n content: \"\"; }\n\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n content: \"\"; }\n\n.fa-ge:before,\n.fa-empire:before {\n content: \"\"; }\n\n.fa-git-square:before {\n content: \"\"; }\n\n.fa-git:before {\n content: \"\"; }\n\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n content: \"\"; }\n\n.fa-tencent-weibo:before {\n content: \"\"; }\n\n.fa-qq:before {\n content: \"\"; }\n\n.fa-wechat:before,\n.fa-weixin:before {\n content: \"\"; }\n\n.fa-send:before,\n.fa-paper-plane:before {\n content: \"\"; }\n\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n content: \"\"; }\n\n.fa-history:before {\n content: \"\"; }\n\n.fa-circle-thin:before {\n content: \"\"; }\n\n.fa-header:before {\n content: \"\"; }\n\n.fa-paragraph:before {\n content: \"\"; }\n\n.fa-sliders:before {\n content: \"\"; }\n\n.fa-share-alt:before {\n content: \"\"; }\n\n.fa-share-alt-square:before {\n content: \"\"; }\n\n.fa-bomb:before {\n content: \"\"; }\n\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n content: \"\"; }\n\n.fa-tty:before {\n content: \"\"; }\n\n.fa-binoculars:before {\n content: \"\"; }\n\n.fa-plug:before {\n content: \"\"; }\n\n.fa-slideshare:before {\n content: \"\"; }\n\n.fa-twitch:before {\n content: \"\"; }\n\n.fa-yelp:before {\n content: \"\"; }\n\n.fa-newspaper-o:before {\n content: \"\"; }\n\n.fa-wifi:before {\n content: \"\"; }\n\n.fa-calculator:before {\n content: \"\"; }\n\n.fa-paypal:before {\n content: \"\"; }\n\n.fa-google-wallet:before {\n content: \"\"; }\n\n.fa-cc-visa:before {\n content: \"\"; }\n\n.fa-cc-mastercard:before {\n content: \"\"; }\n\n.fa-cc-discover:before {\n content: \"\"; }\n\n.fa-cc-amex:before {\n content: \"\"; }\n\n.fa-cc-paypal:before {\n content: \"\"; }\n\n.fa-cc-stripe:before {\n content: \"\"; }\n\n.fa-bell-slash:before {\n content: \"\"; }\n\n.fa-bell-slash-o:before {\n content: \"\"; }\n\n.fa-trash:before {\n content: \"\"; }\n\n.fa-copyright:before {\n content: \"\"; }\n\n.fa-at:before {\n content: \"\"; }\n\n.fa-eyedropper:before {\n content: \"\"; }\n\n.fa-paint-brush:before {\n content: \"\"; }\n\n.fa-birthday-cake:before {\n content: \"\"; }\n\n.fa-area-chart:before {\n content: \"\"; }\n\n.fa-pie-chart:before {\n content: \"\"; }\n\n.fa-line-chart:before {\n content: \"\"; }\n\n.fa-lastfm:before {\n content: \"\"; }\n\n.fa-lastfm-square:before {\n content: \"\"; }\n\n.fa-toggle-off:before {\n content: \"\"; }\n\n.fa-toggle-on:before {\n content: \"\"; }\n\n.fa-bicycle:before {\n content: \"\"; }\n\n.fa-bus:before {\n content: \"\"; }\n\n.fa-ioxhost:before {\n content: \"\"; }\n\n.fa-angellist:before {\n content: \"\"; }\n\n.fa-cc:before {\n content: \"\"; }\n\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n content: \"\"; }\n\n.fa-meanpath:before {\n content: \"\"; }\n\n.fa-buysellads:before {\n content: \"\"; }\n\n.fa-connectdevelop:before {\n content: \"\"; }\n\n.fa-dashcube:before {\n content: \"\"; }\n\n.fa-forumbee:before {\n content: \"\"; }\n\n.fa-leanpub:before {\n content: \"\"; }\n\n.fa-sellsy:before {\n content: \"\"; }\n\n.fa-shirtsinbulk:before {\n content: \"\"; }\n\n.fa-simplybuilt:before {\n content: \"\"; }\n\n.fa-skyatlas:before {\n content: \"\"; }\n\n.fa-cart-plus:before {\n content: \"\"; }\n\n.fa-cart-arrow-down:before {\n content: \"\"; }\n\n.fa-diamond:before {\n content: \"\"; }\n\n.fa-ship:before {\n content: \"\"; }\n\n.fa-user-secret:before {\n content: \"\"; }\n\n.fa-motorcycle:before {\n content: \"\"; }\n\n.fa-street-view:before {\n content: \"\"; }\n\n.fa-heartbeat:before {\n content: \"\"; }\n\n.fa-venus:before {\n content: \"\"; }\n\n.fa-mars:before {\n content: \"\"; }\n\n.fa-mercury:before {\n content: \"\"; }\n\n.fa-intersex:before,\n.fa-transgender:before {\n content: \"\"; }\n\n.fa-transgender-alt:before {\n content: \"\"; }\n\n.fa-venus-double:before {\n content: \"\"; }\n\n.fa-mars-double:before {\n content: \"\"; }\n\n.fa-venus-mars:before {\n content: \"\"; }\n\n.fa-mars-stroke:before {\n content: \"\"; }\n\n.fa-mars-stroke-v:before {\n content: \"\"; }\n\n.fa-mars-stroke-h:before {\n content: \"\"; }\n\n.fa-neuter:before {\n content: \"\"; }\n\n.fa-genderless:before {\n content: \"\"; }\n\n.fa-facebook-official:before {\n content: \"\"; }\n\n.fa-pinterest-p:before {\n content: \"\"; }\n\n.fa-whatsapp:before {\n content: \"\"; }\n\n.fa-server:before {\n content: \"\"; }\n\n.fa-user-plus:before {\n content: \"\"; }\n\n.fa-user-times:before {\n content: \"\"; }\n\n.fa-hotel:before,\n.fa-bed:before {\n content: \"\"; }\n\n.fa-viacoin:before {\n content: \"\"; }\n\n.fa-train:before {\n content: \"\"; }\n\n.fa-subway:before {\n content: \"\"; }\n\n.fa-medium:before {\n content: \"\"; }\n\n.fa-yc:before,\n.fa-y-combinator:before {\n content: \"\"; }\n\n.fa-optin-monster:before {\n content: \"\"; }\n\n.fa-opencart:before {\n content: \"\"; }\n\n.fa-expeditedssl:before {\n content: \"\"; }\n\n.fa-battery-4:before,\n.fa-battery-full:before {\n content: \"\"; }\n\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n content: \"\"; }\n\n.fa-battery-2:before,\n.fa-battery-half:before {\n content: \"\"; }\n\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n content: \"\"; }\n\n.fa-battery-0:before,\n.fa-battery-empty:before {\n content: \"\"; }\n\n.fa-mouse-pointer:before {\n content: \"\"; }\n\n.fa-i-cursor:before {\n content: \"\"; }\n\n.fa-object-group:before {\n content: \"\"; }\n\n.fa-object-ungroup:before {\n content: \"\"; }\n\n.fa-sticky-note:before {\n content: \"\"; }\n\n.fa-sticky-note-o:before {\n content: \"\"; }\n\n.fa-cc-jcb:before {\n content: \"\"; }\n\n.fa-cc-diners-club:before {\n content: \"\"; }\n\n.fa-clone:before {\n content: \"\"; }\n\n.fa-balance-scale:before {\n content: \"\"; }\n\n.fa-hourglass-o:before {\n content: \"\"; }\n\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n content: \"\"; }\n\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n content: \"\"; }\n\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n content: \"\"; }\n\n.fa-hourglass:before {\n content: \"\"; }\n\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n content: \"\"; }\n\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n content: \"\"; }\n\n.fa-hand-scissors-o:before {\n content: \"\"; }\n\n.fa-hand-lizard-o:before {\n content: \"\"; }\n\n.fa-hand-spock-o:before {\n content: \"\"; }\n\n.fa-hand-pointer-o:before {\n content: \"\"; }\n\n.fa-hand-peace-o:before {\n content: \"\"; }\n\n.fa-trademark:before {\n content: \"\"; }\n\n.fa-registered:before {\n content: \"\"; }\n\n.fa-creative-commons:before {\n content: \"\"; }\n\n.fa-gg:before {\n content: \"\"; }\n\n.fa-gg-circle:before {\n content: \"\"; }\n\n.fa-tripadvisor:before {\n content: \"\"; }\n\n.fa-odnoklassniki:before {\n content: \"\"; }\n\n.fa-odnoklassniki-square:before {\n content: \"\"; }\n\n.fa-get-pocket:before {\n content: \"\"; }\n\n.fa-wikipedia-w:before {\n content: \"\"; }\n\n.fa-safari:before {\n content: \"\"; }\n\n.fa-chrome:before {\n content: \"\"; }\n\n.fa-firefox:before {\n content: \"\"; }\n\n.fa-opera:before {\n content: \"\"; }\n\n.fa-internet-explorer:before {\n content: \"\"; }\n\n.fa-tv:before,\n.fa-television:before {\n content: \"\"; }\n\n.fa-contao:before {\n content: \"\"; }\n\n.fa-500px:before {\n content: \"\"; }\n\n.fa-amazon:before {\n content: \"\"; }\n\n.fa-calendar-plus-o:before {\n content: \"\"; }\n\n.fa-calendar-minus-o:before {\n content: \"\"; }\n\n.fa-calendar-times-o:before {\n content: \"\"; }\n\n.fa-calendar-check-o:before {\n content: \"\"; }\n\n.fa-industry:before {\n content: \"\"; }\n\n.fa-map-pin:before {\n content: \"\"; }\n\n.fa-map-signs:before {\n content: \"\"; }\n\n.fa-map-o:before {\n content: \"\"; }\n\n.fa-map:before {\n content: \"\"; }\n\n.fa-commenting:before {\n content: \"\"; }\n\n.fa-commenting-o:before {\n content: \"\"; }\n\n.fa-houzz:before {\n content: \"\"; }\n\n.fa-vimeo:before {\n content: \"\"; }\n\n.fa-black-tie:before {\n content: \"\"; }\n\n.fa-fonticons:before {\n content: \"\"; }\n\n.fa-reddit-alien:before {\n content: \"\"; }\n\n.fa-edge:before {\n content: \"\"; }\n\n.fa-credit-card-alt:before {\n content: \"\"; }\n\n.fa-codiepie:before {\n content: \"\"; }\n\n.fa-modx:before {\n content: \"\"; }\n\n.fa-fort-awesome:before {\n content: \"\"; }\n\n.fa-usb:before {\n content: \"\"; }\n\n.fa-product-hunt:before {\n content: \"\"; }\n\n.fa-mixcloud:before {\n content: \"\"; }\n\n.fa-scribd:before {\n content: \"\"; }\n\n.fa-pause-circle:before {\n content: \"\"; }\n\n.fa-pause-circle-o:before {\n content: \"\"; }\n\n.fa-stop-circle:before {\n content: \"\"; }\n\n.fa-stop-circle-o:before {\n content: \"\"; }\n\n.fa-shopping-bag:before {\n content: \"\"; }\n\n.fa-shopping-basket:before {\n content: \"\"; }\n\n.fa-hashtag:before {\n content: \"\"; }\n\n.fa-bluetooth:before {\n content: \"\"; }\n\n.fa-bluetooth-b:before {\n content: \"\"; }\n\n.fa-percent:before {\n content: \"\"; }\n\n.fa-gitlab:before {\n content: \"\"; }\n\n.fa-wpbeginner:before {\n content: \"\"; }\n\n.fa-wpforms:before {\n content: \"\"; }\n\n.fa-envira:before {\n content: \"\"; }\n\n.fa-universal-access:before {\n content: \"\"; }\n\n.fa-wheelchair-alt:before {\n content: \"\"; }\n\n.fa-question-circle-o:before {\n content: \"\"; }\n\n.fa-blind:before {\n content: \"\"; }\n\n.fa-audio-description:before {\n content: \"\"; }\n\n.fa-volume-control-phone:before {\n content: \"\"; }\n\n.fa-braille:before {\n content: \"\"; }\n\n.fa-assistive-listening-systems:before {\n content: \"\"; }\n\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n content: \"\"; }\n\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n content: \"\"; }\n\n.fa-glide:before {\n content: \"\"; }\n\n.fa-glide-g:before {\n content: \"\"; }\n\n.fa-signing:before,\n.fa-sign-language:before {\n content: \"\"; }\n\n.fa-low-vision:before {\n content: \"\"; }\n\n.fa-viadeo:before {\n content: \"\"; }\n\n.fa-viadeo-square:before {\n content: \"\"; }\n\n.fa-snapchat:before {\n content: \"\"; }\n\n.fa-snapchat-ghost:before {\n content: \"\"; }\n\n.fa-snapchat-square:before {\n content: \"\"; }\n\n.fa-pied-piper:before {\n content: \"\"; }\n\n.fa-first-order:before {\n content: \"\"; }\n\n.fa-yoast:before {\n content: \"\"; }\n\n.fa-themeisle:before {\n content: \"\"; }\n\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n content: \"\"; }\n\n.fa-fa:before,\n.fa-font-awesome:before {\n content: \"\"; }\n\n.sr-only, .bootstrap-datetimepicker-widget .btn[data-action=\"incrementHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"incrementMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"decrementHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"decrementMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"showHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"showMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"togglePeriod\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"clear\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"today\"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto; }\n\n/*!\r\n * Datetimepicker for Bootstrap 3\r\n * ! version : 4.7.14\r\n * https://github.com/Eonasdan/bootstrap-datetimepicker/\r\n */\n.bootstrap-datetimepicker-widget {\n list-style: none; }\n .bootstrap-datetimepicker-widget.dropdown-menu {\n margin: 2px 0;\n padding: 4px;\n width: 19em; }\n @media (min-width: 768px) {\n .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n width: 38em; } }\n @media (min-width: 992px) {\n .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n width: 38em; } }\n @media (min-width: 1200px) {\n .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n width: 38em; } }\n .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after {\n content: '';\n display: inline-block;\n position: absolute; }\n .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid #ccc;\n border-bottom-color: rgba(0, 0, 0, 0.2);\n top: -7px;\n left: 7px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid white;\n top: -6px;\n left: 8px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.top:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-top: 7px solid #ccc;\n border-top-color: rgba(0, 0, 0, 0.2);\n bottom: -7px;\n left: 6px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.top:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid white;\n bottom: -6px;\n left: 7px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before, .panel .panel-footer .bootstrap-datetimepicker-widget.dropdown-menu.tools-footer:before {\n left: auto;\n right: 6px; }\n .bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after, .panel .panel-footer .bootstrap-datetimepicker-widget.dropdown-menu.tools-footer:after {\n left: auto;\n right: 7px; }\n .bootstrap-datetimepicker-widget .list-unstyled {\n margin: 0; }\n .bootstrap-datetimepicker-widget a[data-action] {\n padding: 6px 0; }\n .bootstrap-datetimepicker-widget a[data-action]:active {\n box-shadow: none; }\n .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second {\n width: 54px;\n font-weight: bold;\n font-size: 1.2em;\n margin: 0; }\n .bootstrap-datetimepicker-widget button[data-action] {\n padding: 6px; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"incrementHours\"]::after {\n content: \"Increment Hours\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"incrementMinutes\"]::after {\n content: \"Increment Minutes\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"decrementHours\"]::after {\n content: \"Decrement Hours\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"decrementMinutes\"]::after {\n content: \"Decrement Minutes\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"showHours\"]::after {\n content: \"Show Hours\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"showMinutes\"]::after {\n content: \"Show Minutes\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"togglePeriod\"]::after {\n content: \"Toggle AM/PM\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"clear\"]::after {\n content: \"Clear the picker\"; }\n .bootstrap-datetimepicker-widget .btn[data-action=\"today\"]::after {\n content: \"Set the date to today\"; }\n .bootstrap-datetimepicker-widget .picker-switch {\n text-align: center; }\n .bootstrap-datetimepicker-widget .picker-switch::after {\n content: \"Toggle Date and Time Screens\"; }\n .bootstrap-datetimepicker-widget .picker-switch td {\n padding: 0;\n margin: 0;\n height: auto;\n width: auto;\n line-height: inherit; }\n .bootstrap-datetimepicker-widget .picker-switch td span {\n line-height: 2.5;\n height: 2.5em;\n width: 100%; }\n .bootstrap-datetimepicker-widget table {\n width: 100%;\n margin: 0; }\n .bootstrap-datetimepicker-widget table td,\n .bootstrap-datetimepicker-widget table th {\n text-align: center;\n border-radius: 4px; }\n .bootstrap-datetimepicker-widget table th {\n height: 20px;\n line-height: 20px;\n width: 20px; }\n .bootstrap-datetimepicker-widget table th.picker-switch {\n width: 145px; }\n .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover {\n background: none;\n color: #777777;\n cursor: not-allowed; }\n .bootstrap-datetimepicker-widget table th.prev::after {\n content: \"Previous Month\"; }\n .bootstrap-datetimepicker-widget table th.next::after {\n content: \"Next Month\"; }\n .bootstrap-datetimepicker-widget table thead tr:first-child th {\n cursor: pointer; }\n .bootstrap-datetimepicker-widget table thead tr:first-child th:hover {\n background: #eeeeee; }\n .bootstrap-datetimepicker-widget table td {\n height: 54px;\n line-height: 54px;\n width: 54px; }\n .bootstrap-datetimepicker-widget table td.cw {\n font-size: .8em;\n height: 20px;\n line-height: 20px;\n color: #777777; }\n .bootstrap-datetimepicker-widget table td.day {\n height: 20px;\n line-height: 20px;\n width: 20px; }\n .bootstrap-datetimepicker-widget table td.day:hover, .bootstrap-datetimepicker-widget table td.hour:hover, .bootstrap-datetimepicker-widget table td.minute:hover, .bootstrap-datetimepicker-widget table td.second:hover {\n background: #eeeeee;\n cursor: pointer; }\n .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new {\n color: #777777; }\n .bootstrap-datetimepicker-widget table td.today {\n position: relative; }\n .bootstrap-datetimepicker-widget table td.today:before {\n content: '';\n display: inline-block;\n border: 0 0 7px 7px solid transparent;\n border-bottom-color: #2487ca;\n border-top-color: rgba(0, 0, 0, 0.2);\n position: absolute;\n bottom: 4px;\n right: 4px; }\n .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover {\n background-color: #2487ca;\n color: #fff;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }\n .bootstrap-datetimepicker-widget table td.active.today:before {\n border-bottom-color: #fff; }\n .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover {\n background: none;\n color: #777777;\n cursor: not-allowed; }\n .bootstrap-datetimepicker-widget table td span {\n display: inline-block;\n width: 54px;\n height: 54px;\n line-height: 54px;\n margin: 2px 1.5px;\n cursor: pointer;\n border-radius: 4px; }\n .bootstrap-datetimepicker-widget table td span:hover {\n background: #eeeeee; }\n .bootstrap-datetimepicker-widget table td span.active {\n background-color: #2487ca;\n color: #fff;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }\n .bootstrap-datetimepicker-widget table td span.old {\n color: #777777; }\n .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover {\n background: none;\n color: #777777;\n cursor: not-allowed; }\n .bootstrap-datetimepicker-widget.usetwentyfour td.hour {\n height: 27px;\n line-height: 27px; }\n\n.input-group.date .input-group-addon {\n cursor: pointer; }\n\nbody {\n height: 100%; }\n\nh2 {\n padding-bottom: 15px; }\n\n.brand-text {\n font-family: \"Raleway\", Helvetica, Arial; }\n\nlabel.error {\n color: #c0392b;\n font-size: 10px; }\n\n.form-control.error {\n border-color: #c0392b; }\n .form-control.error:active, .form-control.error:focus {\n box-shadow: inset 0 1px 1px rgba(192, 57, 43, 0.075), 0 0 8px rgba(192, 57, 43, 0.6); }\n\n.spinner-wrap {\n display: inline-block; }\n .spinner-wrap.inline {\n position: absolute;\n right: -10px;\n top: 10px;\n z-index: 3; }\n .spinner-wrap.inline .spinner {\n border: 0.25rem solid #2487ca;\n border-top-color: white; }\n\n.input-group .spinner-wrap.inline {\n right: -25px; }\n\n.progress {\n height: 10px; }\n\n.btn {\n text-transform: uppercase; }\n .btn .spinner-wrap {\n margin-left: 10px; }\n\n.spinner {\n display: inline-block;\n border-radius: 50%;\n width: 15px;\n height: 15px;\n border: 0.25rem solid rgba(255, 255, 255, 0.2);\n border-top-color: white;\n animation: spin 1s infinite linear; }\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg); }\n 100% {\n transform: rotate(360deg); } }\n\n.loading-wrap {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%); }\n\n.loading-wrap .dot {\n width: 10px;\n height: 10px;\n border: 2px solid white;\n border-radius: 50%;\n float: left;\n margin: 0 5px;\n transform: scale(0);\n animation: dotfx 1000ms ease infinite 0ms; }\n\n.loading-wrap .dot:nth-child(2) {\n animation: dotfx 1000ms ease infinite 300ms; }\n\n.loading-wrap .dot:nth-child(3) {\n animation: dotfx 1000ms ease infinite 600ms; }\n\n@keyframes dotfx {\n 50% {\n transform: scale(1);\n opacity: 1; }\n 100% {\n opacity: 0; } }\n\n.modal {\n /*! adjust transition time */\n -webkit-transition: all ease-out !important;\n -moz-transition: all 0.3s ease-out !important;\n -o-transition: all 0.3s ease-out !important;\n transition: all 0.3s ease-out !important; }\n\n.modal.in .modal-dialog {\n /*! editthis transform to any transform you want */\n -webkit-transform: scale(1, 1) !important;\n -ms-transform: scale(1, 1) !important;\n transform: scale(1, 1) !important; }\n\n.modal.fade .modal-dialog {\n /*! disable sliding from left/right/top/bottom */\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n transform: translate(0, 0); }\n\n.label a {\n color: #fff;\n text-decoration: none; }\n\nfooter {\n font-size: 12px;\n padding-bottom: 5px;\n clear: both; }\n\n.section-content {\n margin-bottom: 0; }\n\n.selectize-input {\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n .selectize-input.locked {\n background: #eeeeee;\n cursor: not-allowed;\n opacity: 1; }\n\n.selectize-control.error .selectize-input {\n border-color: #c0392b; }\n .selectize-control.error .selectize-input.focus {\n box-shadow: inset 0 1px 1px rgba(192, 57, 43, 0.075), 0 0 8px rgba(192, 57, 43, 0.6); }\n\n.selectize-control.plugin-allow-clear .clear-selection {\n position: absolute;\n top: 7px;\n right: 35px;\n z-index: 10;\n color: #777777;\n cursor: pointer; }\n .selectize-control.plugin-allow-clear .clear-selection.disabled {\n color: #eeeeee; }\n\n.form-inline .selectize-control {\n min-width: 225px; }\n\n.selectize-dropdown.form-control {\n position: absolute; }\n\n.selectize-control.input-sm .selectize-input, .input-group-sm > .selectize-control.form-control .selectize-input,\n.input-group-sm > .selectize-control.input-group-addon .selectize-input,\n.input-group-sm > .input-group-btn > .selectize-control.btn .selectize-input {\n font-size: 12px;\n padding-top: 4px;\n padding-bottom: 3px;\n min-height: 30px;\n overflow: inherit;\n border-radius: 3px; }\n .selectize-control.input-sm .selectize-input input, .input-group-sm > .selectize-control.form-control .selectize-input input,\n .input-group-sm > .selectize-control.input-group-addon .selectize-input input,\n .input-group-sm > .input-group-btn > .selectize-control.btn .selectize-input input {\n font-size: 12px; }\n\n.selectize-control.input-sm .clear-selection, .input-group-sm > .selectize-control.form-control .clear-selection,\n.input-group-sm > .selectize-control.input-group-addon .clear-selection,\n.input-group-sm > .input-group-btn > .selectize-control.btn .clear-selection {\n top: 5px;\n right: 30px; }\n\n.input-group .form-control:not(:first-child):not(:last-child) .selectize-input {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n border-right: 0; }\n\nul.list-indented > li {\n margin-left: 25px; }\n\n.label {\n margin: 0 2px; }\n\n.file-uploader .upload-block {\n float: left;\n border: thin solid #eeeeee;\n border-radius: 3px; }\n .file-uploader .upload-block .fileinput-button {\n padding: 0;\n text-align: center;\n opacity: .2;\n background: #eeeeee; }\n .file-uploader .upload-block .fileinput-button i.fa {\n color: #777777;\n opacity: .3; }\n .file-uploader .upload-block .fileinput-button:hover {\n opacity: .4; }\n .file-uploader .upload-block .fileinput-button.disabled {\n background: #eeeeee; }\n .file-uploader .upload-block .progress {\n height: 5px;\n margin-right: 5px;\n margin-left: 5px;\n position: absolute;\n bottom: 5px;\n margin-bottom: 0; }\n\n.file-uploader .delete-img {\n color: #c0392b;\n position: absolute;\n top: 0;\n right: -20px;\n padding: 5px;\n z-index: 20;\n display: none; }\n\n.file-uploader:hover .delete-img {\n display: inline; }\n\n.file-uploader .uploaded-files {\n float: left; }\n .file-uploader .uploaded-files .block {\n float: left;\n border: thin solid #eeeeee;\n border-radius: 3px; }\n\n.file-uploader.single .upload-block {\n position: relative;\n z-index: 10; }\n\n.file-uploader.single .uploaded-files {\n position: absolute;\n z-index: 9; }\n\n.file-uploader.small .block {\n width: 80px; }\n\n.file-uploader.small .upload-block, .file-uploader.small .upload-block .fileinput-button {\n width: 80px;\n height: 80px;\n line-height: 80px; }\n .file-uploader.small .upload-block i.fa, .file-uploader.small .upload-block .fileinput-button i.fa {\n font-size: 20px; }\n .file-uploader.small .upload-block .progress, .file-uploader.small .upload-block .fileinput-button .progress {\n width: 70px; }\n\n.file-uploader.large .block {\n width: 160px; }\n\n.file-uploader.large .upload-block, .file-uploader.large .upload-block .fileinput-button {\n width: 160px;\n height: 160px;\n line-height: 160px; }\n .file-uploader.large .upload-block i.fa, .file-uploader.large .upload-block .fileinput-button i.fa {\n font-size: 40px; }\n .file-uploader.large .upload-block .progress, .file-uploader.large .upload-block .fileinput-button .progress {\n width: 150px; }\n\n.fileinput-button {\n position: relative;\n overflow: hidden;\n display: inline-block; }\n\n.fileinput-button input {\n position: absolute;\n top: 0;\n right: 0;\n margin: 0;\n opacity: 0;\n -ms-filter: 'alpha(opacity=0)';\n font-size: 200px !important;\n direction: ltr;\n cursor: pointer; }\n\n/* Fixes for IE < 8 */\n@media screen\\9 {\n .fileinput-button input {\n filter: alpha(opacity=0);\n font-size: 100%;\n height: 100%; } }\n\n.checkbox-row {\n position: relative;\n margin: 15px 0; }\n .checkbox-row.disabled label {\n background: #eeeeee !important;\n cursor: not-allowed; }\n .checkbox-row.disabled label:after {\n content: none; }\n .checkbox-row.disabled label:hover::after {\n opacity: 0; }\n .checkbox-row.disabled input[type=checkbox]:checked + label:after {\n content: '' !important;\n opacity: 1 !important; }\n .checkbox-row label {\n width: 22px;\n height: 22px;\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 0;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n background: #fff; }\n .checkbox-row label:after {\n content: '';\n width: 9px;\n height: 5px;\n position: absolute;\n top: 6px;\n left: 6px;\n border: 3px solid #555555;\n border-top: none;\n border-right: none;\n background: transparent;\n opacity: 0;\n transform: rotate(-45deg); }\n .checkbox-row label:hover::after {\n opacity: 0.5; }\n .checkbox-row span {\n font-weight: normal;\n margin-left: 30px;\n width: 290px;\n position: absolute; }\n .checkbox-row input[type=checkbox] {\n visibility: hidden; }\n .checkbox-row input[type=checkbox]:checked + label:after {\n opacity: 1; }\n\n.tabs-left, .tabs-right {\n border-bottom: none;\n padding-top: 2px; }\n\n.tabs-left {\n border-right: 1px solid #ddd; }\n\n.tabs-right {\n border-left: 1px solid #ddd; }\n\n.tabs-left > li, .tabs-right > li {\n float: none;\n margin-bottom: 2px; }\n\n.tabs-left > li {\n margin-right: -1px; }\n\n.tabs-right > li {\n margin-left: -1px; }\n\n.tabs-left > li.active > a,\n.tabs-left > li.active > a:hover,\n.tabs-left > li.active > a:focus {\n border-bottom-color: #ddd;\n border-right-color: transparent; }\n\n.tabs-right > li.active > a,\n.tabs-right > li.active > a:hover,\n.tabs-right > li.active > a:focus {\n border-bottom: 1px solid #ddd;\n border-left-color: transparent; }\n\n.tabs-left > li > a {\n border-radius: 4px 0 0 4px;\n margin-right: 0;\n display: block; }\n\n.tabs-right > li > a {\n border-radius: 0 4px 4px 0;\n margin-right: 0; }\n\n.tabs-left {\n padding-top: 0;\n margin-top: 2px; }\n\n.tab-content {\n border-top: 1px solid #ddd;\n border-right: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n margin-left: -30px;\n margin-top: 2px; }\n\n.nav-tabs > li > a:hover {\n border-color: transparent #ddd transparent transparent; }\n\n.auth-row {\n min-height: 100%;\n height: auto !important;\n margin-bottom: 50px; }\n\n.form-auth {\n margin-top: 20%;\n background: #fff;\n padding: 30px; }\n\n@media (max-width: 991px) {\n .form-auth {\n margin-top: 30px; } }\n\nbody.auth-body {\n background: url(\"/images/auth-bg.jpg\");\n background-size: cover; }\n\nbody.setup-layout {\n padding-top: 20px;\n padding-bottom: 20px; }\n body.setup-layout .header h3 {\n margin-top: 0;\n margin-bottom: 0;\n line-height: 40px; }\n body.setup-layout .header h3 a {\n text-decoration: none;\n color: #777777; }\n body.setup-layout .setup-incomplete {\n min-height: 350px; }\n body.setup-layout .setup-incomplete i.fa {\n font-size: 100px;\n color: #f7f7f7;\n margin-top: 50px;\n margin-bottom: 30px; }\n @media (min-width: 768px) {\n body.setup-layout .container {\n max-width: 730px; } }\n body.setup-layout .container-narrow > hr {\n margin: 30px 0; }\n @media screen and (min-width: 768px) {\n body.setup-layout .header,\n body.setup-layout .marketing,\n body.setup-layout .footer {\n padding-right: 0;\n padding-left: 0; }\n body.setup-layout .header {\n margin-bottom: 30px; }\n body.setup-layout .jumbotron {\n border-bottom: 0; } }\n\nbody.error-layout {\n padding-top: 20px;\n padding-bottom: 20px; }\n body.error-layout .header h3 {\n margin-top: 0;\n margin-bottom: 0;\n line-height: 40px; }\n body.error-layout .header h3 a {\n text-decoration: none;\n color: #777777; }\n body.error-layout .error-page {\n min-height: 350px; }\n body.error-layout .error-page i.fa {\n font-size: 100px;\n color: #f7f7f7;\n margin-top: 50px;\n margin-bottom: 30px; }\n @media (min-width: 768px) {\n body.error-layout .container {\n max-width: 730px; } }\n body.error-layout .container-narrow > hr {\n margin: 30px 0; }\n @media screen and (min-width: 768px) {\n body.error-layout .header,\n body.error-layout .marketing,\n body.error-layout .footer {\n padding-right: 0;\n padding-left: 0; } }\n\nbody {\n background: #eeeeee; }\n\n.navbar-brand img {\n float: left;\n margin: -5px; }\n\n.navbar-brand span {\n display: inline-block;\n float: left;\n padding-left: 10px;\n font-size: 20px; }\n\n.landing-screen i.fa {\n font-size: 100px;\n color: #f7f7f7;\n margin-top: 50px;\n margin-bottom: 30px; }\n\n.dashboard-section {\n padding-top: 15px; }\n\n.dash-content {\n margin-top: 50px;\n padding-top: 15px; }\n .dash-content .section h2 {\n margin: 0;\n font-family: \"Raleway\", Helvetica, Arial; }\n .dash-content .section .tab-content {\n background: #fff; }\n .dash-content .section .tab-pane {\n padding: 15px; }\n .dash-content .section .tab-pane .form-horizontal, .dash-content .section .tab-pane .columns {\n padding-top: 15px; }\n .dash-content .section .tab-pane .form-horizontal .placeholder, .dash-content .section .tab-pane .columns .placeholder {\n margin-top: -15px; }\n .dash-content .section-content {\n background: #fff; }\n .dash-content .section-content.section-content-transparent {\n background: transparent; }\n .dash-content .table td.tools-column {\n width: 150px;\n height: 40px; }\n .dash-content .table td.tools-column a {\n display: none; }\n .dash-content .table tr:hover .tools-column a {\n display: inline-block; }\n .dash-content .criteria-filter label {\n margin-right: 15px; }\n .dash-content .criteria-filter .panel-body {\n padding: 15px 15px 5px 15px; }\n .dash-content .criteria-filter .form-group {\n margin-right: 25px;\n margin-bottom: 10px; }\n .dash-content .criteria-filter .btn-col {\n margin-right: 0; }\n\n.panel .panel-footer .tools-footer {\n display: none; }\n .panel .panel-footer .tools-footer a {\n margin-left: 10px; }\n\n.panel .panel-footer .label {\n margin-top: 5px; }\n\n.panel:hover .tools-footer {\n display: block; }\n\n.placeholder {\n background: -webkit-repeating-linear-gradient(135deg, #fff, #fff 25%, #F7F7F7 25%, #F7F7F7 50%, #fff 50%) top left fixed;\n background: repeating-linear-gradient(-45deg, #fff, #fff 25%, #F7F7F7 25%, #F7F7F7 50%, #fff 50%) top left fixed;\n background-size: 30px 30px;\n text-align: center;\n padding: 30px 15px;\n margin: 0 -15px;\n color: #777777; }\n\n.placeholder-row {\n padding: 15px; }\n .placeholder-row .placeholder {\n margin: 0; }\n\n.breadcrumb {\n padding: 8px 0;\n background: transparent; }\n\n.pagination-row {\n width: 100%;\n text-align: center; }\n\nfooter {\n margin-top: 10px; }\n\n.modal-section {\n padding: 15px; }\n","@charset \"UTF-8\";\n\n/*!\n * animate.css -http://daneden.me/animate\n * Version - 3.5.1\n * Licensed under the MIT license - http://opensource.org/licenses/MIT\n *\n * Copyright (c) 2016 Daniel Eden\n */\n\n.animated {\n -webkit-animation-duration: 1s;\n animation-duration: 1s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n &.infinite {\n -webkit-animation-iteration-count: infinite;\n animation-iteration-count: infinite;\n }\n &.hinge {\n -webkit-animation-duration: 2s;\n animation-duration: 2s;\n }\n &.flipOutX, &.flipOutY, &.bounceIn, &.bounceOut {\n -webkit-animation-duration: .75s;\n animation-duration: .75s;\n }\n}\n\n@-webkit-keyframes bounce {\n from, 20%, 53%, 80%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n 40%, 43% {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n -webkit-transform: translate3d(0, -30px, 0);\n transform: translate3d(0, -30px, 0);\n }\n\n 70% {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n -webkit-transform: translate3d(0, -15px, 0);\n transform: translate3d(0, -15px, 0);\n }\n\n 90% {\n -webkit-transform: translate3d(0, -4px, 0);\n transform: translate3d(0, -4px, 0);\n }\n}\n\n\n@keyframes bounce {\n from, 20%, 53%, 80%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n 40%, 43% {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n -webkit-transform: translate3d(0, -30px, 0);\n transform: translate3d(0, -30px, 0);\n }\n\n 70% {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n -webkit-transform: translate3d(0, -15px, 0);\n transform: translate3d(0, -15px, 0);\n }\n\n 90% {\n -webkit-transform: translate3d(0, -4px, 0);\n transform: translate3d(0, -4px, 0);\n }\n}\n\n\n.bounce {\n -webkit-animation-name: bounce;\n animation-name: bounce;\n -webkit-transform-origin: center bottom;\n transform-origin: center bottom;\n}\n\n@-webkit-keyframes flash {\n from, 50%, to {\n opacity: 1;\n }\n\n 25%, 75% {\n opacity: 0;\n }\n}\n\n\n@keyframes flash {\n from, 50%, to {\n opacity: 1;\n }\n\n 25%, 75% {\n opacity: 0;\n }\n}\n\n\n.flash {\n -webkit-animation-name: flash;\n animation-name: flash;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes pulse {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n\n 50% {\n -webkit-transform: scale3d(1.05, 1.05, 1.05);\n transform: scale3d(1.05, 1.05, 1.05);\n }\n\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n}\n\n\n@keyframes pulse {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n\n 50% {\n -webkit-transform: scale3d(1.05, 1.05, 1.05);\n transform: scale3d(1.05, 1.05, 1.05);\n }\n\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n}\n\n\n.pulse {\n -webkit-animation-name: pulse;\n animation-name: pulse;\n}\n\n@-webkit-keyframes rubberBand {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n\n 30% {\n -webkit-transform: scale3d(1.25, 0.75, 1);\n transform: scale3d(1.25, 0.75, 1);\n }\n\n 40% {\n -webkit-transform: scale3d(0.75, 1.25, 1);\n transform: scale3d(0.75, 1.25, 1);\n }\n\n 50% {\n -webkit-transform: scale3d(1.15, 0.85, 1);\n transform: scale3d(1.15, 0.85, 1);\n }\n\n 65% {\n -webkit-transform: scale3d(0.95, 1.05, 1);\n transform: scale3d(0.95, 1.05, 1);\n }\n\n 75% {\n -webkit-transform: scale3d(1.05, 0.95, 1);\n transform: scale3d(1.05, 0.95, 1);\n }\n\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n}\n\n\n@keyframes rubberBand {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n\n 30% {\n -webkit-transform: scale3d(1.25, 0.75, 1);\n transform: scale3d(1.25, 0.75, 1);\n }\n\n 40% {\n -webkit-transform: scale3d(0.75, 1.25, 1);\n transform: scale3d(0.75, 1.25, 1);\n }\n\n 50% {\n -webkit-transform: scale3d(1.15, 0.85, 1);\n transform: scale3d(1.15, 0.85, 1);\n }\n\n 65% {\n -webkit-transform: scale3d(0.95, 1.05, 1);\n transform: scale3d(0.95, 1.05, 1);\n }\n\n 75% {\n -webkit-transform: scale3d(1.05, 0.95, 1);\n transform: scale3d(1.05, 0.95, 1);\n }\n\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n}\n\n\n.rubberBand {\n -webkit-animation-name: rubberBand;\n animation-name: rubberBand;\n}\n\n@-webkit-keyframes shake {\n from, to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n 10%, 30%, 50%, 70%, 90% {\n -webkit-transform: translate3d(-10px, 0, 0);\n transform: translate3d(-10px, 0, 0);\n }\n\n 20%, 40%, 60%, 80% {\n -webkit-transform: translate3d(10px, 0, 0);\n transform: translate3d(10px, 0, 0);\n }\n}\n\n\n@keyframes shake {\n from, to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n 10%, 30%, 50%, 70%, 90% {\n -webkit-transform: translate3d(-10px, 0, 0);\n transform: translate3d(-10px, 0, 0);\n }\n\n 20%, 40%, 60%, 80% {\n -webkit-transform: translate3d(10px, 0, 0);\n transform: translate3d(10px, 0, 0);\n }\n}\n\n\n.shake {\n -webkit-animation-name: shake;\n animation-name: shake;\n}\n\n@-webkit-keyframes headShake {\n 0% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n }\n\n 6.5% {\n -webkit-transform: translateX(-6px) rotateY(-9deg);\n transform: translateX(-6px) rotateY(-9deg);\n }\n\n 18.5% {\n -webkit-transform: translateX(5px) rotateY(7deg);\n transform: translateX(5px) rotateY(7deg);\n }\n\n 31.5% {\n -webkit-transform: translateX(-3px) rotateY(-5deg);\n transform: translateX(-3px) rotateY(-5deg);\n }\n\n 43.5% {\n -webkit-transform: translateX(2px) rotateY(3deg);\n transform: translateX(2px) rotateY(3deg);\n }\n\n 50% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n }\n}\n\n\n@keyframes headShake {\n 0% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n }\n\n 6.5% {\n -webkit-transform: translateX(-6px) rotateY(-9deg);\n transform: translateX(-6px) rotateY(-9deg);\n }\n\n 18.5% {\n -webkit-transform: translateX(5px) rotateY(7deg);\n transform: translateX(5px) rotateY(7deg);\n }\n\n 31.5% {\n -webkit-transform: translateX(-3px) rotateY(-5deg);\n transform: translateX(-3px) rotateY(-5deg);\n }\n\n 43.5% {\n -webkit-transform: translateX(2px) rotateY(3deg);\n transform: translateX(2px) rotateY(3deg);\n }\n\n 50% {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n }\n}\n\n\n.headShake {\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out;\n -webkit-animation-name: headShake;\n animation-name: headShake;\n}\n\n@-webkit-keyframes swing {\n 20% {\n -webkit-transform: rotate3d(0, 0, 1, 15deg);\n transform: rotate3d(0, 0, 1, 15deg);\n }\n\n 40% {\n -webkit-transform: rotate3d(0, 0, 1, -10deg);\n transform: rotate3d(0, 0, 1, -10deg);\n }\n\n 60% {\n -webkit-transform: rotate3d(0, 0, 1, 5deg);\n transform: rotate3d(0, 0, 1, 5deg);\n }\n\n 80% {\n -webkit-transform: rotate3d(0, 0, 1, -5deg);\n transform: rotate3d(0, 0, 1, -5deg);\n }\n\n to {\n -webkit-transform: rotate3d(0, 0, 1, 0deg);\n transform: rotate3d(0, 0, 1, 0deg);\n }\n}\n\n\n@keyframes swing {\n 20% {\n -webkit-transform: rotate3d(0, 0, 1, 15deg);\n transform: rotate3d(0, 0, 1, 15deg);\n }\n\n 40% {\n -webkit-transform: rotate3d(0, 0, 1, -10deg);\n transform: rotate3d(0, 0, 1, -10deg);\n }\n\n 60% {\n -webkit-transform: rotate3d(0, 0, 1, 5deg);\n transform: rotate3d(0, 0, 1, 5deg);\n }\n\n 80% {\n -webkit-transform: rotate3d(0, 0, 1, -5deg);\n transform: rotate3d(0, 0, 1, -5deg);\n }\n\n to {\n -webkit-transform: rotate3d(0, 0, 1, 0deg);\n transform: rotate3d(0, 0, 1, 0deg);\n }\n}\n\n\n.swing {\n -webkit-transform-origin: top center;\n transform-origin: top center;\n -webkit-animation-name: swing;\n animation-name: swing;\n}\n\n@-webkit-keyframes tada {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n\n 10%, 20% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n }\n\n 30%, 50%, 70%, 90% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n }\n\n 40%, 60%, 80% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n }\n\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n}\n\n\n@keyframes tada {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n\n 10%, 20% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n }\n\n 30%, 50%, 70%, 90% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n }\n\n 40%, 60%, 80% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n }\n\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n}\n\n\n.tada {\n -webkit-animation-name: tada;\n animation-name: tada;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes wobble {\n from {\n -webkit-transform: none;\n transform: none;\n }\n\n 15% {\n -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n }\n\n 30% {\n -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n }\n\n 45% {\n -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n }\n\n 60% {\n -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n }\n\n 75% {\n -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n }\n\n to {\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes wobble {\n from {\n -webkit-transform: none;\n transform: none;\n }\n\n 15% {\n -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n }\n\n 30% {\n -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n }\n\n 45% {\n -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n }\n\n 60% {\n -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n }\n\n 75% {\n -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n }\n\n to {\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.wobble {\n -webkit-animation-name: wobble;\n animation-name: wobble;\n}\n\n@-webkit-keyframes jello {\n from, 11.1%, to {\n -webkit-transform: none;\n transform: none;\n }\n\n 22.2% {\n -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n transform: skewX(-12.5deg) skewY(-12.5deg);\n }\n\n 33.3% {\n -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n transform: skewX(6.25deg) skewY(6.25deg);\n }\n\n 44.4% {\n -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n transform: skewX(-3.125deg) skewY(-3.125deg);\n }\n\n 55.5% {\n -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n transform: skewX(1.5625deg) skewY(1.5625deg);\n }\n\n 66.6% {\n -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n transform: skewX(-0.78125deg) skewY(-0.78125deg);\n }\n\n 77.7% {\n -webkit-transform: skewX(0.39063deg) skewY(0.39063deg);\n transform: skewX(0.39063deg) skewY(0.39063deg);\n }\n\n 88.8% {\n -webkit-transform: skewX(-0.19531deg) skewY(-0.19531deg);\n transform: skewX(-0.19531deg) skewY(-0.19531deg);\n }\n}\n\n\n@keyframes jello {\n from, 11.1%, to {\n -webkit-transform: none;\n transform: none;\n }\n\n 22.2% {\n -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n transform: skewX(-12.5deg) skewY(-12.5deg);\n }\n\n 33.3% {\n -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n transform: skewX(6.25deg) skewY(6.25deg);\n }\n\n 44.4% {\n -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n transform: skewX(-3.125deg) skewY(-3.125deg);\n }\n\n 55.5% {\n -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n transform: skewX(1.5625deg) skewY(1.5625deg);\n }\n\n 66.6% {\n -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n transform: skewX(-0.78125deg) skewY(-0.78125deg);\n }\n\n 77.7% {\n -webkit-transform: skewX(0.39063deg) skewY(0.39063deg);\n transform: skewX(0.39063deg) skewY(0.39063deg);\n }\n\n 88.8% {\n -webkit-transform: skewX(-0.19531deg) skewY(-0.19531deg);\n transform: skewX(-0.19531deg) skewY(-0.19531deg);\n }\n}\n\n\n.jello {\n -webkit-animation-name: jello;\n animation-name: jello;\n -webkit-transform-origin: center;\n transform-origin: center;\n}\n\n@-webkit-keyframes bounceIn {\n from, 20%, 40%, 60%, 80%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n 0% {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3);\n }\n\n 20% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1);\n transform: scale3d(1.1, 1.1, 1.1);\n }\n\n 40% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9);\n transform: scale3d(0.9, 0.9, 0.9);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(1.03, 1.03, 1.03);\n transform: scale3d(1.03, 1.03, 1.03);\n }\n\n 80% {\n -webkit-transform: scale3d(0.97, 0.97, 0.97);\n transform: scale3d(0.97, 0.97, 0.97);\n }\n\n to {\n opacity: 1;\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n}\n\n\n@keyframes bounceIn {\n from, 20%, 40%, 60%, 80%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n 0% {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3);\n }\n\n 20% {\n -webkit-transform: scale3d(1.1, 1.1, 1.1);\n transform: scale3d(1.1, 1.1, 1.1);\n }\n\n 40% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9);\n transform: scale3d(0.9, 0.9, 0.9);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(1.03, 1.03, 1.03);\n transform: scale3d(1.03, 1.03, 1.03);\n }\n\n 80% {\n -webkit-transform: scale3d(0.97, 0.97, 0.97);\n transform: scale3d(0.97, 0.97, 0.97);\n }\n\n to {\n opacity: 1;\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n }\n}\n\n\n.bounceIn {\n -webkit-animation-name: bounceIn;\n animation-name: bounceIn;\n}\n\n@-webkit-keyframes bounceInDown {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n 0% {\n opacity: 0;\n -webkit-transform: translate3d(0, -3000px, 0);\n transform: translate3d(0, -3000px, 0);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(0, 25px, 0);\n transform: translate3d(0, 25px, 0);\n }\n\n 75% {\n -webkit-transform: translate3d(0, -10px, 0);\n transform: translate3d(0, -10px, 0);\n }\n\n 90% {\n -webkit-transform: translate3d(0, 5px, 0);\n transform: translate3d(0, 5px, 0);\n }\n\n to {\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes bounceInDown {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n 0% {\n opacity: 0;\n -webkit-transform: translate3d(0, -3000px, 0);\n transform: translate3d(0, -3000px, 0);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(0, 25px, 0);\n transform: translate3d(0, 25px, 0);\n }\n\n 75% {\n -webkit-transform: translate3d(0, -10px, 0);\n transform: translate3d(0, -10px, 0);\n }\n\n 90% {\n -webkit-transform: translate3d(0, 5px, 0);\n transform: translate3d(0, 5px, 0);\n }\n\n to {\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.bounceInDown {\n -webkit-animation-name: bounceInDown;\n animation-name: bounceInDown;\n}\n\n@-webkit-keyframes bounceInLeft {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n 0% {\n opacity: 0;\n -webkit-transform: translate3d(-3000px, 0, 0);\n transform: translate3d(-3000px, 0, 0);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(25px, 0, 0);\n transform: translate3d(25px, 0, 0);\n }\n\n 75% {\n -webkit-transform: translate3d(-10px, 0, 0);\n transform: translate3d(-10px, 0, 0);\n }\n\n 90% {\n -webkit-transform: translate3d(5px, 0, 0);\n transform: translate3d(5px, 0, 0);\n }\n\n to {\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes bounceInLeft {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n 0% {\n opacity: 0;\n -webkit-transform: translate3d(-3000px, 0, 0);\n transform: translate3d(-3000px, 0, 0);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(25px, 0, 0);\n transform: translate3d(25px, 0, 0);\n }\n\n 75% {\n -webkit-transform: translate3d(-10px, 0, 0);\n transform: translate3d(-10px, 0, 0);\n }\n\n 90% {\n -webkit-transform: translate3d(5px, 0, 0);\n transform: translate3d(5px, 0, 0);\n }\n\n to {\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.bounceInLeft {\n -webkit-animation-name: bounceInLeft;\n animation-name: bounceInLeft;\n}\n\n@-webkit-keyframes bounceInRight {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n from {\n opacity: 0;\n -webkit-transform: translate3d(3000px, 0, 0);\n transform: translate3d(3000px, 0, 0);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(-25px, 0, 0);\n transform: translate3d(-25px, 0, 0);\n }\n\n 75% {\n -webkit-transform: translate3d(10px, 0, 0);\n transform: translate3d(10px, 0, 0);\n }\n\n 90% {\n -webkit-transform: translate3d(-5px, 0, 0);\n transform: translate3d(-5px, 0, 0);\n }\n\n to {\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes bounceInRight {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n from {\n opacity: 0;\n -webkit-transform: translate3d(3000px, 0, 0);\n transform: translate3d(3000px, 0, 0);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(-25px, 0, 0);\n transform: translate3d(-25px, 0, 0);\n }\n\n 75% {\n -webkit-transform: translate3d(10px, 0, 0);\n transform: translate3d(10px, 0, 0);\n }\n\n 90% {\n -webkit-transform: translate3d(-5px, 0, 0);\n transform: translate3d(-5px, 0, 0);\n }\n\n to {\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.bounceInRight {\n -webkit-animation-name: bounceInRight;\n animation-name: bounceInRight;\n}\n\n@-webkit-keyframes bounceInUp {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 3000px, 0);\n transform: translate3d(0, 3000px, 0);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n\n 75% {\n -webkit-transform: translate3d(0, 10px, 0);\n transform: translate3d(0, 10px, 0);\n }\n\n 90% {\n -webkit-transform: translate3d(0, -5px, 0);\n transform: translate3d(0, -5px, 0);\n }\n\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n\n\n@keyframes bounceInUp {\n from, 60%, 75%, 90%, to {\n -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 3000px, 0);\n transform: translate3d(0, 3000px, 0);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n\n 75% {\n -webkit-transform: translate3d(0, 10px, 0);\n transform: translate3d(0, 10px, 0);\n }\n\n 90% {\n -webkit-transform: translate3d(0, -5px, 0);\n transform: translate3d(0, -5px, 0);\n }\n\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n\n\n.bounceInUp {\n -webkit-animation-name: bounceInUp;\n animation-name: bounceInUp;\n}\n\n@-webkit-keyframes bounceOut {\n 20% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9);\n transform: scale3d(0.9, 0.9, 0.9);\n }\n\n 50%, 55% {\n opacity: 1;\n -webkit-transform: scale3d(1.1, 1.1, 1.1);\n transform: scale3d(1.1, 1.1, 1.1);\n }\n\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3);\n }\n}\n\n\n@keyframes bounceOut {\n 20% {\n -webkit-transform: scale3d(0.9, 0.9, 0.9);\n transform: scale3d(0.9, 0.9, 0.9);\n }\n\n 50%, 55% {\n opacity: 1;\n -webkit-transform: scale3d(1.1, 1.1, 1.1);\n transform: scale3d(1.1, 1.1, 1.1);\n }\n\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3);\n }\n}\n\n\n.bounceOut {\n -webkit-animation-name: bounceOut;\n animation-name: bounceOut;\n}\n\n@-webkit-keyframes bounceOutDown {\n 20% {\n -webkit-transform: translate3d(0, 10px, 0);\n transform: translate3d(0, 10px, 0);\n }\n\n 40%, 45% {\n opacity: 1;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0);\n }\n}\n\n\n@keyframes bounceOutDown {\n 20% {\n -webkit-transform: translate3d(0, 10px, 0);\n transform: translate3d(0, 10px, 0);\n }\n\n 40%, 45% {\n opacity: 1;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0);\n }\n}\n\n\n.bounceOutDown {\n -webkit-animation-name: bounceOutDown;\n animation-name: bounceOutDown;\n}\n\n@-webkit-keyframes bounceOutLeft {\n 20% {\n opacity: 1;\n -webkit-transform: translate3d(20px, 0, 0);\n transform: translate3d(20px, 0, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0);\n }\n}\n\n\n@keyframes bounceOutLeft {\n 20% {\n opacity: 1;\n -webkit-transform: translate3d(20px, 0, 0);\n transform: translate3d(20px, 0, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0);\n }\n}\n\n\n.bounceOutLeft {\n -webkit-animation-name: bounceOutLeft;\n animation-name: bounceOutLeft;\n}\n\n@-webkit-keyframes bounceOutRight {\n 20% {\n opacity: 1;\n -webkit-transform: translate3d(-20px, 0, 0);\n transform: translate3d(-20px, 0, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0);\n }\n}\n\n\n@keyframes bounceOutRight {\n 20% {\n opacity: 1;\n -webkit-transform: translate3d(-20px, 0, 0);\n transform: translate3d(-20px, 0, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0);\n }\n}\n\n\n.bounceOutRight {\n -webkit-animation-name: bounceOutRight;\n animation-name: bounceOutRight;\n}\n\n@-webkit-keyframes bounceOutUp {\n 20% {\n -webkit-transform: translate3d(0, -10px, 0);\n transform: translate3d(0, -10px, 0);\n }\n\n 40%, 45% {\n opacity: 1;\n -webkit-transform: translate3d(0, 20px, 0);\n transform: translate3d(0, 20px, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0);\n }\n}\n\n\n@keyframes bounceOutUp {\n 20% {\n -webkit-transform: translate3d(0, -10px, 0);\n transform: translate3d(0, -10px, 0);\n }\n\n 40%, 45% {\n opacity: 1;\n -webkit-transform: translate3d(0, 20px, 0);\n transform: translate3d(0, 20px, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0);\n }\n}\n\n\n.bounceOutUp {\n -webkit-animation-name: bounceOutUp;\n animation-name: bounceOutUp;\n}\n\n@-webkit-keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n\n.fadeIn {\n -webkit-animation-name: fadeIn;\n animation-name: fadeIn;\n}\n\n@-webkit-keyframes fadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes fadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.fadeInDown {\n -webkit-animation-name: fadeInDown;\n animation-name: fadeInDown;\n}\n\n@-webkit-keyframes fadeInDownBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes fadeInDownBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.fadeInDownBig {\n -webkit-animation-name: fadeInDownBig;\n animation-name: fadeInDownBig;\n}\n\n@-webkit-keyframes fadeInLeft {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes fadeInLeft {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.fadeInLeft {\n -webkit-animation-name: fadeInLeft;\n animation-name: fadeInLeft;\n}\n\n@-webkit-keyframes fadeInLeftBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes fadeInLeftBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.fadeInLeftBig {\n -webkit-animation-name: fadeInLeftBig;\n animation-name: fadeInLeftBig;\n}\n\n@-webkit-keyframes fadeInRight {\n from {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes fadeInRight {\n from {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.fadeInRight {\n -webkit-animation-name: fadeInRight;\n animation-name: fadeInRight;\n}\n\n@-webkit-keyframes fadeInRightBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes fadeInRightBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.fadeInRightBig {\n -webkit-animation-name: fadeInRightBig;\n animation-name: fadeInRightBig;\n}\n\n@-webkit-keyframes fadeInUp {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes fadeInUp {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.fadeInUp {\n -webkit-animation-name: fadeInUp;\n animation-name: fadeInUp;\n}\n\n@-webkit-keyframes fadeInUpBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes fadeInUpBig {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.fadeInUpBig {\n -webkit-animation-name: fadeInUpBig;\n animation-name: fadeInUpBig;\n}\n\n@-webkit-keyframes fadeOut {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n\n@keyframes fadeOut {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n\n.fadeOut {\n -webkit-animation-name: fadeOut;\n animation-name: fadeOut;\n}\n\n@-webkit-keyframes fadeOutDown {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0);\n }\n}\n\n\n@keyframes fadeOutDown {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0);\n }\n}\n\n\n.fadeOutDown {\n -webkit-animation-name: fadeOutDown;\n animation-name: fadeOutDown;\n}\n\n@-webkit-keyframes fadeOutDownBig {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0);\n }\n}\n\n\n@keyframes fadeOutDownBig {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, 2000px, 0);\n transform: translate3d(0, 2000px, 0);\n }\n}\n\n\n.fadeOutDownBig {\n -webkit-animation-name: fadeOutDownBig;\n animation-name: fadeOutDownBig;\n}\n\n@-webkit-keyframes fadeOutLeft {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n }\n}\n\n\n@keyframes fadeOutLeft {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n }\n}\n\n\n.fadeOutLeft {\n -webkit-animation-name: fadeOutLeft;\n animation-name: fadeOutLeft;\n}\n\n@-webkit-keyframes fadeOutLeftBig {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0);\n }\n}\n\n\n@keyframes fadeOutLeftBig {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(-2000px, 0, 0);\n transform: translate3d(-2000px, 0, 0);\n }\n}\n\n\n.fadeOutLeftBig {\n -webkit-animation-name: fadeOutLeftBig;\n animation-name: fadeOutLeftBig;\n}\n\n@-webkit-keyframes fadeOutRight {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n }\n}\n\n\n@keyframes fadeOutRight {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n }\n}\n\n\n.fadeOutRight {\n -webkit-animation-name: fadeOutRight;\n animation-name: fadeOutRight;\n}\n\n@-webkit-keyframes fadeOutRightBig {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0);\n }\n}\n\n\n@keyframes fadeOutRightBig {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(2000px, 0, 0);\n transform: translate3d(2000px, 0, 0);\n }\n}\n\n\n.fadeOutRightBig {\n -webkit-animation-name: fadeOutRightBig;\n animation-name: fadeOutRightBig;\n}\n\n@-webkit-keyframes fadeOutUp {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0);\n }\n}\n\n\n@keyframes fadeOutUp {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0);\n }\n}\n\n\n.fadeOutUp {\n -webkit-animation-name: fadeOutUp;\n animation-name: fadeOutUp;\n}\n\n@-webkit-keyframes fadeOutUpBig {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0);\n }\n}\n\n\n@keyframes fadeOutUpBig {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(0, -2000px, 0);\n transform: translate3d(0, -2000px, 0);\n }\n}\n\n\n.fadeOutUpBig {\n -webkit-animation-name: fadeOutUpBig;\n animation-name: fadeOutUpBig;\n}\n\n@-webkit-keyframes flip {\n from {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n\n 40% {\n -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n\n 50% {\n -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n\n 80% {\n -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n}\n\n\n@keyframes flip {\n from {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n\n 40% {\n -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n }\n\n 50% {\n -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n\n 80% {\n -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n}\n\n\n.animated.flip {\n -webkit-backface-visibility: visible;\n backface-visibility: visible;\n -webkit-animation-name: flip;\n animation-name: flip;\n}\n\n@-webkit-keyframes flipInX {\n from {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 0;\n }\n\n 40% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n\n 60% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1;\n }\n\n 80% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n }\n}\n\n\n@keyframes flipInX {\n from {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 0;\n }\n\n 40% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n\n 60% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1;\n }\n\n 80% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n }\n}\n\n\n.flipInX {\n -webkit-backface-visibility: visible !important;\n backface-visibility: visible !important;\n -webkit-animation-name: flipInX;\n animation-name: flipInX;\n}\n\n@-webkit-keyframes flipInY {\n from {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 0;\n }\n\n 40% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n\n 60% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n opacity: 1;\n }\n\n 80% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n }\n\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n }\n}\n\n\n@keyframes flipInY {\n from {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n opacity: 0;\n }\n\n 40% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n }\n\n 60% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n opacity: 1;\n }\n\n 80% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n }\n\n to {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n }\n}\n\n\n.flipInY {\n -webkit-backface-visibility: visible !important;\n backface-visibility: visible !important;\n -webkit-animation-name: flipInY;\n animation-name: flipInY;\n}\n\n@-webkit-keyframes flipOutX {\n from {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n }\n\n 30% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1;\n }\n\n to {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0;\n }\n}\n\n\n@keyframes flipOutX {\n from {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n }\n\n 30% {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1;\n }\n\n to {\n -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0;\n }\n}\n\n\n.flipOutX {\n -webkit-animation-name: flipOutX;\n animation-name: flipOutX;\n -webkit-backface-visibility: visible !important;\n backface-visibility: visible !important;\n}\n\n@-webkit-keyframes flipOutY {\n from {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n }\n\n 30% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n opacity: 1;\n }\n\n to {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n opacity: 0;\n }\n}\n\n\n@keyframes flipOutY {\n from {\n -webkit-transform: perspective(400px);\n transform: perspective(400px);\n }\n\n 30% {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n opacity: 1;\n }\n\n to {\n -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n opacity: 0;\n }\n}\n\n\n.flipOutY {\n -webkit-backface-visibility: visible !important;\n backface-visibility: visible !important;\n -webkit-animation-name: flipOutY;\n animation-name: flipOutY;\n}\n\n@-webkit-keyframes lightSpeedIn {\n from {\n -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n transform: translate3d(100%, 0, 0) skewX(-30deg);\n opacity: 0;\n }\n\n 60% {\n -webkit-transform: skewX(20deg);\n transform: skewX(20deg);\n opacity: 1;\n }\n\n 80% {\n -webkit-transform: skewX(-5deg);\n transform: skewX(-5deg);\n opacity: 1;\n }\n\n to {\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n@keyframes lightSpeedIn {\n from {\n -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n transform: translate3d(100%, 0, 0) skewX(-30deg);\n opacity: 0;\n }\n\n 60% {\n -webkit-transform: skewX(20deg);\n transform: skewX(20deg);\n opacity: 1;\n }\n\n 80% {\n -webkit-transform: skewX(-5deg);\n transform: skewX(-5deg);\n opacity: 1;\n }\n\n to {\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n.lightSpeedIn {\n -webkit-animation-name: lightSpeedIn;\n animation-name: lightSpeedIn;\n -webkit-animation-timing-function: ease-out;\n animation-timing-function: ease-out;\n}\n\n@-webkit-keyframes lightSpeedOut {\n from {\n opacity: 1;\n }\n\n to {\n -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n transform: translate3d(100%, 0, 0) skewX(30deg);\n opacity: 0;\n }\n}\n\n\n@keyframes lightSpeedOut {\n from {\n opacity: 1;\n }\n\n to {\n -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n transform: translate3d(100%, 0, 0) skewX(30deg);\n opacity: 0;\n }\n}\n\n\n.lightSpeedOut {\n -webkit-animation-name: lightSpeedOut;\n animation-name: lightSpeedOut;\n -webkit-animation-timing-function: ease-in;\n animation-timing-function: ease-in;\n}\n\n@-webkit-keyframes rotateIn {\n from {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: rotate3d(0, 0, 1, -200deg);\n transform: rotate3d(0, 0, 1, -200deg);\n opacity: 0;\n }\n\n to {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n@keyframes rotateIn {\n from {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: rotate3d(0, 0, 1, -200deg);\n transform: rotate3d(0, 0, 1, -200deg);\n opacity: 0;\n }\n\n to {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n.rotateIn {\n -webkit-animation-name: rotateIn;\n animation-name: rotateIn;\n}\n\n@-webkit-keyframes rotateInDownLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0;\n }\n\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n@keyframes rotateInDownLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0;\n }\n\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n.rotateInDownLeft {\n -webkit-animation-name: rotateInDownLeft;\n animation-name: rotateInDownLeft;\n}\n\n@-webkit-keyframes rotateInDownRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0;\n }\n\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n@keyframes rotateInDownRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0;\n }\n\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n.rotateInDownRight {\n -webkit-animation-name: rotateInDownRight;\n animation-name: rotateInDownRight;\n}\n\n@-webkit-keyframes rotateInUpLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0;\n }\n\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n@keyframes rotateInUpLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0;\n }\n\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n.rotateInUpLeft {\n -webkit-animation-name: rotateInUpLeft;\n animation-name: rotateInUpLeft;\n}\n\n@-webkit-keyframes rotateInUpRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, -90deg);\n transform: rotate3d(0, 0, 1, -90deg);\n opacity: 0;\n }\n\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n@keyframes rotateInUpRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, -90deg);\n transform: rotate3d(0, 0, 1, -90deg);\n opacity: 0;\n }\n\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: none;\n transform: none;\n opacity: 1;\n }\n}\n\n\n.rotateInUpRight {\n -webkit-animation-name: rotateInUpRight;\n animation-name: rotateInUpRight;\n}\n\n@-webkit-keyframes rotateOut {\n from {\n -webkit-transform-origin: center;\n transform-origin: center;\n opacity: 1;\n }\n\n to {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: rotate3d(0, 0, 1, 200deg);\n transform: rotate3d(0, 0, 1, 200deg);\n opacity: 0;\n }\n}\n\n\n@keyframes rotateOut {\n from {\n -webkit-transform-origin: center;\n transform-origin: center;\n opacity: 1;\n }\n\n to {\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-transform: rotate3d(0, 0, 1, 200deg);\n transform: rotate3d(0, 0, 1, 200deg);\n opacity: 0;\n }\n}\n\n\n.rotateOut {\n -webkit-animation-name: rotateOut;\n animation-name: rotateOut;\n}\n\n@-webkit-keyframes rotateOutDownLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n opacity: 1;\n }\n\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0;\n }\n}\n\n\n@keyframes rotateOutDownLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n opacity: 1;\n }\n\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n opacity: 0;\n }\n}\n\n\n.rotateOutDownLeft {\n -webkit-animation-name: rotateOutDownLeft;\n animation-name: rotateOutDownLeft;\n}\n\n@-webkit-keyframes rotateOutDownRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n opacity: 1;\n }\n\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0;\n }\n}\n\n\n@keyframes rotateOutDownRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n opacity: 1;\n }\n\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0;\n }\n}\n\n\n.rotateOutDownRight {\n -webkit-animation-name: rotateOutDownRight;\n animation-name: rotateOutDownRight;\n}\n\n@-webkit-keyframes rotateOutUpLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n opacity: 1;\n }\n\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0;\n }\n}\n\n\n@keyframes rotateOutUpLeft {\n from {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n opacity: 1;\n }\n\n to {\n -webkit-transform-origin: left bottom;\n transform-origin: left bottom;\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n opacity: 0;\n }\n}\n\n\n.rotateOutUpLeft {\n -webkit-animation-name: rotateOutUpLeft;\n animation-name: rotateOutUpLeft;\n}\n\n@-webkit-keyframes rotateOutUpRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n opacity: 1;\n }\n\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, 90deg);\n transform: rotate3d(0, 0, 1, 90deg);\n opacity: 0;\n }\n}\n\n\n@keyframes rotateOutUpRight {\n from {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n opacity: 1;\n }\n\n to {\n -webkit-transform-origin: right bottom;\n transform-origin: right bottom;\n -webkit-transform: rotate3d(0, 0, 1, 90deg);\n transform: rotate3d(0, 0, 1, 90deg);\n opacity: 0;\n }\n}\n\n\n.rotateOutUpRight {\n -webkit-animation-name: rotateOutUpRight;\n animation-name: rotateOutUpRight;\n}\n\n@-webkit-keyframes hinge {\n 0% {\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out;\n }\n\n 20%, 60% {\n -webkit-transform: rotate3d(0, 0, 1, 80deg);\n transform: rotate3d(0, 0, 1, 80deg);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out;\n }\n\n 40%, 80% {\n -webkit-transform: rotate3d(0, 0, 1, 60deg);\n transform: rotate3d(0, 0, 1, 60deg);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out;\n opacity: 1;\n }\n\n to {\n -webkit-transform: translate3d(0, 700px, 0);\n transform: translate3d(0, 700px, 0);\n opacity: 0;\n }\n}\n\n\n@keyframes hinge {\n 0% {\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out;\n }\n\n 20%, 60% {\n -webkit-transform: rotate3d(0, 0, 1, 80deg);\n transform: rotate3d(0, 0, 1, 80deg);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out;\n }\n\n 40%, 80% {\n -webkit-transform: rotate3d(0, 0, 1, 60deg);\n transform: rotate3d(0, 0, 1, 60deg);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n -webkit-animation-timing-function: ease-in-out;\n animation-timing-function: ease-in-out;\n opacity: 1;\n }\n\n to {\n -webkit-transform: translate3d(0, 700px, 0);\n transform: translate3d(0, 700px, 0);\n opacity: 0;\n }\n}\n\n\n.hinge {\n -webkit-animation-name: hinge;\n animation-name: hinge;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollIn {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n@keyframes rollIn {\n from {\n opacity: 0;\n -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n }\n\n to {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n\n.rollIn {\n -webkit-animation-name: rollIn;\n animation-name: rollIn;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollOut {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n }\n}\n\n\n@keyframes rollOut {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n }\n}\n\n\n.rollOut {\n -webkit-animation-name: rollOut;\n animation-name: rollOut;\n}\n\n@-webkit-keyframes zoomIn {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3);\n }\n\n 50% {\n opacity: 1;\n }\n}\n\n\n@keyframes zoomIn {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3);\n }\n\n 50% {\n opacity: 1;\n }\n}\n\n\n.zoomIn {\n -webkit-animation-name: zoomIn;\n animation-name: zoomIn;\n}\n\n@-webkit-keyframes zoomInDown {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n@keyframes zoomInDown {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n.zoomInDown {\n -webkit-animation-name: zoomInDown;\n animation-name: zoomInDown;\n}\n\n@-webkit-keyframes zoomInLeft {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n@keyframes zoomInLeft {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n.zoomInLeft {\n -webkit-animation-name: zoomInLeft;\n animation-name: zoomInLeft;\n}\n\n@-webkit-keyframes zoomInRight {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n@keyframes zoomInRight {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n.zoomInRight {\n -webkit-animation-name: zoomInRight;\n animation-name: zoomInRight;\n}\n\n@-webkit-keyframes zoomInUp {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n@keyframes zoomInUp {\n from {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n 60% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n.zoomInUp {\n -webkit-animation-name: zoomInUp;\n animation-name: zoomInUp;\n}\n\n@-webkit-keyframes zoomOut {\n from {\n opacity: 1;\n }\n\n 50% {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3);\n }\n\n to {\n opacity: 0;\n }\n}\n\n\n@keyframes zoomOut {\n from {\n opacity: 1;\n }\n\n 50% {\n opacity: 0;\n -webkit-transform: scale3d(0.3, 0.3, 0.3);\n transform: scale3d(0.3, 0.3, 0.3);\n }\n\n to {\n opacity: 0;\n }\n}\n\n\n.zoomOut {\n -webkit-animation-name: zoomOut;\n animation-name: zoomOut;\n}\n\n@-webkit-keyframes zoomOutDown {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n -webkit-transform-origin: center bottom;\n transform-origin: center bottom;\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n@keyframes zoomOutDown {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n -webkit-transform-origin: center bottom;\n transform-origin: center bottom;\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n.zoomOutDown {\n -webkit-animation-name: zoomOutDown;\n animation-name: zoomOutDown;\n}\n\n@-webkit-keyframes zoomOutLeft {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);\n transform: scale(0.1) translate3d(-2000px, 0, 0);\n -webkit-transform-origin: left center;\n transform-origin: left center;\n }\n}\n\n\n@keyframes zoomOutLeft {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);\n transform: scale(0.1) translate3d(-2000px, 0, 0);\n -webkit-transform-origin: left center;\n transform-origin: left center;\n }\n}\n\n\n.zoomOutLeft {\n -webkit-animation-name: zoomOutLeft;\n animation-name: zoomOutLeft;\n}\n\n@-webkit-keyframes zoomOutRight {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);\n transform: scale(0.1) translate3d(2000px, 0, 0);\n -webkit-transform-origin: right center;\n transform-origin: right center;\n }\n}\n\n\n@keyframes zoomOutRight {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n }\n\n to {\n opacity: 0;\n -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);\n transform: scale(0.1) translate3d(2000px, 0, 0);\n -webkit-transform-origin: right center;\n transform-origin: right center;\n }\n}\n\n\n.zoomOutRight {\n -webkit-animation-name: zoomOutRight;\n animation-name: zoomOutRight;\n}\n\n@-webkit-keyframes zoomOutUp {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n -webkit-transform-origin: center bottom;\n transform-origin: center bottom;\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n@keyframes zoomOutUp {\n 40% {\n opacity: 1;\n -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n }\n\n to {\n opacity: 0;\n -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n -webkit-transform-origin: center bottom;\n transform-origin: center bottom;\n -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n }\n}\n\n\n.zoomOutUp {\n -webkit-animation-name: zoomOutUp;\n animation-name: zoomOutUp;\n}\n\n@-webkit-keyframes slideInDown {\n from {\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0);\n visibility: visible;\n }\n\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n\n\n@keyframes slideInDown {\n from {\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0);\n visibility: visible;\n }\n\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n\n\n.slideInDown {\n -webkit-animation-name: slideInDown;\n animation-name: slideInDown;\n}\n\n@-webkit-keyframes slideInLeft {\n from {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n visibility: visible;\n }\n\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n\n\n@keyframes slideInLeft {\n from {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n visibility: visible;\n }\n\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n\n\n.slideInLeft {\n -webkit-animation-name: slideInLeft;\n animation-name: slideInLeft;\n}\n\n@-webkit-keyframes slideInRight {\n from {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n visibility: visible;\n }\n\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n\n\n@keyframes slideInRight {\n from {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n visibility: visible;\n }\n\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n\n\n.slideInRight {\n -webkit-animation-name: slideInRight;\n animation-name: slideInRight;\n}\n\n@-webkit-keyframes slideInUp {\n from {\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0);\n visibility: visible;\n }\n\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n\n\n@keyframes slideInUp {\n from {\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0);\n visibility: visible;\n }\n\n to {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n\n\n.slideInUp {\n -webkit-animation-name: slideInUp;\n animation-name: slideInUp;\n}\n\n@-webkit-keyframes slideOutDown {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n to {\n visibility: hidden;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0);\n }\n}\n\n\n@keyframes slideOutDown {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n to {\n visibility: hidden;\n -webkit-transform: translate3d(0, 100%, 0);\n transform: translate3d(0, 100%, 0);\n }\n}\n\n\n.slideOutDown {\n -webkit-animation-name: slideOutDown;\n animation-name: slideOutDown;\n}\n\n@-webkit-keyframes slideOutLeft {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n to {\n visibility: hidden;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n }\n}\n\n\n@keyframes slideOutLeft {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n to {\n visibility: hidden;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n }\n}\n\n\n.slideOutLeft {\n -webkit-animation-name: slideOutLeft;\n animation-name: slideOutLeft;\n}\n\n@-webkit-keyframes slideOutRight {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n to {\n visibility: hidden;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n }\n}\n\n\n@keyframes slideOutRight {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n to {\n visibility: hidden;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n }\n}\n\n\n.slideOutRight {\n -webkit-animation-name: slideOutRight;\n animation-name: slideOutRight;\n}\n\n@-webkit-keyframes slideOutUp {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n to {\n visibility: hidden;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0);\n }\n}\n\n\n@keyframes slideOutUp {\n from {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n\n to {\n visibility: hidden;\n -webkit-transform: translate3d(0, -100%, 0);\n transform: translate3d(0, -100%, 0);\n }\n}\n\n\n.slideOutUp {\n -webkit-animation-name: slideOutUp;\n animation-name: slideOutUp;\n}","/**\r\n * selectize.bootstrap3.css (v0.12.1) - Bootstrap 3 Theme\r\n * Copyright (c) 2013–2015 Brian Reavis & contributors\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\r\n * file except in compliance with the License. You may obtain a copy of the License at:\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software distributed under\r\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n * ANY KIND, either express or implied. See the License for the specific language\r\n * governing permissions and limitations under the License.\r\n *\r\n * @author Brian Reavis \r\n */\r\n.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder {\r\n visibility: visible !important;\r\n background: #f2f2f2 !important;\r\n background: rgba(0, 0, 0, 0.06) !important;\r\n border: 0 none !important;\r\n -webkit-box-shadow: inset 0 0 12px 4px #ffffff;\r\n box-shadow: inset 0 0 12px 4px #ffffff;\r\n}\r\n.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after {\r\n content: '!';\r\n visibility: hidden;\r\n}\r\n.selectize-control.plugin-drag_drop .ui-sortable-helper {\r\n -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\r\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\r\n}\r\n.selectize-dropdown-header {\r\n position: relative;\r\n padding: 3px 12px;\r\n border-bottom: 1px solid #d0d0d0;\r\n background: #f8f8f8;\r\n -webkit-border-radius: 4px 4px 0 0;\r\n -moz-border-radius: 4px 4px 0 0;\r\n border-radius: 4px 4px 0 0;\r\n}\r\n.selectize-dropdown-header-close {\r\n position: absolute;\r\n right: 12px;\r\n top: 50%;\r\n color: #333333;\r\n opacity: 0.4;\r\n margin-top: -12px;\r\n line-height: 20px;\r\n font-size: 20px !important;\r\n}\r\n.selectize-dropdown-header-close:hover {\r\n color: #000000;\r\n}\r\n.selectize-dropdown.plugin-optgroup_columns .optgroup {\r\n border-right: 1px solid #f2f2f2;\r\n border-top: 0 none;\r\n float: left;\r\n -webkit-box-sizing: border-box;\r\n -moz-box-sizing: border-box;\r\n box-sizing: border-box;\r\n}\r\n.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child {\r\n border-right: 0 none;\r\n}\r\n.selectize-dropdown.plugin-optgroup_columns .optgroup:before {\r\n display: none;\r\n}\r\n.selectize-dropdown.plugin-optgroup_columns .optgroup-header {\r\n border-top: 0 none;\r\n}\r\n.selectize-control.plugin-remove_button [data-value] {\r\n position: relative;\r\n padding-right: 24px !important;\r\n}\r\n.selectize-control.plugin-remove_button [data-value] .remove {\r\n z-index: 1;\r\n /* fixes ie bug (see #392) */\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n width: 17px;\r\n text-align: center;\r\n font-weight: bold;\r\n font-size: 12px;\r\n color: inherit;\r\n text-decoration: none;\r\n vertical-align: middle;\r\n display: inline-block;\r\n padding: 1px 0 0 0;\r\n border-left: 1px solid rgba(0, 0, 0, 0);\r\n -webkit-border-radius: 0 2px 2px 0;\r\n -moz-border-radius: 0 2px 2px 0;\r\n border-radius: 0 2px 2px 0;\r\n -webkit-box-sizing: border-box;\r\n -moz-box-sizing: border-box;\r\n box-sizing: border-box;\r\n}\r\n.selectize-control.plugin-remove_button [data-value] .remove:hover {\r\n background: rgba(0, 0, 0, 0.05);\r\n}\r\n.selectize-control.plugin-remove_button [data-value].active .remove {\r\n border-left-color: rgba(0, 0, 0, 0);\r\n}\r\n.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover {\r\n background: none;\r\n}\r\n.selectize-control.plugin-remove_button .disabled [data-value] .remove {\r\n border-left-color: rgba(77, 77, 77, 0);\r\n}\r\n.selectize-control {\r\n position: relative;\r\n}\r\n.selectize-dropdown,\r\n.selectize-input,\r\n.selectize-input input {\r\n color: #333333;\r\n font-family: inherit;\r\n font-size: inherit;\r\n line-height: 20px;\r\n -webkit-font-smoothing: inherit;\r\n}\r\n.selectize-input,\r\n.selectize-control.single .selectize-input.input-active {\r\n background: #ffffff;\r\n cursor: text;\r\n display: inline-block;\r\n}\r\n.selectize-input {\r\n border: 1px solid #cccccc;\r\n padding: 6px 12px;\r\n display: inline-block;\r\n width: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n z-index: 1;\r\n -webkit-box-sizing: border-box;\r\n -moz-box-sizing: border-box;\r\n box-sizing: border-box;\r\n -webkit-box-shadow: none;\r\n box-shadow: none;\r\n -webkit-border-radius: 4px;\r\n -moz-border-radius: 4px;\r\n border-radius: 4px;\r\n}\r\n.selectize-control.multi .selectize-input.has-items {\r\n padding: 5px 12px 2px;\r\n}\r\n.selectize-input.full {\r\n background-color: #ffffff;\r\n}\r\n.selectize-input.disabled,\r\n.selectize-input.disabled * {\r\n cursor: default !important;\r\n}\r\n.selectize-input.focus {\r\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);\r\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);\r\n}\r\n.selectize-input.dropdown-active {\r\n -webkit-border-radius: 4px 4px 0 0;\r\n -moz-border-radius: 4px 4px 0 0;\r\n border-radius: 4px 4px 0 0;\r\n}\r\n.selectize-input > * {\r\n vertical-align: baseline;\r\n display: -moz-inline-stack;\r\n display: inline-block;\r\n zoom: 1;\r\n *display: inline;\r\n}\r\n.selectize-control.multi .selectize-input > div {\r\n cursor: pointer;\r\n margin: 0 3px 3px 0;\r\n padding: 1px 3px;\r\n background: #efefef;\r\n color: #333333;\r\n border: 0 solid rgba(0, 0, 0, 0);\r\n}\r\n.selectize-control.multi .selectize-input > div.active {\r\n background: #428bca;\r\n color: #ffffff;\r\n border: 0 solid rgba(0, 0, 0, 0);\r\n}\r\n.selectize-control.multi .selectize-input.disabled > div,\r\n.selectize-control.multi .selectize-input.disabled > div.active {\r\n color: #808080;\r\n background: #ffffff;\r\n border: 0 solid rgba(77, 77, 77, 0);\r\n}\r\n.selectize-input > input {\r\n display: inline-block !important;\r\n padding: 0 !important;\r\n min-height: 0 !important;\r\n max-height: none !important;\r\n max-width: 100% !important;\r\n margin: 0 !important;\r\n text-indent: 0 !important;\r\n border: 0 none !important;\r\n background: none !important;\r\n line-height: inherit !important;\r\n -webkit-user-select: auto !important;\r\n -webkit-box-shadow: none !important;\r\n box-shadow: none !important;\r\n}\r\n.selectize-input > input::-ms-clear {\r\n display: none;\r\n}\r\n.selectize-input > input:focus {\r\n outline: none !important;\r\n}\r\n.selectize-input::after {\r\n content: ' ';\r\n display: block;\r\n clear: left;\r\n}\r\n.selectize-input.dropdown-active::before {\r\n content: ' ';\r\n display: block;\r\n position: absolute;\r\n background: #ffffff;\r\n height: 1px;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n}\r\n.selectize-dropdown {\r\n position: absolute;\r\n z-index: 10;\r\n border: 1px solid #d0d0d0;\r\n background: #ffffff;\r\n margin: -1px 0 0 0;\r\n border-top: 0 none;\r\n -webkit-box-sizing: border-box;\r\n -moz-box-sizing: border-box;\r\n box-sizing: border-box;\r\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n -webkit-border-radius: 0 0 4px 4px;\r\n -moz-border-radius: 0 0 4px 4px;\r\n border-radius: 0 0 4px 4px;\r\n}\r\n.selectize-dropdown [data-selectable] {\r\n cursor: pointer;\r\n overflow: hidden;\r\n}\r\n.selectize-dropdown [data-selectable] .highlight {\r\n background: rgba(255, 237, 40, 0.4);\r\n -webkit-border-radius: 1px;\r\n -moz-border-radius: 1px;\r\n border-radius: 1px;\r\n}\r\n.selectize-dropdown [data-selectable],\r\n.selectize-dropdown .optgroup-header {\r\n padding: 3px 12px;\r\n}\r\n.selectize-dropdown .optgroup:first-child .optgroup-header {\r\n border-top: 0 none;\r\n}\r\n.selectize-dropdown .optgroup-header {\r\n color: #777777;\r\n background: #ffffff;\r\n cursor: default;\r\n}\r\n.selectize-dropdown .active {\r\n background-color: #f5f5f5;\r\n color: #262626;\r\n}\r\n.selectize-dropdown .active.create {\r\n color: #262626;\r\n}\r\n.selectize-dropdown .create {\r\n color: rgba(51, 51, 51, 0.5);\r\n}\r\n.selectize-dropdown-content {\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n max-height: 200px;\r\n}\r\n.selectize-control.single .selectize-input,\r\n.selectize-control.single .selectize-input input {\r\n cursor: pointer;\r\n}\r\n.selectize-control.single .selectize-input.input-active,\r\n.selectize-control.single .selectize-input.input-active input {\r\n cursor: text;\r\n}\r\n.selectize-control.single .selectize-input:after {\r\n content: ' ';\r\n display: block;\r\n position: absolute;\r\n top: 50%;\r\n right: 17px;\r\n margin-top: -3px;\r\n width: 0;\r\n height: 0;\r\n border-style: solid;\r\n border-width: 5px 5px 0 5px;\r\n border-color: #333333 transparent transparent transparent;\r\n}\r\n.selectize-control.single .selectize-input.dropdown-active:after {\r\n margin-top: -4px;\r\n border-width: 0 5px 5px 5px;\r\n border-color: transparent transparent #333333 transparent;\r\n}\r\n.selectize-control.rtl.single .selectize-input:after {\r\n left: 17px;\r\n right: auto;\r\n}\r\n.selectize-control.rtl .selectize-input > input {\r\n margin: 0 4px 0 -2px !important;\r\n}\r\n.selectize-control .selectize-input.disabled {\r\n opacity: 0.5;\r\n background-color: #ffffff;\r\n}\r\n.selectize-dropdown,\r\n.selectize-dropdown.form-control {\r\n height: auto;\r\n padding: 0;\r\n margin: 2px 0 0 0;\r\n z-index: 1000;\r\n background: #ffffff;\r\n border: 1px solid #cccccc;\r\n border: 1px solid rgba(0, 0, 0, 0.15);\r\n -webkit-border-radius: 4px;\r\n -moz-border-radius: 4px;\r\n border-radius: 4px;\r\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\r\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\r\n}\r\n.selectize-dropdown .optgroup-header {\r\n font-size: 12px;\r\n line-height: 1.42857143;\r\n}\r\n.selectize-dropdown .optgroup:first-child:before {\r\n display: none;\r\n}\r\n.selectize-dropdown .optgroup:before {\r\n content: ' ';\r\n display: block;\r\n height: 1px;\r\n margin: 9px 0;\r\n overflow: hidden;\r\n background-color: #e5e5e5;\r\n margin-left: -12px;\r\n margin-right: -12px;\r\n}\r\n.selectize-dropdown-content {\r\n padding: 5px 0;\r\n}\r\n.selectize-dropdown-header {\r\n padding: 6px 12px;\r\n}\r\n.selectize-input {\r\n min-height: 34px;\r\n}\r\n.selectize-input.dropdown-active {\r\n -webkit-border-radius: 4px;\r\n -moz-border-radius: 4px;\r\n border-radius: 4px;\r\n}\r\n.selectize-input.dropdown-active::before {\r\n display: none;\r\n}\r\n.selectize-input.focus {\r\n border-color: #66afe9;\r\n outline: 0;\r\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\r\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\r\n}\r\n.has-error .selectize-input {\r\n border-color: #a94442;\r\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\r\n}\r\n.has-error .selectize-input:focus {\r\n border-color: #843534;\r\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\r\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\r\n}\r\n.selectize-control.multi .selectize-input.has-items {\r\n padding-left: 9px;\r\n padding-right: 9px;\r\n}\r\n.selectize-control.multi .selectize-input > div {\r\n -webkit-border-radius: 3px;\r\n -moz-border-radius: 3px;\r\n border-radius: 3px;\r\n}\r\n.form-control.selectize-control {\r\n padding: 0;\r\n //height: auto;\r\n border: none;\r\n background: none;\r\n -webkit-box-shadow: none;\r\n box-shadow: none;\r\n -webkit-border-radius: 0;\r\n -moz-border-radius: 0;\r\n border-radius: 0;\r\n}\r\n","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n @include box-sizing(border-box);\n}\n*:before,\n*:after {\n @include box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: $font-family-base;\n font-size: $font-size-base;\n line-height: $line-height-base;\n color: $text-color;\n background-color: $body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n\n &:focus {\n @include tab-focus;\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n @include img-responsive;\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: $border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: $thumbnail-padding;\n line-height: $line-height-base;\n background-color: $thumbnail-bg;\n border: 1px solid $thumbnail-border;\n border-radius: $thumbnail-border-radius;\n @include transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n @include img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: $line-height-computed;\n margin-bottom: $line-height-computed;\n border: 0;\n border-top: 1px solid $hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n@mixin animation($animation) {\n -webkit-animation: $animation;\n -o-animation: $animation;\n animation: $animation;\n}\n@mixin animation-name($name) {\n -webkit-animation-name: $name;\n animation-name: $name;\n}\n@mixin animation-duration($duration) {\n -webkit-animation-duration: $duration;\n animation-duration: $duration;\n}\n@mixin animation-timing-function($timing-function) {\n -webkit-animation-timing-function: $timing-function;\n animation-timing-function: $timing-function;\n}\n@mixin animation-delay($delay) {\n -webkit-animation-delay: $delay;\n animation-delay: $delay;\n}\n@mixin animation-iteration-count($iteration-count) {\n -webkit-animation-iteration-count: $iteration-count;\n animation-iteration-count: $iteration-count;\n}\n@mixin animation-direction($direction) {\n -webkit-animation-direction: $direction;\n animation-direction: $direction;\n}\n@mixin animation-fill-mode($fill-mode) {\n -webkit-animation-fill-mode: $fill-mode;\n animation-fill-mode: $fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n@mixin backface-visibility($visibility) {\n -webkit-backface-visibility: $visibility;\n -moz-backface-visibility: $visibility;\n backface-visibility: $visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n@mixin box-shadow($shadow...) {\n -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1\n box-shadow: $shadow;\n}\n\n// Box sizing\n@mixin box-sizing($boxmodel) {\n -webkit-box-sizing: $boxmodel;\n -moz-box-sizing: $boxmodel;\n box-sizing: $boxmodel;\n}\n\n// CSS3 Content Columns\n@mixin content-columns($column-count, $column-gap: $grid-gutter-width) {\n -webkit-column-count: $column-count;\n -moz-column-count: $column-count;\n column-count: $column-count;\n -webkit-column-gap: $column-gap;\n -moz-column-gap: $column-gap;\n column-gap: $column-gap;\n}\n\n// Optional hyphenation\n@mixin hyphens($mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: $mode;\n -moz-hyphens: $mode;\n -ms-hyphens: $mode; // IE10+\n -o-hyphens: $mode;\n hyphens: $mode;\n}\n\n// Placeholder text\n@mixin placeholder($color: $input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: $color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: $color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: $color; } // Safari and Chrome\n}\n\n// Transformations\n@mixin scale($ratio...) {\n -webkit-transform: scale($ratio);\n -ms-transform: scale($ratio); // IE9 only\n -o-transform: scale($ratio);\n transform: scale($ratio);\n}\n\n@mixin scaleX($ratio) {\n -webkit-transform: scaleX($ratio);\n -ms-transform: scaleX($ratio); // IE9 only\n -o-transform: scaleX($ratio);\n transform: scaleX($ratio);\n}\n@mixin scaleY($ratio) {\n -webkit-transform: scaleY($ratio);\n -ms-transform: scaleY($ratio); // IE9 only\n -o-transform: scaleY($ratio);\n transform: scaleY($ratio);\n}\n@mixin skew($x, $y) {\n -webkit-transform: skewX($x) skewY($y);\n -ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX($x) skewY($y);\n transform: skewX($x) skewY($y);\n}\n@mixin translate($x, $y) {\n -webkit-transform: translate($x, $y);\n -ms-transform: translate($x, $y); // IE9 only\n -o-transform: translate($x, $y);\n transform: translate($x, $y);\n}\n@mixin translate3d($x, $y, $z) {\n -webkit-transform: translate3d($x, $y, $z);\n transform: translate3d($x, $y, $z);\n}\n@mixin rotate($degrees) {\n -webkit-transform: rotate($degrees);\n -ms-transform: rotate($degrees); // IE9 only\n -o-transform: rotate($degrees);\n transform: rotate($degrees);\n}\n@mixin rotateX($degrees) {\n -webkit-transform: rotateX($degrees);\n -ms-transform: rotateX($degrees); // IE9 only\n -o-transform: rotateX($degrees);\n transform: rotateX($degrees);\n}\n@mixin rotateY($degrees) {\n -webkit-transform: rotateY($degrees);\n -ms-transform: rotateY($degrees); // IE9 only\n -o-transform: rotateY($degrees);\n transform: rotateY($degrees);\n}\n@mixin perspective($perspective) {\n -webkit-perspective: $perspective;\n -moz-perspective: $perspective;\n perspective: $perspective;\n}\n@mixin perspective-origin($perspective) {\n -webkit-perspective-origin: $perspective;\n -moz-perspective-origin: $perspective;\n perspective-origin: $perspective;\n}\n@mixin transform-origin($origin) {\n -webkit-transform-origin: $origin;\n -moz-transform-origin: $origin;\n -ms-transform-origin: $origin; // IE9 only\n transform-origin: $origin;\n}\n\n\n// Transitions\n\n@mixin transition($transition...) {\n -webkit-transition: $transition;\n -o-transition: $transition;\n transition: $transition;\n}\n@mixin transition-property($transition-property...) {\n -webkit-transition-property: $transition-property;\n transition-property: $transition-property;\n}\n@mixin transition-delay($transition-delay) {\n -webkit-transition-delay: $transition-delay;\n transition-delay: $transition-delay;\n}\n@mixin transition-duration($transition-duration...) {\n -webkit-transition-duration: $transition-duration;\n transition-duration: $transition-duration;\n}\n@mixin transition-timing-function($timing-function) {\n -webkit-transition-timing-function: $timing-function;\n transition-timing-function: $timing-function;\n}\n@mixin transition-transform($transition...) {\n -webkit-transition: -webkit-transform $transition;\n -moz-transition: -moz-transform $transition;\n -o-transition: -o-transform $transition;\n transition: transform $transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n@mixin user-select($select) {\n -webkit-user-select: $select;\n -moz-user-select: $select;\n -ms-user-select: $select; // IE10+\n user-select: $select;\n}\n","$brand-primary: darken(#3498db, 6.5%) !default; // #337ab7\n$brand-success: #27ae60 !default;\n$brand-info: #2980b9 !default;\n$brand-warning: #e67e22 !default;\n$brand-danger: #c0392b !default;\n\n$font-family-sans-serif: 'Roboto', sans-serif !default;\n$font-family-serif: 'Roboto', sans-serif !default;\n\n$font-family-brand:\t\"Raleway\",Helvetica, Arial !default;","$bootstrap-sass-asset-helper: false !default;\n//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n$gray-base: #000 !default;\n$gray-darker: lighten($gray-base, 13.5%) !default; // #222\n$gray-dark: lighten($gray-base, 20%) !default; // #333\n$gray: lighten($gray-base, 33.5%) !default; // #555\n$gray-light: lighten($gray-base, 46.7%) !default; // #777\n$gray-lighter: lighten($gray-base, 93.5%) !default; // #eee\n\n$brand-primary: darken(#428bca, 6.5%) !default; // #337ab7\n$brand-success: #5cb85c !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-danger: #d9534f !default;\n\n\n//== Scaffolding\n//\n//## Settings for some of the most global styles.\n\n//** Background color for ``.\n$body-bg: #fff !default;\n//** Global text color on ``.\n$text-color: $gray-dark !default;\n\n//** Global textual link color.\n$link-color: $brand-primary !default;\n//** Link hover color set via `darken()` function.\n$link-hover-color: darken($link-color, 15%) !default;\n//** Link hover decoration.\n$link-hover-decoration: underline !default;\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n$font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif !default;\n$font-family-serif: Georgia, \"Times New Roman\", Times, serif !default;\n//** Default monospace fonts for ``, ``, and `
    `.\n$font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace !default;\n$font-family-base:        $font-family-sans-serif !default;\n\n$font-size-base:          14px !default;\n$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px\n$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px\n\n$font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px\n$font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px\n$font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px\n$font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px\n$font-size-h5:            $font-size-base !default;\n$font-size-h6:            ceil(($font-size-base * 0.85)) !default; // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n$line-height-base:        1.428571429 !default; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px\n\n//** By default, this inherits from the ``.\n$headings-font-family:    inherit !default;\n$headings-font-weight:    500 !default;\n$headings-line-height:    1.1 !default;\n$headings-color:          inherit !default;\n\n\n//== Iconography\n//\n//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n//** Load fonts from this directory.\n\n// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.\n// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.\n$icon-font-path: if($bootstrap-sass-asset-helper, \"bootstrap/\", \"../fonts/bootstrap/\") !default;\n\n//** File name for all font files.\n$icon-font-name:          \"glyphicons-halflings-regular\" !default;\n//** Element ID within SVG icon file.\n$icon-font-svg-id:        \"glyphicons_halflingsregular\" !default;\n\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n$padding-base-vertical:     6px !default;\n$padding-base-horizontal:   12px !default;\n\n$padding-large-vertical:    10px !default;\n$padding-large-horizontal:  16px !default;\n\n$padding-small-vertical:    5px !default;\n$padding-small-horizontal:  10px !default;\n\n$padding-xs-vertical:       1px !default;\n$padding-xs-horizontal:     5px !default;\n\n$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome\n$line-height-small:         1.5 !default;\n\n$border-radius-base:        4px !default;\n$border-radius-large:       6px !default;\n$border-radius-small:       3px !default;\n\n//** Global color for active items (e.g., navs or dropdowns).\n$component-active-color:    #fff !default;\n//** Global background color for active items (e.g., navs or dropdowns).\n$component-active-bg:       $brand-primary !default;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n$caret-width-base:          4px !default;\n//** Carets increase slightly in size for larger components.\n$caret-width-large:         5px !default;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for `
    `s and ``s.\n$table-cell-padding: 8px !default;\n//** Padding for cells in `.table-condensed`.\n$table-condensed-cell-padding: 5px !default;\n\n//** Default background color used for all tables.\n$table-bg: transparent !default;\n//** Background color used for `.table-striped`.\n$table-bg-accent: #f9f9f9 !default;\n//** Background color used for `.table-hover`.\n$table-bg-hover: #f5f5f5 !default;\n$table-bg-active: $table-bg-hover !default;\n\n//** Border color for table and cell borders.\n$table-border-color: #ddd !default;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n$btn-font-weight: normal !default;\n\n$btn-default-color: #333 !default;\n$btn-default-bg: #fff !default;\n$btn-default-border: #ccc !default;\n\n$btn-primary-color: #fff !default;\n$btn-primary-bg: $brand-primary !default;\n$btn-primary-border: darken($btn-primary-bg, 5%) !default;\n\n$btn-success-color: #fff !default;\n$btn-success-bg: $brand-success !default;\n$btn-success-border: darken($btn-success-bg, 5%) !default;\n\n$btn-info-color: #fff !default;\n$btn-info-bg: $brand-info !default;\n$btn-info-border: darken($btn-info-bg, 5%) !default;\n\n$btn-warning-color: #fff !default;\n$btn-warning-bg: $brand-warning !default;\n$btn-warning-border: darken($btn-warning-bg, 5%) !default;\n\n$btn-danger-color: #fff !default;\n$btn-danger-bg: $brand-danger !default;\n$btn-danger-border: darken($btn-danger-bg, 5%) !default;\n\n$btn-link-disabled-color: $gray-light !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius-base: $border-radius-base !default;\n$btn-border-radius-large: $border-radius-large !default;\n$btn-border-radius-small: $border-radius-small !default;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n$input-bg: #fff !default;\n//** `` background color\n$input-bg-disabled: $gray-lighter !default;\n\n//** Text color for ``s\n$input-color: $gray !default;\n//** `` border color\n$input-border: #ccc !default;\n\n// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4\n//** Default `.form-control` border radius\n// This has no effect on ``s in CSS.\n$input-border-radius: $border-radius-base !default;\n//** Large `.form-control` border radius\n$input-border-radius-large: $border-radius-large !default;\n//** Small `.form-control` border radius\n$input-border-radius-small: $border-radius-small !default;\n\n//** Border color for inputs on focus\n$input-border-focus: #66afe9 !default;\n\n//** Placeholder text color\n$input-color-placeholder: #999 !default;\n\n//** Default `.form-control` height\n$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;\n//** Large `.form-control` height\n$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;\n//** Small `.form-control` height\n$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;\n\n//** `.form-group` margin\n$form-group-margin-bottom: 15px !default;\n\n$legend-color: $gray-dark !default;\n$legend-border-color: #e5e5e5 !default;\n\n//** Background color for textual input addons\n$input-group-addon-bg: $gray-lighter !default;\n//** Border color for textual input addons\n$input-group-addon-border-color: $input-border !default;\n\n//** Disabled cursor for form controls and buttons.\n$cursor-disabled: not-allowed !default;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n$dropdown-bg: #fff !default;\n//** Dropdown menu `border-color`.\n$dropdown-border: rgba(0,0,0,.15) !default;\n//** Dropdown menu `border-color` **for IE8**.\n$dropdown-fallback-border: #ccc !default;\n//** Divider color for between dropdown items.\n$dropdown-divider-bg: #e5e5e5 !default;\n\n//** Dropdown link text color.\n$dropdown-link-color: $gray-dark !default;\n//** Hover color for dropdown links.\n$dropdown-link-hover-color: darken($gray-dark, 5%) !default;\n//** Hover background for dropdown links.\n$dropdown-link-hover-bg: #f5f5f5 !default;\n\n//** Active dropdown menu item text color.\n$dropdown-link-active-color: $component-active-color !default;\n//** Active dropdown menu item background color.\n$dropdown-link-active-bg: $component-active-bg !default;\n\n//** Disabled dropdown menu item background color.\n$dropdown-link-disabled-color: $gray-light !default;\n\n//** Text color for headers within dropdown menus.\n$dropdown-header-color: $gray-light !default;\n\n//** Deprecated `$dropdown-caret-color` as of v3.1.0\n$dropdown-caret-color: #000 !default;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n$zindex-navbar: 1000 !default;\n$zindex-dropdown: 1000 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n$zindex-navbar-fixed: 1030 !default;\n$zindex-modal-background: 1040 !default;\n$zindex-modal: 1050 !default;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n//** Deprecated `$screen-xs` as of v3.0.1\n$screen-xs: 480px !default;\n//** Deprecated `$screen-xs-min` as of v3.2.0\n$screen-xs-min: $screen-xs !default;\n//** Deprecated `$screen-phone` as of v3.0.1\n$screen-phone: $screen-xs-min !default;\n\n// Small screen / tablet\n//** Deprecated `$screen-sm` as of v3.0.1\n$screen-sm: 768px !default;\n$screen-sm-min: $screen-sm !default;\n//** Deprecated `$screen-tablet` as of v3.0.1\n$screen-tablet: $screen-sm-min !default;\n\n// Medium screen / desktop\n//** Deprecated `$screen-md` as of v3.0.1\n$screen-md: 992px !default;\n$screen-md-min: $screen-md !default;\n//** Deprecated `$screen-desktop` as of v3.0.1\n$screen-desktop: $screen-md-min !default;\n\n// Large screen / wide desktop\n//** Deprecated `$screen-lg` as of v3.0.1\n$screen-lg: 1200px !default;\n$screen-lg-min: $screen-lg !default;\n//** Deprecated `$screen-lg-desktop` as of v3.0.1\n$screen-lg-desktop: $screen-lg-min !default;\n\n// So media queries don't overlap when required, provide a maximum\n$screen-xs-max: ($screen-sm-min - 1) !default;\n$screen-sm-max: ($screen-md-min - 1) !default;\n$screen-md-max: ($screen-lg-min - 1) !default;\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n$grid-columns: 12 !default;\n//** Padding between columns. Gets divided in half for the left and right.\n$grid-gutter-width: 30px !default;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n$grid-float-breakpoint: $screen-sm-min !default;\n//** Point at which the navbar begins collapsing.\n$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n$container-tablet: (720px + $grid-gutter-width) !default;\n//** For `$screen-sm-min` and up.\n$container-sm: $container-tablet !default;\n\n// Medium screen / desktop\n$container-desktop: (940px + $grid-gutter-width) !default;\n//** For `$screen-md-min` and up.\n$container-md: $container-desktop !default;\n\n// Large screen / wide desktop\n$container-large-desktop: (1140px + $grid-gutter-width) !default;\n//** For `$screen-lg-min` and up.\n$container-lg: $container-large-desktop !default;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n$navbar-height: 50px !default;\n$navbar-margin-bottom: $line-height-computed !default;\n$navbar-border-radius: $border-radius-base !default;\n$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default;\n$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default;\n$navbar-collapse-max-height: 340px !default;\n\n$navbar-default-color: #777 !default;\n$navbar-default-bg: #f8f8f8 !default;\n$navbar-default-border: darken($navbar-default-bg, 6.5%) !default;\n\n// Navbar links\n$navbar-default-link-color: #777 !default;\n$navbar-default-link-hover-color: #333 !default;\n$navbar-default-link-hover-bg: transparent !default;\n$navbar-default-link-active-color: #555 !default;\n$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) !default;\n$navbar-default-link-disabled-color: #ccc !default;\n$navbar-default-link-disabled-bg: transparent !default;\n\n// Navbar brand label\n$navbar-default-brand-color: $navbar-default-link-color !default;\n$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default;\n$navbar-default-brand-hover-bg: transparent !default;\n\n// Navbar toggle\n$navbar-default-toggle-hover-bg: #ddd !default;\n$navbar-default-toggle-icon-bar-bg: #888 !default;\n$navbar-default-toggle-border-color: #ddd !default;\n\n\n//=== Inverted navbar\n// Reset inverted navbar basics\n$navbar-inverse-color: lighten($gray-light, 15%) !default;\n$navbar-inverse-bg: #222 !default;\n$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default;\n\n// Inverted navbar links\n$navbar-inverse-link-color: lighten($gray-light, 15%) !default;\n$navbar-inverse-link-hover-color: #fff !default;\n$navbar-inverse-link-hover-bg: transparent !default;\n$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default;\n$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default;\n$navbar-inverse-link-disabled-color: #444 !default;\n$navbar-inverse-link-disabled-bg: transparent !default;\n\n// Inverted navbar brand label\n$navbar-inverse-brand-color: $navbar-inverse-link-color !default;\n$navbar-inverse-brand-hover-color: #fff !default;\n$navbar-inverse-brand-hover-bg: transparent !default;\n\n// Inverted navbar toggle\n$navbar-inverse-toggle-hover-bg: #333 !default;\n$navbar-inverse-toggle-icon-bar-bg: #fff !default;\n$navbar-inverse-toggle-border-color: #333 !default;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n$nav-link-padding: 10px 15px !default;\n$nav-link-hover-bg: $gray-lighter !default;\n\n$nav-disabled-link-color: $gray-light !default;\n$nav-disabled-link-hover-color: $gray-light !default;\n\n//== Tabs\n$nav-tabs-border-color: #ddd !default;\n\n$nav-tabs-link-hover-border-color: $gray-lighter !default;\n\n$nav-tabs-active-link-hover-bg: $body-bg !default;\n$nav-tabs-active-link-hover-color: $gray !default;\n$nav-tabs-active-link-hover-border-color: #ddd !default;\n\n$nav-tabs-justified-link-border-color: #ddd !default;\n$nav-tabs-justified-active-link-border-color: $body-bg !default;\n\n//== Pills\n$nav-pills-border-radius: $border-radius-base !default;\n$nav-pills-active-link-hover-bg: $component-active-bg !default;\n$nav-pills-active-link-hover-color: $component-active-color !default;\n\n\n//== Pagination\n//\n//##\n\n$pagination-color: $link-color !default;\n$pagination-bg: #fff !default;\n$pagination-border: #ddd !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-lighter !default;\n$pagination-hover-border: #ddd !default;\n\n$pagination-active-color: #fff !default;\n$pagination-active-bg: $brand-primary !default;\n$pagination-active-border: $brand-primary !default;\n\n$pagination-disabled-color: $gray-light !default;\n$pagination-disabled-bg: #fff !default;\n$pagination-disabled-border: #ddd !default;\n\n\n//== Pager\n//\n//##\n\n$pager-bg: $pagination-bg !default;\n$pager-border: $pagination-border !default;\n$pager-border-radius: 15px !default;\n\n$pager-hover-bg: $pagination-hover-bg !default;\n\n$pager-active-bg: $pagination-active-bg !default;\n$pager-active-color: $pagination-active-color !default;\n\n$pager-disabled-color: $pagination-disabled-color !default;\n\n\n//== Jumbotron\n//\n//##\n\n$jumbotron-padding: 30px !default;\n$jumbotron-color: inherit !default;\n$jumbotron-bg: $gray-lighter !default;\n$jumbotron-heading-color: inherit !default;\n$jumbotron-font-size: ceil(($font-size-base * 1.5)) !default;\n$jumbotron-heading-font-size: ceil(($font-size-base * 4.5)) !default;\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n$state-success-text: #3c763d !default;\n$state-success-bg: #dff0d8 !default;\n$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default;\n\n$state-info-text: #31708f !default;\n$state-info-bg: #d9edf7 !default;\n$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default;\n\n$state-warning-text: #8a6d3b !default;\n$state-warning-bg: #fcf8e3 !default;\n$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default;\n\n$state-danger-text: #a94442 !default;\n$state-danger-bg: #f2dede !default;\n$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default;\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n$tooltip-max-width: 200px !default;\n//** Tooltip text color\n$tooltip-color: #fff !default;\n//** Tooltip background color\n$tooltip-bg: #000 !default;\n$tooltip-opacity: .9 !default;\n\n//** Tooltip arrow width\n$tooltip-arrow-width: 5px !default;\n//** Tooltip arrow color\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n$popover-bg: #fff !default;\n//** Popover maximum width\n$popover-max-width: 276px !default;\n//** Popover border color\n$popover-border-color: rgba(0,0,0,.2) !default;\n//** Popover fallback border color\n$popover-fallback-border-color: #ccc !default;\n\n//** Popover title background color\n$popover-title-bg: darken($popover-bg, 3%) !default;\n\n//** Popover arrow width\n$popover-arrow-width: 10px !default;\n//** Popover arrow color\n$popover-arrow-color: $popover-bg !default;\n\n//** Popover outer arrow width\n$popover-arrow-outer-width: ($popover-arrow-width + 1) !default;\n//** Popover outer arrow color\n$popover-arrow-outer-color: fade_in($popover-border-color, 0.05) !default;\n//** Popover outer arrow fallback color\n$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default;\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n$label-default-bg: $gray-light !default;\n//** Primary label background color\n$label-primary-bg: $brand-primary !default;\n//** Success label background color\n$label-success-bg: $brand-success !default;\n//** Info label background color\n$label-info-bg: $brand-info !default;\n//** Warning label background color\n$label-warning-bg: $brand-warning !default;\n//** Danger label background color\n$label-danger-bg: $brand-danger !default;\n\n//** Default label text color\n$label-color: #fff !default;\n//** Default text color of a linked label\n$label-link-hover-color: #fff !default;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n$modal-inner-padding: 15px !default;\n\n//** Padding applied to the modal title\n$modal-title-padding: 15px !default;\n//** Modal title line-height\n$modal-title-line-height: $line-height-base !default;\n\n//** Background color of modal content area\n$modal-content-bg: #fff !default;\n//** Modal content border color\n$modal-content-border-color: rgba(0,0,0,.2) !default;\n//** Modal content border color **for IE8**\n$modal-content-fallback-border-color: #999 !default;\n\n//** Modal backdrop background color\n$modal-backdrop-bg: #000 !default;\n//** Modal backdrop opacity\n$modal-backdrop-opacity: .5 !default;\n//** Modal header border color\n$modal-header-border-color: #e5e5e5 !default;\n//** Modal footer border color\n$modal-footer-border-color: $modal-header-border-color !default;\n\n$modal-lg: 900px !default;\n$modal-md: 600px !default;\n$modal-sm: 300px !default;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n$alert-padding: 15px !default;\n$alert-border-radius: $border-radius-base !default;\n$alert-link-font-weight: bold !default;\n\n$alert-success-bg: $state-success-bg !default;\n$alert-success-text: $state-success-text !default;\n$alert-success-border: $state-success-border !default;\n\n$alert-info-bg: $state-info-bg !default;\n$alert-info-text: $state-info-text !default;\n$alert-info-border: $state-info-border !default;\n\n$alert-warning-bg: $state-warning-bg !default;\n$alert-warning-text: $state-warning-text !default;\n$alert-warning-border: $state-warning-border !default;\n\n$alert-danger-bg: $state-danger-bg !default;\n$alert-danger-text: $state-danger-text !default;\n$alert-danger-border: $state-danger-border !default;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n$progress-bg: #f5f5f5 !default;\n//** Progress bar text color\n$progress-bar-color: #fff !default;\n//** Variable for setting rounded corners on progress bar.\n$progress-border-radius: $border-radius-base !default;\n\n//** Default progress bar color\n$progress-bar-bg: $brand-primary !default;\n//** Success progress bar color\n$progress-bar-success-bg: $brand-success !default;\n//** Warning progress bar color\n$progress-bar-warning-bg: $brand-warning !default;\n//** Danger progress bar color\n$progress-bar-danger-bg: $brand-danger !default;\n//** Info progress bar color\n$progress-bar-info-bg: $brand-info !default;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n$list-group-bg: #fff !default;\n//** `.list-group-item` border color\n$list-group-border: #ddd !default;\n//** List group border radius\n$list-group-border-radius: $border-radius-base !default;\n\n//** Background color of single list items on hover\n$list-group-hover-bg: #f5f5f5 !default;\n//** Text color of active list items\n$list-group-active-color: $component-active-color !default;\n//** Background color of active list items\n$list-group-active-bg: $component-active-bg !default;\n//** Border color of active list elements\n$list-group-active-border: $list-group-active-bg !default;\n//** Text color for content within active list items\n$list-group-active-text-color: lighten($list-group-active-bg, 40%) !default;\n\n//** Text color of disabled list items\n$list-group-disabled-color: $gray-light !default;\n//** Background color of disabled list items\n$list-group-disabled-bg: $gray-lighter !default;\n//** Text color for content within disabled list items\n$list-group-disabled-text-color: $list-group-disabled-color !default;\n\n$list-group-link-color: #555 !default;\n$list-group-link-hover-color: $list-group-link-color !default;\n$list-group-link-heading-color: #333 !default;\n\n\n//== Panels\n//\n//##\n\n$panel-bg: #fff !default;\n$panel-body-padding: 15px !default;\n$panel-heading-padding: 10px 15px !default;\n$panel-footer-padding: $panel-heading-padding !default;\n$panel-border-radius: $border-radius-base !default;\n\n//** Border color for elements within panels\n$panel-inner-border: #ddd !default;\n$panel-footer-bg: #f5f5f5 !default;\n\n$panel-default-text: $gray-dark !default;\n$panel-default-border: #ddd !default;\n$panel-default-heading-bg: #f5f5f5 !default;\n\n$panel-primary-text: #fff !default;\n$panel-primary-border: $brand-primary !default;\n$panel-primary-heading-bg: $brand-primary !default;\n\n$panel-success-text: $state-success-text !default;\n$panel-success-border: $state-success-border !default;\n$panel-success-heading-bg: $state-success-bg !default;\n\n$panel-info-text: $state-info-text !default;\n$panel-info-border: $state-info-border !default;\n$panel-info-heading-bg: $state-info-bg !default;\n\n$panel-warning-text: $state-warning-text !default;\n$panel-warning-border: $state-warning-border !default;\n$panel-warning-heading-bg: $state-warning-bg !default;\n\n$panel-danger-text: $state-danger-text !default;\n$panel-danger-border: $state-danger-border !default;\n$panel-danger-heading-bg: $state-danger-bg !default;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n$thumbnail-padding: 4px !default;\n//** Thumbnail background color\n$thumbnail-bg: $body-bg !default;\n//** Thumbnail border color\n$thumbnail-border: #ddd !default;\n//** Thumbnail border radius\n$thumbnail-border-radius: $border-radius-base !default;\n\n//** Custom text color for thumbnail captions\n$thumbnail-caption-color: $text-color !default;\n//** Padding around the thumbnail caption\n$thumbnail-caption-padding: 9px !default;\n\n\n//== Wells\n//\n//##\n\n$well-bg: #f5f5f5 !default;\n$well-border: darken($well-bg, 7%) !default;\n\n\n//== Badges\n//\n//##\n\n$badge-color: #fff !default;\n//** Linked badge text color on hover\n$badge-link-hover-color: #fff !default;\n$badge-bg: $gray-light !default;\n\n//** Badge text color in active nav link\n$badge-active-color: $link-color !default;\n//** Badge background color in active nav link\n$badge-active-bg: #fff !default;\n\n$badge-font-weight: bold !default;\n$badge-line-height: 1 !default;\n$badge-border-radius: 10px !default;\n\n\n//== Breadcrumbs\n//\n//##\n\n$breadcrumb-padding-vertical: 8px !default;\n$breadcrumb-padding-horizontal: 15px !default;\n//** Breadcrumb background color\n$breadcrumb-bg: #f5f5f5 !default;\n//** Breadcrumb text color\n$breadcrumb-color: #ccc !default;\n//** Text color of current page in the breadcrumb\n$breadcrumb-active-color: $gray-light !default;\n//** Textual separator for between breadcrumb elements\n$breadcrumb-separator: \"/\" !default;\n\n\n//== Carousel\n//\n//##\n\n$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default;\n\n$carousel-control-color: #fff !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-font-size: 20px !default;\n\n$carousel-indicator-active-bg: #fff !default;\n$carousel-indicator-border-color: #fff !default;\n\n$carousel-caption-color: #fff !default;\n\n\n//== Close\n//\n//##\n\n$close-font-weight: bold !default;\n$close-color: #000 !default;\n$close-text-shadow: 0 1px 0 #fff !default;\n\n\n//== Code\n//\n//##\n\n$code-color: #c7254e !default;\n$code-bg: #f9f2f4 !default;\n\n$kbd-color: #fff !default;\n$kbd-bg: #333 !default;\n\n$pre-bg: #f5f5f5 !default;\n$pre-color: $gray-dark !default;\n$pre-border-color: #ccc !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n//== Type\n//\n//##\n\n//** Horizontal offset for forms and lists.\n$component-offset-horizontal: 180px !default;\n//** Text muted color\n$text-muted: $gray-light !default;\n//** Abbreviations and acronyms border color\n$abbr-border-color: $gray-light !default;\n//** Headings small color\n$headings-small-color: $gray-light !default;\n//** Blockquote small color\n$blockquote-small-color: $gray-light !default;\n//** Blockquote font size\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n//** Blockquote border color\n$blockquote-border-color: $gray-lighter !default;\n//** Page header border color\n$page-header-border-color: $gray-lighter !default;\n//** Width of horizontal description list titles\n$dl-horizontal-offset: $component-offset-horizontal !default;\n//** Point at which .dl-horizontal becomes horizontal\n$dl-horizontal-breakpoint: $grid-float-breakpoint !default;\n//** Horizontal line color.\n$hr-border: $gray-lighter !default;\n","// WebKit-style focus\n\n@mixin tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n@mixin img-responsive($display: block) {\n display: $display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path(\"#{$file-1x}\"), \"#{$file-1x}\"));\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path(\"#{$file-2x}\"), \"#{$file-2x}\"));\n background-size: $width-1x $height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: $headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: $line-height-computed;\n margin-bottom: ($line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: ($line-height-computed / 2);\n margin-bottom: ($line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: $font-size-h1; }\nh2, .h2 { font-size: $font-size-h2; }\nh3, .h3 { font-size: $font-size-h3; }\nh4, .h4 { font-size: $font-size-h4; }\nh5, .h5 { font-size: $font-size-h5; }\nh6, .h6 { font-size: $font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 ($line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: $line-height-computed;\n font-size: floor(($font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: $screen-sm-min) {\n font-size: ($font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * $font-size-small / $font-size-base));\n}\n\nmark,\n.mark {\n background-color: $state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: $text-muted;\n}\n\n@include text-emphasis-variant('.text-primary', $brand-primary);\n\n@include text-emphasis-variant('.text-success', $state-success-text);\n\n@include text-emphasis-variant('.text-info', $state-info-text);\n\n@include text-emphasis-variant('.text-warning', $state-warning-text);\n\n@include text-emphasis-variant('.text-danger', $state-danger-text);\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n}\n@include bg-variant('.bg-primary', $brand-primary);\n\n@include bg-variant('.bg-success', $state-success-bg);\n\n@include bg-variant('.bg-info', $state-info-bg);\n\n@include bg-variant('.bg-warning', $state-warning-bg);\n\n@include bg-variant('.bg-danger', $state-danger-bg);\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: (($line-height-computed / 2) - 1);\n margin: ($line-height-computed * 2) 0 $line-height-computed;\n border-bottom: 1px solid $page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: ($line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// [converter] extracted from `.list-unstyled` for libsass compatibility\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n// [converter] extracted as `@mixin list-unstyled` for libsass compatibility\n.list-unstyled {\n @include list-unstyled;\n}\n\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled;\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: $line-height-computed;\n}\ndt,\ndd {\n line-height: $line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n @include clearfix; // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: $dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: ($dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n @include text-overflow;\n }\n dd {\n margin-left: $dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted $abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n @extend .text-uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: ($line-height-computed / 2) $line-height-computed;\n margin: 0 0 $line-height-computed;\n font-size: $blockquote-font-size;\n border-left: 5px solid $blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: $line-height-base;\n color: $blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid $blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: $line-height-computed;\n font-style: normal;\n line-height: $line-height-base;\n}\n","// Typography\n\n// [converter] $parent hack\n@mixin text-emphasis-variant($parent, $color) {\n #{$parent} {\n color: $color;\n }\n a#{$parent}:hover,\n a#{$parent}:focus {\n color: darken($color, 10%);\n }\n}\n","// Contextual backgrounds\n\n// [converter] $parent hack\n@mixin bg-variant($parent, $color) {\n #{$parent} {\n background-color: $color;\n }\n a#{$parent}:hover,\n a#{$parent}:focus {\n background-color: darken($color, 10%);\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n@mixin clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n@mixin text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: $font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: $code-color;\n background-color: $code-bg;\n border-radius: $border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: $kbd-color;\n background-color: $kbd-bg;\n border-radius: $border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: (($line-height-computed - 1) / 2);\n margin: 0 0 ($line-height-computed / 2);\n font-size: ($font-size-base - 1); // 14px to 13px\n line-height: $line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: $pre-color;\n background-color: $pre-bg;\n border: 1px solid $pre-border-color;\n border-radius: $border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n @include container-fixed;\n\n @media (min-width: $screen-sm-min) {\n width: $container-sm;\n }\n @media (min-width: $screen-md-min) {\n width: $container-md;\n }\n @media (min-width: $screen-lg-min) {\n width: $container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n @include container-fixed;\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n @include make-row;\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@include make-grid-columns;\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n@include make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: $screen-sm-min) {\n @include make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: $screen-md-min) {\n @include make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: $screen-lg-min) {\n @include make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n@mixin container-fixed($gutter: $grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor(($gutter / 2));\n padding-right: ceil(($gutter / 2));\n @include clearfix;\n}\n\n// Creates a wrapper for a series of columns\n@mixin make-row($gutter: $grid-gutter-width) {\n margin-left: ceil(($gutter / -2));\n margin-right: floor(($gutter / -2));\n @include clearfix;\n}\n\n// Generate the extra small columns\n@mixin make-xs-column($columns, $gutter: $grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage(($columns / $grid-columns));\n min-height: 1px;\n padding-left: ($gutter / 2);\n padding-right: ($gutter / 2);\n}\n@mixin make-xs-column-offset($columns) {\n margin-left: percentage(($columns / $grid-columns));\n}\n@mixin make-xs-column-push($columns) {\n left: percentage(($columns / $grid-columns));\n}\n@mixin make-xs-column-pull($columns) {\n right: percentage(($columns / $grid-columns));\n}\n\n// Generate the small columns\n@mixin make-sm-column($columns, $gutter: $grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: ($gutter / 2);\n padding-right: ($gutter / 2);\n\n @media (min-width: $screen-sm-min) {\n float: left;\n width: percentage(($columns / $grid-columns));\n }\n}\n@mixin make-sm-column-offset($columns) {\n @media (min-width: $screen-sm-min) {\n margin-left: percentage(($columns / $grid-columns));\n }\n}\n@mixin make-sm-column-push($columns) {\n @media (min-width: $screen-sm-min) {\n left: percentage(($columns / $grid-columns));\n }\n}\n@mixin make-sm-column-pull($columns) {\n @media (min-width: $screen-sm-min) {\n right: percentage(($columns / $grid-columns));\n }\n}\n\n// Generate the medium columns\n@mixin make-md-column($columns, $gutter: $grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: ($gutter / 2);\n padding-right: ($gutter / 2);\n\n @media (min-width: $screen-md-min) {\n float: left;\n width: percentage(($columns / $grid-columns));\n }\n}\n@mixin make-md-column-offset($columns) {\n @media (min-width: $screen-md-min) {\n margin-left: percentage(($columns / $grid-columns));\n }\n}\n@mixin make-md-column-push($columns) {\n @media (min-width: $screen-md-min) {\n left: percentage(($columns / $grid-columns));\n }\n}\n@mixin make-md-column-pull($columns) {\n @media (min-width: $screen-md-min) {\n right: percentage(($columns / $grid-columns));\n }\n}\n\n// Generate the large columns\n@mixin make-lg-column($columns, $gutter: $grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: ($gutter / 2);\n padding-right: ($gutter / 2);\n\n @media (min-width: $screen-lg-min) {\n float: left;\n width: percentage(($columns / $grid-columns));\n }\n}\n@mixin make-lg-column-offset($columns) {\n @media (min-width: $screen-lg-min) {\n margin-left: percentage(($columns / $grid-columns));\n }\n}\n@mixin make-lg-column-push($columns) {\n @media (min-width: $screen-lg-min) {\n left: percentage(($columns / $grid-columns));\n }\n}\n@mixin make-lg-column-pull($columns) {\n @media (min-width: $screen-lg-min) {\n right: percentage(($columns / $grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin make-grid-columns($i: 1, $list: \".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}\") {\n @for $i from (1 + 1) through $grid-columns {\n $list: \"#{$list}, .col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}\";\n }\n #{$list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil(($grid-gutter-width / 2));\n padding-right: floor(($grid-gutter-width / 2));\n }\n}\n\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin float-grid-columns($class, $i: 1, $list: \".col-#{$class}-#{$i}\") {\n @for $i from (1 + 1) through $grid-columns {\n $list: \"#{$list}, .col-#{$class}-#{$i}\";\n }\n #{$list} {\n float: left;\n }\n}\n\n\n@mixin calc-grid-column($index, $class, $type) {\n @if ($type == width) and ($index > 0) {\n .col-#{$class}-#{$index} {\n width: percentage(($index / $grid-columns));\n }\n }\n @if ($type == push) and ($index > 0) {\n .col-#{$class}-push-#{$index} {\n left: percentage(($index / $grid-columns));\n }\n }\n @if ($type == push) and ($index == 0) {\n .col-#{$class}-push-0 {\n left: auto;\n }\n }\n @if ($type == pull) and ($index > 0) {\n .col-#{$class}-pull-#{$index} {\n right: percentage(($index / $grid-columns));\n }\n }\n @if ($type == pull) and ($index == 0) {\n .col-#{$class}-pull-0 {\n right: auto;\n }\n }\n @if ($type == offset) {\n .col-#{$class}-offset-#{$index} {\n margin-left: percentage(($index / $grid-columns));\n }\n }\n}\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin loop-grid-columns($columns, $class, $type) {\n @for $i from 0 through $columns {\n @include calc-grid-column($i, $class, $type);\n }\n}\n\n\n// Create grid for specific class\n@mixin make-grid($class) {\n @include float-grid-columns($class);\n @include loop-grid-columns($grid-columns, $class, width);\n @include loop-grid-columns($grid-columns, $class, pull);\n @include loop-grid-columns($grid-columns, $class, push);\n @include loop-grid-columns($grid-columns, $class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: $table-bg;\n}\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: $line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: $table-cell-padding;\n line-height: $line-height-base;\n vertical-align: top;\n border-top: 1px solid $table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid $table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid $table-border-color;\n }\n\n // Nesting\n .table {\n background-color: $body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: $table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid $table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid $table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: $table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: $table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n@include table-row-variant('active', $table-bg-active);\n@include table-row-variant('success', $state-success-bg);\n@include table-row-variant('info', $state-info-bg);\n@include table-row-variant('warning', $state-warning-bg);\n@include table-row-variant('danger', $state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: $screen-xs-max) {\n width: 100%;\n margin-bottom: ($line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid $table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.#{$state},\n > th.#{$state},\n &.#{$state} > td,\n &.#{$state} > th {\n background-color: $background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.#{$state}:hover,\n > th.#{$state}:hover,\n &.#{$state}:hover > td,\n &:hover > .#{$state},\n &.#{$state}:hover > th {\n background-color: darken($background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: $line-height-computed;\n font-size: ($font-size-base * 1.5);\n line-height: inherit;\n color: $legend-color;\n border: 0;\n border-bottom: 1px solid $legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n @include box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n @include tab-focus;\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: ($padding-base-vertical + 1);\n font-size: $font-size-base;\n line-height: $line-height-base;\n color: $input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: $padding-base-vertical $padding-base-horizontal;\n font-size: $font-size-base;\n line-height: $line-height-base;\n color: $input-color;\n background-color: $input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid $input-border;\n border-radius: $input-border-radius; // Note: This has no effect on s in CSS.\n @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);\n\n // Customize the `:focus` state to imitate native WebKit styles.\n @include form-control-focus;\n\n // Placeholder\n @include placeholder;\n\n // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n// [converter] $parent hack\n@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n #{$parent} {\n height: $input-height;\n padding: $padding-vertical $padding-horizontal;\n font-size: $font-size;\n line-height: $line-height;\n border-radius: $border-radius;\n }\n\n select#{$parent} {\n height: $input-height;\n line-height: $input-height;\n }\n\n textarea#{$parent},\n select[multiple]#{$parent} {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: $btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);\n @include user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n @include tab-focus;\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: $btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: $cursor-disabled;\n @include opacity(.65);\n @include box-shadow(none);\n }\n\n // [converter] extracted a& to a.btn\n}\n\na.btn {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `` elements\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);\n}\n.btn-primary {\n @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: $link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n @include box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: $btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);\n}\n.btn-xs {\n @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($color, $background, $border) {\n color: $color;\n background-color: $background;\n border-color: $border;\n\n &:focus,\n &.focus {\n color: $color;\n background-color: darken($background, 10%);\n border-color: darken($border, 25%);\n }\n &:hover {\n color: $color;\n background-color: darken($background, 10%);\n border-color: darken($border, 12%);\n }\n &:active,\n &.active,\n .open > &.dropdown-toggle {\n color: $color;\n background-color: darken($background, 10%);\n border-color: darken($border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: $color;\n background-color: darken($background, 17%);\n border-color: darken($border, 25%);\n }\n }\n &:active,\n &.active,\n .open > &.dropdown-toggle {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: $background;\n border-color: $border;\n }\n }\n\n .badge {\n color: $background;\n background-color: $color;\n }\n}\n\n// Button sizes\n@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n padding: $padding-vertical $padding-horizontal;\n font-size: $font-size;\n line-height: $line-height;\n border-radius: $border-radius;\n}\n","// Opacity\n\n@mixin opacity($opacity) {\n opacity: $opacity;\n // IE8 filter\n $opacity-ie: ($opacity * 100);\n filter: alpha(opacity=$opacity-ie);\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n @include transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n // [converter] extracted tr&.in to tr.collapse.in\n // [converter] extracted tbody&.in to tbody.collapse.in\n}\n\ntr.collapse.in { display: table-row; }\n\ntbody.collapse.in { display: table-row-group; }\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n @include transition-property(height, visibility);\n @include transition-duration(.35s);\n @include transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: $caret-width-base dashed;\n border-top: $caret-width-base solid \\9; // IE8\n border-right: $caret-width-base solid transparent;\n border-left: $caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: $zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: $font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: $dropdown-bg;\n border: 1px solid $dropdown-fallback-border; // IE8 fallback\n border: 1px solid $dropdown-border;\n border-radius: $border-radius-base;\n @include box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n @include nav-divider($dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: $line-height-base;\n color: $dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: $dropdown-link-hover-color;\n background-color: $dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: $dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: $dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: $dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n @include reset-filter;\n cursor: $cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: $font-size-small;\n line-height: $line-height-base;\n color: $dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: ($zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: $caret-width-base dashed;\n border-bottom: $caret-width-base solid \\9; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: $grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n right: 0; left: auto;\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n left: 0; right: auto;\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: #e5e5e5) {\n height: 1px;\n margin: (($line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: $color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n@mixin reset-filter() {\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n @include clearfix;\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n @include border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n @include border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n @include border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n @include border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { @extend .btn-xs; }\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: $caret-width-large $caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 $caret-width-large $caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n @include clearfix;\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n @include border-top-radius($btn-border-radius-base);\n @include border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n @include border-top-radius(0);\n @include border-bottom-radius($btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n @include border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n @include border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n@mixin border-top-radius($radius) {\n border-top-right-radius: $radius;\n border-top-left-radius: $radius;\n}\n@mixin border-right-radius($radius) {\n border-bottom-right-radius: $radius;\n border-top-right-radius: $radius;\n}\n@mixin border-bottom-radius($radius) {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n}\n@mixin border-left-radius($radius) {\n border-bottom-left-radius: $radius;\n border-top-left-radius: $radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n \n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n @extend .input-lg;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n @extend .input-sm;\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: $padding-base-vertical $padding-base-horizontal;\n font-size: $font-size-base;\n font-weight: normal;\n line-height: 1;\n color: $input-color;\n text-align: center;\n background-color: $input-group-addon-bg;\n border: 1px solid $input-group-addon-border-color;\n border-radius: $input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: $padding-small-vertical $padding-small-horizontal;\n font-size: $font-size-small;\n border-radius: $input-border-radius-small;\n }\n &.input-lg {\n padding: $padding-large-vertical $padding-large-horizontal;\n font-size: $font-size-large;\n border-radius: $input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n @include border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n @include border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n @include clearfix;\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: $nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: $nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: $nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: $nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: $cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: $nav-link-hover-bg;\n border-color: $link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n @include nav-divider;\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid $nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: $line-height-base;\n border: 1px solid transparent;\n border-radius: $border-radius-base $border-radius-base 0 0;\n &:hover {\n border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: $nav-tabs-active-link-hover-color;\n background-color: $nav-tabs-active-link-hover-bg;\n border: 1px solid $nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n @extend .nav-justified;\n @extend .nav-tabs-justified;\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: $nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: $nav-pills-active-link-hover-color;\n background-color: $nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: $screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: $border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid $nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: $screen-sm-min) {\n > li > a {\n border-bottom: 1px solid $nav-tabs-justified-link-border-color;\n border-radius: $border-radius-base $border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: $nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: $navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n @include clearfix;\n\n @media (min-width: $grid-float-breakpoint) {\n border-radius: $navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n @include clearfix;\n\n @media (min-width: $grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: $navbar-padding-horizontal;\n padding-left: $navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n @include clearfix;\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: $grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: $navbar-collapse-max-height;\n\n @media (max-device-width: $screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -$navbar-padding-horizontal;\n margin-left: -$navbar-padding-horizontal;\n\n @media (min-width: $grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: $zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: $grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: $zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: $grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: $navbar-padding-vertical $navbar-padding-horizontal;\n font-size: $font-size-large;\n line-height: $line-height-computed;\n height: $navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: $grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -$navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: $navbar-padding-horizontal;\n padding: 9px 10px;\n @include navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: $border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: $grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: ($navbar-padding-vertical / 2) (-$navbar-padding-horizontal);\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: $line-height-computed;\n }\n\n @media (max-width: $grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: $line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: $grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: $navbar-padding-vertical;\n padding-bottom: $navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -$navbar-padding-horizontal;\n margin-right: -$navbar-padding-horizontal;\n padding: 10px $navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n @include box-shadow($shadow);\n\n // Mixin behavior for optimum display\n @include form-inline;\n\n .form-group {\n @media (max-width: $grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n @include navbar-vertical-align($input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: $grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n @include box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n @include border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n @include border-top-radius($navbar-border-radius);\n @include border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n @include navbar-vertical-align($input-height-base);\n\n &.btn-sm {\n @include navbar-vertical-align($input-height-small);\n }\n &.btn-xs {\n @include navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n @include navbar-vertical-align($line-height-computed);\n\n @media (min-width: $grid-float-breakpoint) {\n float: left;\n margin-left: $navbar-padding-horizontal;\n margin-right: $navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: $grid-float-breakpoint) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -$navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: $navbar-default-bg;\n border-color: $navbar-default-border;\n\n .navbar-brand {\n color: $navbar-default-brand-color;\n &:hover,\n &:focus {\n color: $navbar-default-brand-hover-color;\n background-color: $navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: $navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: $navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: $navbar-default-link-hover-color;\n background-color: $navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: $navbar-default-link-active-color;\n background-color: $navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: $navbar-default-link-disabled-color;\n background-color: $navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: $navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: $navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: $navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: $navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: $navbar-default-link-active-bg;\n color: $navbar-default-link-active-color;\n }\n }\n\n @media (max-width: $grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: $navbar-default-link-color;\n &:hover,\n &:focus {\n color: $navbar-default-link-hover-color;\n background-color: $navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: $navbar-default-link-active-color;\n background-color: $navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: $navbar-default-link-disabled-color;\n background-color: $navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: $navbar-default-link-color;\n &:hover {\n color: $navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: $navbar-default-link-color;\n &:hover,\n &:focus {\n color: $navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: $navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: $navbar-inverse-bg;\n border-color: $navbar-inverse-border;\n\n .navbar-brand {\n color: $navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: $navbar-inverse-brand-hover-color;\n background-color: $navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: $navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: $navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: $navbar-inverse-link-hover-color;\n background-color: $navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: $navbar-inverse-link-active-color;\n background-color: $navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: $navbar-inverse-link-disabled-color;\n background-color: $navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: $navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: $navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: $navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken($navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: $navbar-inverse-link-active-bg;\n color: $navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: $grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: $navbar-inverse-border;\n }\n .divider {\n background-color: $navbar-inverse-border;\n }\n > li > a {\n color: $navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: $navbar-inverse-link-hover-color;\n background-color: $navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: $navbar-inverse-link-active-color;\n background-color: $navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: $navbar-inverse-link-disabled-color;\n background-color: $navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: $navbar-inverse-link-color;\n &:hover {\n color: $navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: $navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: $navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: $navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n@mixin navbar-vertical-align($element-height) {\n margin-top: (($navbar-height - $element-height) / 2);\n margin-bottom: (($navbar-height - $element-height) / 2);\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal;\n margin-bottom: $line-height-computed;\n list-style: none;\n background-color: $breadcrumb-bg;\n border-radius: $border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n // [converter] Workaround for https://github.com/sass/libsass/issues/1115\n $nbsp: \"\\00a0\";\n content: \"#{$breadcrumb-separator}#{$nbsp}\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: $breadcrumb-color;\n }\n }\n\n > .active {\n color: $breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: $line-height-computed 0;\n border-radius: $border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: $padding-base-vertical $padding-base-horizontal;\n line-height: $line-height-base;\n text-decoration: none;\n color: $pagination-color;\n background-color: $pagination-bg;\n border: 1px solid $pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n @include border-left-radius($border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n @include border-right-radius($border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: $pagination-hover-color;\n background-color: $pagination-hover-bg;\n border-color: $pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: $pagination-active-color;\n background-color: $pagination-active-bg;\n border-color: $pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: $pagination-disabled-color;\n background-color: $pagination-disabled-bg;\n border-color: $pagination-disabled-border;\n cursor: $cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n @include pagination-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large);\n}\n\n// Small\n.pagination-sm {\n @include pagination-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small);\n}\n","// Pagination\n\n@mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n > li {\n > a,\n > span {\n padding: $padding-vertical $padding-horizontal;\n font-size: $font-size;\n line-height: $line-height;\n }\n &:first-child {\n > a,\n > span {\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n @include border-right-radius($border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: $line-height-computed 0;\n list-style: none;\n text-align: center;\n @include clearfix;\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: $pager-bg;\n border: 1px solid $pager-border;\n border-radius: $pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: $pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: $pager-disabled-color;\n background-color: $pager-bg;\n cursor: $cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: $label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // [converter] extracted a& to a.label\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Add hover effects, but only for links\na.label {\n &:hover,\n &:focus {\n color: $label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n @include label-variant($label-default-bg);\n}\n\n.label-primary {\n @include label-variant($label-primary-bg);\n}\n\n.label-success {\n @include label-variant($label-success-bg);\n}\n\n.label-info {\n @include label-variant($label-info-bg);\n}\n\n.label-warning {\n @include label-variant($label-warning-bg);\n}\n\n.label-danger {\n @include label-variant($label-danger-bg);\n}\n","// Labels\n\n@mixin label-variant($color) {\n background-color: $color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken($color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: $font-size-small;\n font-weight: $badge-font-weight;\n color: $badge-color;\n line-height: $badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: $badge-bg;\n border-radius: $badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // [converter] extracted a& to a.badge\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: $badge-active-color;\n background-color: $badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n\n// Hover state, but only for links\na.badge {\n &:hover,\n &:focus {\n color: $badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: $jumbotron-padding;\n padding-bottom: $jumbotron-padding;\n margin-bottom: $jumbotron-padding;\n color: $jumbotron-color;\n background-color: $jumbotron-bg;\n\n h1,\n .h1 {\n color: $jumbotron-heading-color;\n }\n\n p {\n margin-bottom: ($jumbotron-padding / 2);\n font-size: $jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken($jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: ($grid-gutter-width / 2);\n padding-right: ($grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: $screen-sm-min) {\n padding-top: ($jumbotron-padding * 1.6);\n padding-bottom: ($jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: ($jumbotron-padding * 2);\n padding-right: ($jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: $jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: $thumbnail-padding;\n margin-bottom: $line-height-computed;\n line-height: $line-height-base;\n background-color: $thumbnail-bg;\n border: 1px solid $thumbnail-border;\n border-radius: $thumbnail-border-radius;\n @include transition(border .2s ease-in-out);\n\n > img,\n a > img {\n @include img-responsive;\n margin-left: auto;\n margin-right: auto;\n }\n\n // [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active\n\n // Image captions\n .caption {\n padding: $thumbnail-caption-padding;\n color: $thumbnail-caption-color;\n }\n}\n\n// Add a hover state for linked versions only\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: $link-color;\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: $alert-padding;\n margin-bottom: $line-height-computed;\n border: 1px solid transparent;\n border-radius: $alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing $headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: $alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: ($alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);\n}\n\n.alert-info {\n @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);\n}\n\n.alert-warning {\n @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);\n}\n\n.alert-danger {\n @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);\n}\n","// Alerts\n\n@mixin alert-variant($background, $border, $text-color) {\n background-color: $background;\n border-color: $border;\n color: $text-color;\n\n hr {\n border-top-color: darken($border, 5%);\n }\n .alert-link {\n color: darken($text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: $line-height-computed;\n margin-bottom: $line-height-computed;\n background-color: $progress-bg;\n border-radius: $progress-border-radius;\n @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: $font-size-small;\n line-height: $line-height-computed;\n color: $progress-bar-color;\n text-align: center;\n background-color: $progress-bar-bg;\n @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n @include transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n @include gradient-striped;\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n @include animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n @include progress-bar-variant($progress-bar-success-bg);\n}\n\n.progress-bar-info {\n @include progress-bar-variant($progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n @include progress-bar-variant($progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n @include progress-bar-variant($progress-bar-danger-bg);\n}\n","// Gradients\n\n\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9 and below.\n@mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Opera 12\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9 and below.\n@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Opera 12\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down\n}\n\n@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient($deg, $start-color, $end-color); // Opera 12\n background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n}\n@mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);\n background-image: -o-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback\n}\n@mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color);\n background-image: -o-linear-gradient($start-color, $mid-color $color-stop, $end-color);\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback\n}\n@mixin gradient-radial($inner-color: #555, $outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) {\n background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n","// Progress bars\n\n@mixin progress-bar-variant($color) {\n background-color: $color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n @include gradient-striped;\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on
    ", "
    " ], - tr: [ 2, "", "
    " ], - col: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, - // unless wrapped in a div with non-breaking characters in front of it. - _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
    ", "
    " ] - }, - safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement("div") ); - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -jQuery.fn.extend({ - text: function( value ) { - return jQuery.access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); - }, null, value, arguments.length ); - }, - - wrapAll: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapAll( html.call(this, i) ); - }); - } - - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); - - if ( this[0].parentNode ) { - wrap.insertBefore( this[0] ); - } - - wrap.map(function() { - var elem = this; - - while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { - elem = elem.firstChild; - } - - return elem; - }).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapInner( html.call(this, i) ); - }); - } - - return this.each(function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - }); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each(function(i) { - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); - }); - }, - - unwrap: function() { - return this.parent().each(function() { - if ( !jQuery.nodeName( this, "body" ) ) { - jQuery( this ).replaceWith( this.childNodes ); - } - }).end(); - }, - - append: function() { - return this.domManip(arguments, true, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip(arguments, true, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.insertBefore( elem, this.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, false, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, false, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - // keepData is for internal use only--do not document - remove: function( selector, keepData ) { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) { - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - } - - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - - // If this is a select, ensure that it displays empty (#12336) - // Support: IE<9 - if ( elem.options && jQuery.nodeName( elem, "select" ) ) { - elem.options.length = 0; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function () { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return jQuery.access( this, function( value ) { - var elem = this[0] || {}, - i = 0, - l = this.length; - - if ( value === undefined ) { - return elem.nodeType === 1 ? - elem.innerHTML.replace( rinlinejQuery, "" ) : - undefined; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1>" ); - - try { - for (; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - elem = this[i] || {}; - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch(e) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function( value ) { - var isFunc = jQuery.isFunction( value ); - - // Make sure that the elements are removed from the DOM before they are inserted - // this can help fix replacing a parent with child elements - if ( !isFunc && typeof value !== "string" ) { - value = jQuery( value ).not( this ).detach(); - } - - return this.domManip( [ value ], true, function( elem ) { - var next = this.nextSibling, - parent = this.parentNode; - - if ( parent ) { - jQuery( this ).remove(); - parent.insertBefore( elem, next ); - } - }); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, table, callback ) { - - // Flatten any nested arrays - args = core_concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[0], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[0] = value.call( this, index, table ? self.html() : undefined ); - } - self.domManip( args, table, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - table = table && jQuery.nodeName( first, "tr" ); - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( - table && jQuery.nodeName( this[i], "table" ) ? - findOrAppend( this[i], "tbody" ) : - this[i], - node, - i - ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Hope ajax is available... - jQuery.ajax({ - url: node.src, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); - } else { - jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); - } - } - } - } - - // Fix #11809: Avoid leaking memory - fragment = first = null; - } - } - - return this; - } -}); - -function findOrAppend( elem, tag ) { - return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - var attr = elem.getAttributeNode("type"); - elem.type = ( attr && attr.specified ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - if ( match ) { - elem.type = match[1]; - } else { - elem.removeAttribute("type"); - } - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var elem, - i = 0; - for ( ; (elem = elems[i]) != null; i++ ) { - jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); - } -} - -function cloneCopyEvent( src, dest ) { - - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { - return; - } - - var type, i, l, - oldData = jQuery._data( src ), - curData = jQuery._data( dest, oldData ), - events = oldData.events; - - if ( events ) { - delete curData.handle; - curData.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - - // make the cloned public data object a copy from the original - if ( curData.data ) { - curData.data = jQuery.extend( {}, curData.data ); - } -} - -function fixCloneNodeIssues( src, dest ) { - var nodeName, e, data; - - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; - } - - nodeName = dest.nodeName.toLowerCase(); - - // IE6-8 copies events bound via attachEvent when using cloneNode. - if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { - data = jQuery._data( dest ); - - for ( e in data.events ) { - jQuery.removeEvent( dest, e, data.handle ); - } - - // Event data gets referenced instead of copied if the expando gets copied too - dest.removeAttribute( jQuery.expando ); - } - - // IE blanks contents when cloning scripts, and tries to evaluate newly-set text - if ( nodeName === "script" && dest.text !== src.text ) { - disableScript( dest ).text = src.text; - restoreScript( dest ); - - // IE6-10 improperly clones children of object elements using classid. - // IE10 throws NoModificationAllowedError if parent is null, #12132. - } else if ( nodeName === "object" ) { - if ( dest.parentNode ) { - dest.outerHTML = src.outerHTML; - } - - // This path appears unavoidable for IE9. When cloning an object - // element in IE9, the outerHTML strategy above is not sufficient. - // If the src has innerHTML and the destination does not, - // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { - dest.innerHTML = src.innerHTML; - } - - } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set - - dest.defaultChecked = dest.checked = src.checked; - - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } - - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.defaultSelected = dest.selected = src.defaultSelected; - - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - i = 0, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone(true); - jQuery( insert[i] )[ original ]( elems ); - - // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() - core_push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - -function getAll( context, tag ) { - var elems, elem, - i = 0, - found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : - undefined; - - if ( !found ) { - for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { - if ( !tag || jQuery.nodeName( elem, tag ) ) { - found.push( elem ); - } else { - jQuery.merge( found, getAll( elem, tag ) ); - } - } - } - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], found ) : - found; -} - -// Used in buildFragment, fixes the defaultChecked property -function fixDefaultChecked( elem ) { - if ( manipulation_rcheckableType.test( elem.type ) ) { - elem.defaultChecked = elem.checked; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var destElements, node, clone, i, srcElements, - inPage = jQuery.contains( elem.ownerDocument, elem ); - - if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { - clone = elem.cloneNode( true ); - - // IE<=8 does not properly clone detached, unknown element nodes - } else { - fragmentDiv.innerHTML = elem.outerHTML; - fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); - } - - if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - // Fix all IE cloning issues - for ( i = 0; (node = srcElements[i]) != null; ++i ) { - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - fixCloneNodeIssues( node, destElements[i] ); - } - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0; (node = srcElements[i]) != null; i++ ) { - cloneCopyEvent( node, destElements[i] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - destElements = srcElements = node = null; - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var j, elem, contains, - tmp, tag, tbody, wrap, - l = elems.length, - - // Ensure a safe fragment - safe = createSafeFragment( context ), - - nodes = [], - i = 0; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || safe.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - - tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; - - // Descend through wrappers to the right content - j = wrap[0]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Manually add leading whitespace removed by IE - if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); - } - - // Remove IE's autoinserted
    , *may* have spurious - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare or - wrap[1] === "
    " && !rtbody.test( elem ) ? - tmp : - 0; - - j = elem && elem.childNodes.length; - while ( j-- ) { - if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { - elem.removeChild( tbody ); - } - } - } - - jQuery.merge( nodes, tmp.childNodes ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !jQuery.support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; - }, - - cleanData: function( elems, /* internal */ acceptData ) { - var elem, type, id, data, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - deleteExpando = jQuery.support.deleteExpando, - special = jQuery.event.special; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( acceptData || jQuery.acceptData( elem ) ) { - - id = elem[ internalKey ]; - data = id && cache[ id ]; - - if ( data ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { - - delete cache[ id ]; - - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; - - } else if ( typeof elem.removeAttribute !== core_strundefined ) { - elem.removeAttribute( internalKey ); - - } else { - elem[ internalKey ] = null; - } - - core_deletedIds.push( id ); - } - } - } - } - } -}); -var iframe, getStyles, curCSS, - ralpha = /alpha\([^)]*\)/i, - ropacity = /opacity\s*=\s*([^)]*)/, - rposition = /^(top|right|bottom|left)$/, - // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" - // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rmargin = /^margin/, - rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), - rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), - elemdisplay = { BODY: "block" }, - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: 0, - fontWeight: 400 - }, - - cssExpand = [ "Top", "Right", "Bottom", "Left" ], - cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; - -// return a css property mapped to a potentially vendor prefixed property -function vendorPropName( style, name ) { - - // shortcut for names that are not vendor prefixed - if ( name in style ) { - return name; - } - - // check for vendor prefixed names - var capName = name.charAt(0).toUpperCase() + name.slice(1), - origName = name, - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in style ) { - return name; - } - } - - return origName; -} - -function isHidden( elem, el ) { - // isHidden might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); -} - -function showHide( elements, show ) { - var display, elem, hidden, - values = [], - index = 0, - length = elements.length; - - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - values[ index ] = jQuery._data( elem, "olddisplay" ); - display = elem.style.display; - if ( show ) { - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !values[ index ] && display === "none" ) { - elem.style.display = ""; - } - - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( elem.style.display === "" && isHidden( elem ) ) { - values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); - } - } else { - - if ( !values[ index ] ) { - hidden = isHidden( elem ); - - if ( display && display !== "none" || !hidden ) { - jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); - } - } - } - } - - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( index = 0; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - if ( !show || elem.style.display === "none" || elem.style.display === "" ) { - elem.style.display = show ? values[ index ] || "" : "none"; - } - } - - return elements; -} - -jQuery.fn.extend({ - css: function( name, value ) { - return jQuery.access( this, function( elem, name, value ) { - var len, styles, - map = {}, - i = 0; - - if ( jQuery.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - }, - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - var bool = typeof state === "boolean"; - - return this.each(function() { - if ( bool ? state : isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - -jQuery.extend({ - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Exclude the following css properties to add px - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - // normalize float css property - "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; - - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } - - // Make sure that NaN and null values aren't set. See: #7116 - if ( value == null || type === "number" && isNaN( value ) ) { - return; - } - - // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, - // but it would mean to define eight (for every problematic property) identical functions - if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - - // Wrapped to prevent IE from throwing errors when 'invalid' values are provided - // Fixes bug #5509 - try { - style[ name ] = value; - } catch(e) {} - } - - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var num, val, hooks, - origName = jQuery.camelCase( name ); - - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - //convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Return, converting to number if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; - } - return val; - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; - } -}); - -// NOTE: we've included the "window" in window.getComputedStyle -// because jsdom on node.js will break without it. -if ( window.getComputedStyle ) { - getStyles = function( elem ) { - return window.getComputedStyle( elem, null ); - }; - - curCSS = function( elem, name, _computed ) { - var width, minWidth, maxWidth, - computed = _computed || getStyles( elem ), - - // getPropertyValue is only needed for .css('filter') in IE9, see #12537 - ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, - style = elem.style; - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right - // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret; - }; -} else if ( document.documentElement.currentStyle ) { - getStyles = function( elem ) { - return elem.currentStyle; - }; - - curCSS = function( elem, name, _computed ) { - var left, rs, rsLeft, - computed = _computed || getStyles( elem ), - ret = computed ? computed[ name ] : undefined, - style = elem.style; - - // Avoid setting ret to empty string here - // so we don't default to auto - if ( ret == null && style && style[ name ] ) { - ret = style[ name ]; - } - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - // but not position css attributes, as those are proportional to the parent element instead - // and we can't measure the parent instead because it might trigger a "stacking dolls" problem - if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { - - // Remember the original values - left = style.left; - rs = elem.runtimeStyle; - rsLeft = rs && rs.left; - - // Put in the new values to get a computed value out - if ( rsLeft ) { - rs.left = elem.currentStyle.left; - } - style.left = name === "fontSize" ? "1em" : ret; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - if ( rsLeft ) { - rs.left = rsLeft; - } - } - - return ret === "" ? "auto" : ret; - }; -} - -function setPositiveNumber( elem, value, subtract ) { - var matches = rnumsplit.exec( value ); - return matches ? - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i = extra === ( isBorderBox ? "border" : "content" ) ? - // If we already have the right measurement, avoid augmentation - 4 : - // Otherwise initialize for horizontal or vertical properties - name === "width" ? 1 : 0, - - val = 0; - - for ( ; i < 4; i += 2 ) { - // both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // at this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - // at this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // at this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with offset property, which is equivalent to the border-box value - var valueIsBorderBox = true, - val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - styles = getStyles( elem ), - isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { - return val; - } - - // we need the check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } - - // use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -// Try to determine the default display value of an element -function css_defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - // Use the already-created iframe if possible - iframe = ( iframe || - jQuery("' - ).bind('load', function () { - var fileInputClones, - paramNames = $.isArray(options.paramName) ? - options.paramName : [options.paramName]; - iframe - .unbind('load') - .bind('load', function () { - var response; - // Wrap in a try/catch block to catch exceptions thrown - // when trying to access cross-domain iframe contents: - try { - response = iframe.contents(); - // Google Chrome and Firefox do not throw an - // exception when calling iframe.contents() on - // cross-domain requests, so we unify the response: - if (!response.length || !response[0].firstChild) { - throw new Error(); - } - } catch (e) { - response = undefined; - } - // The complete callback returns the - // iframe content document as response object: - completeCallback( - 200, - 'success', - {'iframe': response} - ); - // Fix for IE endless progress bar activity bug - // (happens on form submits to iframe targets): - $('') - .appendTo(form); - window.setTimeout(function () { - // Removing the form in a setTimeout call - // allows Chrome's developer tools to display - // the response result - form.remove(); - }, 0); - }); - form - .prop('target', iframe.prop('name')) - .prop('action', options.url) - .prop('method', options.type); - if (options.formData) { - $.each(options.formData, function (index, field) { - $('') - .prop('name', field.name) - .val(field.value) - .appendTo(form); - }); - } - if (options.fileInput && options.fileInput.length && - options.type === 'POST') { - fileInputClones = options.fileInput.clone(); - // Insert a clone for each file input field: - options.fileInput.after(function (index) { - return fileInputClones[index]; - }); - if (options.paramName) { - options.fileInput.each(function (index) { - $(this).prop( - 'name', - paramNames[index] || options.paramName - ); - }); - } - // Appending the file input fields to the hidden form - // removes them from their original location: - form - .append(options.fileInput) - .prop('enctype', 'multipart/form-data') - // enctype must be set as encoding for IE: - .prop('encoding', 'multipart/form-data'); - // Remove the HTML5 form attribute from the input(s): - options.fileInput.removeAttr('form'); - } - form.submit(); - // Insert the file input fields at their original location - // by replacing the clones with the originals: - if (fileInputClones && fileInputClones.length) { - options.fileInput.each(function (index, input) { - var clone = $(fileInputClones[index]); - // Restore the original name and form properties: - $(input) - .prop('name', clone.prop('name')) - .attr('form', clone.attr('form')); - clone.replaceWith(input); - }); - } - }); - form.append(iframe).appendTo(document.body); - }, - abort: function () { - if (iframe) { - // javascript:false as iframe src aborts the request - // and prevents warning popups on HTTPS in IE6. - // concat is used to avoid the "Script URL" JSLint error: - iframe - .unbind('load') - .prop('src', initialIframeSrc); - } - if (form) { - form.remove(); - } - } - }; - } - }); - - // The iframe transport returns the iframe content document as response. - // The following adds converters from iframe to text, json, html, xml - // and script. - // Please note that the Content-Type for JSON responses has to be text/plain - // or text/html, if the browser doesn't include application/json in the - // Accept header, else IE will show a download dialog. - // The Content-Type for XML responses on the other hand has to be always - // application/xml or text/xml, so IE properly parses the XML response. - // See also - // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation - $.ajaxSetup({ - converters: { - 'iframe text': function (iframe) { - return iframe && $(iframe[0].body).text(); - }, - 'iframe json': function (iframe) { - return iframe && $.parseJSON($(iframe[0].body).text()); - }, - 'iframe html': function (iframe) { - return iframe && $(iframe[0].body).html(); - }, - 'iframe xml': function (iframe) { - var xmlDoc = iframe && iframe[0]; - return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc : - $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) || - $(xmlDoc.body).html()); - }, - 'iframe script': function (iframe) { - return iframe && $.globalEval($(iframe[0].body).text()); - } - } - }); - -})); - -/* - * jQuery File Upload Plugin - * https://github.com/blueimp/jQuery-File-Upload - * - * Copyright 2010, Sebastian Tschan - * https://blueimp.net - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/MIT - */ - -/* jshint nomen:false */ -/* global define, require, window, document, location, Blob, FormData */ - -;(function (factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - // Register as an anonymous AMD module: - define([ - 'jquery', - 'jquery.ui.widget' - ], factory); - } else if (typeof exports === 'object') { - // Node/CommonJS: - factory( - require('jquery'), - require('./vendor/jquery.ui.widget') - ); - } else { - // Browser globals: - factory(window.jQuery); - } -}(function ($) { - 'use strict'; - - // Detect file input support, based on - // http://viljamis.com/blog/2012/file-upload-support-on-mobile/ - $.support.fileInput = !(new RegExp( - // Handle devices which give false positives for the feature detection: - '(Android (1\\.[0156]|2\\.[01]))' + - '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' + - '|(w(eb)?OSBrowser)|(webOS)' + - '|(Kindle/(1\\.0|2\\.[05]|3\\.0))' - ).test(window.navigator.userAgent) || - // Feature detection for all other devices: - $('').prop('disabled')); - - // The FileReader API is not actually used, but works as feature detection, - // as some Safari versions (5?) support XHR file uploads via the FormData API, - // but not non-multipart XHR file uploads. - // window.XMLHttpRequestUpload is not available on IE10, so we check for - // window.ProgressEvent instead to detect XHR2 file upload capability: - $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader); - $.support.xhrFormDataFileUpload = !!window.FormData; - - // Detect support for Blob slicing (required for chunked uploads): - $.support.blobSlice = window.Blob && (Blob.prototype.slice || - Blob.prototype.webkitSlice || Blob.prototype.mozSlice); - - // Helper function to create drag handlers for dragover/dragenter/dragleave: - function getDragHandler(type) { - var isDragOver = type === 'dragover'; - return function (e) { - e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; - var dataTransfer = e.dataTransfer; - if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 && - this._trigger( - type, - $.Event(type, {delegatedEvent: e}) - ) !== false) { - e.preventDefault(); - if (isDragOver) { - dataTransfer.dropEffect = 'copy'; - } - } - }; - } - - // The fileupload widget listens for change events on file input fields defined - // via fileInput setting and paste or drop events of the given dropZone. - // In addition to the default jQuery Widget methods, the fileupload widget - // exposes the "add" and "send" methods, to add or directly send files using - // the fileupload API. - // By default, files added via file input selection, paste, drag & drop or - // "add" method are uploaded immediately, but it is possible to override - // the "add" callback option to queue file uploads. - $.widget('blueimp.fileupload', { - - options: { - // The drop target element(s), by the default the complete document. - // Set to null to disable drag & drop support: - dropZone: $(document), - // The paste target element(s), by the default undefined. - // Set to a DOM node or jQuery object to enable file pasting: - pasteZone: undefined, - // The file input field(s), that are listened to for change events. - // If undefined, it is set to the file input fields inside - // of the widget element on plugin initialization. - // Set to null to disable the change listener. - fileInput: undefined, - // By default, the file input field is replaced with a clone after - // each input field change event. This is required for iframe transport - // queues and allows change events to be fired for the same file - // selection, but can be disabled by setting the following option to false: - replaceFileInput: true, - // The parameter name for the file form data (the request argument name). - // If undefined or empty, the name property of the file input field is - // used, or "files[]" if the file input name property is also empty, - // can be a string or an array of strings: - paramName: undefined, - // By default, each file of a selection is uploaded using an individual - // request for XHR type uploads. Set to false to upload file - // selections in one request each: - singleFileUploads: true, - // To limit the number of files uploaded with one XHR request, - // set the following option to an integer greater than 0: - limitMultiFileUploads: undefined, - // The following option limits the number of files uploaded with one - // XHR request to keep the request size under or equal to the defined - // limit in bytes: - limitMultiFileUploadSize: undefined, - // Multipart file uploads add a number of bytes to each uploaded file, - // therefore the following option adds an overhead for each file used - // in the limitMultiFileUploadSize configuration: - limitMultiFileUploadSizeOverhead: 512, - // Set the following option to true to issue all file upload requests - // in a sequential order: - sequentialUploads: false, - // To limit the number of concurrent uploads, - // set the following option to an integer greater than 0: - limitConcurrentUploads: undefined, - // Set the following option to true to force iframe transport uploads: - forceIframeTransport: false, - // Set the following option to the location of a redirect url on the - // origin server, for cross-domain iframe transport uploads: - redirect: undefined, - // The parameter name for the redirect url, sent as part of the form - // data and set to 'redirect' if this option is empty: - redirectParamName: undefined, - // Set the following option to the location of a postMessage window, - // to enable postMessage transport uploads: - postMessage: undefined, - // By default, XHR file uploads are sent as multipart/form-data. - // The iframe transport is always using multipart/form-data. - // Set to false to enable non-multipart XHR uploads: - multipart: true, - // To upload large files in smaller chunks, set the following option - // to a preferred maximum chunk size. If set to 0, null or undefined, - // or the browser does not support the required Blob API, files will - // be uploaded as a whole. - maxChunkSize: undefined, - // When a non-multipart upload or a chunked multipart upload has been - // aborted, this option can be used to resume the upload by setting - // it to the size of the already uploaded bytes. This option is most - // useful when modifying the options object inside of the "add" or - // "send" callbacks, as the options are cloned for each file upload. - uploadedBytes: undefined, - // By default, failed (abort or error) file uploads are removed from the - // global progress calculation. Set the following option to false to - // prevent recalculating the global progress data: - recalculateProgress: true, - // Interval in milliseconds to calculate and trigger progress events: - progressInterval: 100, - // Interval in milliseconds to calculate progress bitrate: - bitrateInterval: 500, - // By default, uploads are started automatically when adding files: - autoUpload: true, - - // Error and info messages: - messages: { - uploadedBytes: 'Uploaded bytes exceed file size' - }, - - // Translation function, gets the message key to be translated - // and an object with context specific data as arguments: - i18n: function (message, context) { - message = this.messages[message] || message.toString(); - if (context) { - $.each(context, function (key, value) { - message = message.replace('{' + key + '}', value); - }); - } - return message; - }, - - // Additional form data to be sent along with the file uploads can be set - // using this option, which accepts an array of objects with name and - // value properties, a function returning such an array, a FormData - // object (for XHR file uploads), or a simple object. - // The form of the first fileInput is given as parameter to the function: - formData: function (form) { - return form.serializeArray(); - }, - - // The add callback is invoked as soon as files are added to the fileupload - // widget (via file input selection, drag & drop, paste or add API call). - // If the singleFileUploads option is enabled, this callback will be - // called once for each file in the selection for XHR file uploads, else - // once for each file selection. - // - // The upload starts when the submit method is invoked on the data parameter. - // The data object contains a files property holding the added files - // and allows you to override plugin options as well as define ajax settings. - // - // Listeners for this callback can also be bound the following way: - // .bind('fileuploadadd', func); - // - // data.submit() returns a Promise object and allows to attach additional - // handlers using jQuery's Deferred callbacks: - // data.submit().done(func).fail(func).always(func); - add: function (e, data) { - if (e.isDefaultPrevented()) { - return false; - } - if (data.autoUpload || (data.autoUpload !== false && - $(this).fileupload('option', 'autoUpload'))) { - data.process().done(function () { - data.submit(); - }); - } - }, - - // Other callbacks: - - // Callback for the submit event of each file upload: - // submit: function (e, data) {}, // .bind('fileuploadsubmit', func); - - // Callback for the start of each file upload request: - // send: function (e, data) {}, // .bind('fileuploadsend', func); - - // Callback for successful uploads: - // done: function (e, data) {}, // .bind('fileuploaddone', func); - - // Callback for failed (abort or error) uploads: - // fail: function (e, data) {}, // .bind('fileuploadfail', func); - - // Callback for completed (success, abort or error) requests: - // always: function (e, data) {}, // .bind('fileuploadalways', func); - - // Callback for upload progress events: - // progress: function (e, data) {}, // .bind('fileuploadprogress', func); - - // Callback for global upload progress events: - // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func); - - // Callback for uploads start, equivalent to the global ajaxStart event: - // start: function (e) {}, // .bind('fileuploadstart', func); - - // Callback for uploads stop, equivalent to the global ajaxStop event: - // stop: function (e) {}, // .bind('fileuploadstop', func); - - // Callback for change events of the fileInput(s): - // change: function (e, data) {}, // .bind('fileuploadchange', func); - - // Callback for paste events to the pasteZone(s): - // paste: function (e, data) {}, // .bind('fileuploadpaste', func); - - // Callback for drop events of the dropZone(s): - // drop: function (e, data) {}, // .bind('fileuploaddrop', func); - - // Callback for dragover events of the dropZone(s): - // dragover: function (e) {}, // .bind('fileuploaddragover', func); - - // Callback for the start of each chunk upload request: - // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func); - - // Callback for successful chunk uploads: - // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func); - - // Callback for failed (abort or error) chunk uploads: - // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func); - - // Callback for completed (success, abort or error) chunk upload requests: - // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func); - - // The plugin options are used as settings object for the ajax calls. - // The following are jQuery ajax settings required for the file uploads: - processData: false, - contentType: false, - cache: false, - timeout: 0 - }, - - // A list of options that require reinitializing event listeners and/or - // special initialization code: - _specialOptions: [ - 'fileInput', - 'dropZone', - 'pasteZone', - 'multipart', - 'forceIframeTransport' - ], - - _blobSlice: $.support.blobSlice && function () { - var slice = this.slice || this.webkitSlice || this.mozSlice; - return slice.apply(this, arguments); - }, - - _BitrateTimer: function () { - this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime()); - this.loaded = 0; - this.bitrate = 0; - this.getBitrate = function (now, loaded, interval) { - var timeDiff = now - this.timestamp; - if (!this.bitrate || !interval || timeDiff > interval) { - this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8; - this.loaded = loaded; - this.timestamp = now; - } - return this.bitrate; - }; - }, - - _isXHRUpload: function (options) { - return !options.forceIframeTransport && - ((!options.multipart && $.support.xhrFileUpload) || - $.support.xhrFormDataFileUpload); - }, - - _getFormData: function (options) { - var formData; - if ($.type(options.formData) === 'function') { - return options.formData(options.form); - } - if ($.isArray(options.formData)) { - return options.formData; - } - if ($.type(options.formData) === 'object') { - formData = []; - $.each(options.formData, function (name, value) { - formData.push({name: name, value: value}); - }); - return formData; - } - return []; - }, - - _getTotal: function (files) { - var total = 0; - $.each(files, function (index, file) { - total += file.size || 1; - }); - return total; - }, - - _initProgressObject: function (obj) { - var progress = { - loaded: 0, - total: 0, - bitrate: 0 - }; - if (obj._progress) { - $.extend(obj._progress, progress); - } else { - obj._progress = progress; - } - }, - - _initResponseObject: function (obj) { - var prop; - if (obj._response) { - for (prop in obj._response) { - if (obj._response.hasOwnProperty(prop)) { - delete obj._response[prop]; - } - } - } else { - obj._response = {}; - } - }, - - _onProgress: function (e, data) { - if (e.lengthComputable) { - var now = ((Date.now) ? Date.now() : (new Date()).getTime()), - loaded; - if (data._time && data.progressInterval && - (now - data._time < data.progressInterval) && - e.loaded !== e.total) { - return; - } - data._time = now; - loaded = Math.floor( - e.loaded / e.total * (data.chunkSize || data._progress.total) - ) + (data.uploadedBytes || 0); - // Add the difference from the previously loaded state - // to the global loaded counter: - this._progress.loaded += (loaded - data._progress.loaded); - this._progress.bitrate = this._bitrateTimer.getBitrate( - now, - this._progress.loaded, - data.bitrateInterval - ); - data._progress.loaded = data.loaded = loaded; - data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate( - now, - loaded, - data.bitrateInterval - ); - // Trigger a custom progress event with a total data property set - // to the file size(s) of the current upload and a loaded data - // property calculated accordingly: - this._trigger( - 'progress', - $.Event('progress', {delegatedEvent: e}), - data - ); - // Trigger a global progress event for all current file uploads, - // including ajax calls queued for sequential file uploads: - this._trigger( - 'progressall', - $.Event('progressall', {delegatedEvent: e}), - this._progress - ); - } - }, - - _initProgressListener: function (options) { - var that = this, - xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr(); - // Accesss to the native XHR object is required to add event listeners - // for the upload progress event: - if (xhr.upload) { - $(xhr.upload).bind('progress', function (e) { - var oe = e.originalEvent; - // Make sure the progress event properties get copied over: - e.lengthComputable = oe.lengthComputable; - e.loaded = oe.loaded; - e.total = oe.total; - that._onProgress(e, options); - }); - options.xhr = function () { - return xhr; - }; - } - }, - - _isInstanceOf: function (type, obj) { - // Cross-frame instanceof check - return Object.prototype.toString.call(obj) === '[object ' + type + ']'; - }, - - _initXHRData: function (options) { - var that = this, - formData, - file = options.files[0], - // Ignore non-multipart setting if not supported: - multipart = options.multipart || !$.support.xhrFileUpload, - paramName = $.type(options.paramName) === 'array' ? - options.paramName[0] : options.paramName; - options.headers = $.extend({}, options.headers); - if (options.contentRange) { - options.headers['Content-Range'] = options.contentRange; - } - if (!multipart || options.blob || !this._isInstanceOf('File', file)) { - options.headers['Content-Disposition'] = 'attachment; filename="' + - encodeURI(file.name) + '"'; - } - if (!multipart) { - options.contentType = file.type || 'application/octet-stream'; - options.data = options.blob || file; - } else if ($.support.xhrFormDataFileUpload) { - if (options.postMessage) { - // window.postMessage does not allow sending FormData - // objects, so we just add the File/Blob objects to - // the formData array and let the postMessage window - // create the FormData object out of this array: - formData = this._getFormData(options); - if (options.blob) { - formData.push({ - name: paramName, - value: options.blob - }); - } else { - $.each(options.files, function (index, file) { - formData.push({ - name: ($.type(options.paramName) === 'array' && - options.paramName[index]) || paramName, - value: file - }); - }); - } - } else { - if (that._isInstanceOf('FormData', options.formData)) { - formData = options.formData; - } else { - formData = new FormData(); - $.each(this._getFormData(options), function (index, field) { - formData.append(field.name, field.value); - }); - } - if (options.blob) { - formData.append(paramName, options.blob, file.name); - } else { - $.each(options.files, function (index, file) { - // This check allows the tests to run with - // dummy objects: - if (that._isInstanceOf('File', file) || - that._isInstanceOf('Blob', file)) { - formData.append( - ($.type(options.paramName) === 'array' && - options.paramName[index]) || paramName, - file, - file.uploadName || file.name - ); - } - }); - } - } - options.data = formData; - } - // Blob reference is not needed anymore, free memory: - options.blob = null; - }, - - _initIframeSettings: function (options) { - var targetHost = $('').prop('href', options.url).prop('host'); - // Setting the dataType to iframe enables the iframe transport: - options.dataType = 'iframe ' + (options.dataType || ''); - // The iframe transport accepts a serialized array as form data: - options.formData = this._getFormData(options); - // Add redirect url to form data on cross-domain uploads: - if (options.redirect && targetHost && targetHost !== location.host) { - options.formData.push({ - name: options.redirectParamName || 'redirect', - value: options.redirect - }); - } - }, - - _initDataSettings: function (options) { - if (this._isXHRUpload(options)) { - if (!this._chunkedUpload(options, true)) { - if (!options.data) { - this._initXHRData(options); - } - this._initProgressListener(options); - } - if (options.postMessage) { - // Setting the dataType to postmessage enables the - // postMessage transport: - options.dataType = 'postmessage ' + (options.dataType || ''); - } - } else { - this._initIframeSettings(options); - } - }, - - _getParamName: function (options) { - var fileInput = $(options.fileInput), - paramName = options.paramName; - if (!paramName) { - paramName = []; - fileInput.each(function () { - var input = $(this), - name = input.prop('name') || 'files[]', - i = (input.prop('files') || [1]).length; - while (i) { - paramName.push(name); - i -= 1; - } - }); - if (!paramName.length) { - paramName = [fileInput.prop('name') || 'files[]']; - } - } else if (!$.isArray(paramName)) { - paramName = [paramName]; - } - return paramName; - }, - - _initFormSettings: function (options) { - // Retrieve missing options from the input field and the - // associated form, if available: - if (!options.form || !options.form.length) { - options.form = $(options.fileInput.prop('form')); - // If the given file input doesn't have an associated form, - // use the default widget file input's form: - if (!options.form.length) { - options.form = $(this.options.fileInput.prop('form')); - } - } - options.paramName = this._getParamName(options); - if (!options.url) { - options.url = options.form.prop('action') || location.href; - } - // The HTTP request method must be "POST" or "PUT": - options.type = (options.type || - ($.type(options.form.prop('method')) === 'string' && - options.form.prop('method')) || '' - ).toUpperCase(); - if (options.type !== 'POST' && options.type !== 'PUT' && - options.type !== 'PATCH') { - options.type = 'POST'; - } - if (!options.formAcceptCharset) { - options.formAcceptCharset = options.form.attr('accept-charset'); - } - }, - - _getAJAXSettings: function (data) { - var options = $.extend({}, this.options, data); - this._initFormSettings(options); - this._initDataSettings(options); - return options; - }, - - // jQuery 1.6 doesn't provide .state(), - // while jQuery 1.8+ removed .isRejected() and .isResolved(): - _getDeferredState: function (deferred) { - if (deferred.state) { - return deferred.state(); - } - if (deferred.isResolved()) { - return 'resolved'; - } - if (deferred.isRejected()) { - return 'rejected'; - } - return 'pending'; - }, - - // Maps jqXHR callbacks to the equivalent - // methods of the given Promise object: - _enhancePromise: function (promise) { - promise.success = promise.done; - promise.error = promise.fail; - promise.complete = promise.always; - return promise; - }, - - // Creates and returns a Promise object enhanced with - // the jqXHR methods abort, success, error and complete: - _getXHRPromise: function (resolveOrReject, context, args) { - var dfd = $.Deferred(), - promise = dfd.promise(); - context = context || this.options.context || promise; - if (resolveOrReject === true) { - dfd.resolveWith(context, args); - } else if (resolveOrReject === false) { - dfd.rejectWith(context, args); - } - promise.abort = dfd.promise; - return this._enhancePromise(promise); - }, - - // Adds convenience methods to the data callback argument: - _addConvenienceMethods: function (e, data) { - var that = this, - getPromise = function (args) { - return $.Deferred().resolveWith(that, args).promise(); - }; - data.process = function (resolveFunc, rejectFunc) { - if (resolveFunc || rejectFunc) { - data._processQueue = this._processQueue = - (this._processQueue || getPromise([this])).then( - function () { - if (data.errorThrown) { - return $.Deferred() - .rejectWith(that, [data]).promise(); - } - return getPromise(arguments); - } - ).then(resolveFunc, rejectFunc); - } - return this._processQueue || getPromise([this]); - }; - data.submit = function () { - if (this.state() !== 'pending') { - data.jqXHR = this.jqXHR = - (that._trigger( - 'submit', - $.Event('submit', {delegatedEvent: e}), - this - ) !== false) && that._onSend(e, this); - } - return this.jqXHR || that._getXHRPromise(); - }; - data.abort = function () { - if (this.jqXHR) { - return this.jqXHR.abort(); - } - this.errorThrown = 'abort'; - that._trigger('fail', null, this); - return that._getXHRPromise(false); - }; - data.state = function () { - if (this.jqXHR) { - return that._getDeferredState(this.jqXHR); - } - if (this._processQueue) { - return that._getDeferredState(this._processQueue); - } - }; - data.processing = function () { - return !this.jqXHR && this._processQueue && that - ._getDeferredState(this._processQueue) === 'pending'; - }; - data.progress = function () { - return this._progress; - }; - data.response = function () { - return this._response; - }; - }, - - // Parses the Range header from the server response - // and returns the uploaded bytes: - _getUploadedBytes: function (jqXHR) { - var range = jqXHR.getResponseHeader('Range'), - parts = range && range.split('-'), - upperBytesPos = parts && parts.length > 1 && - parseInt(parts[1], 10); - return upperBytesPos && upperBytesPos + 1; - }, - - // Uploads a file in multiple, sequential requests - // by splitting the file up in multiple blob chunks. - // If the second parameter is true, only tests if the file - // should be uploaded in chunks, but does not invoke any - // upload requests: - _chunkedUpload: function (options, testOnly) { - options.uploadedBytes = options.uploadedBytes || 0; - var that = this, - file = options.files[0], - fs = file.size, - ub = options.uploadedBytes, - mcs = options.maxChunkSize || fs, - slice = this._blobSlice, - dfd = $.Deferred(), - promise = dfd.promise(), - jqXHR, - upload; - if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) || - options.data) { - return false; - } - if (testOnly) { - return true; - } - if (ub >= fs) { - file.error = options.i18n('uploadedBytes'); - return this._getXHRPromise( - false, - options.context, - [null, 'error', file.error] - ); - } - // The chunk upload method: - upload = function () { - // Clone the options object for each chunk upload: - var o = $.extend({}, options), - currentLoaded = o._progress.loaded; - o.blob = slice.call( - file, - ub, - ub + mcs, - file.type - ); - // Store the current chunk size, as the blob itself - // will be dereferenced after data processing: - o.chunkSize = o.blob.size; - // Expose the chunk bytes position range: - o.contentRange = 'bytes ' + ub + '-' + - (ub + o.chunkSize - 1) + '/' + fs; - // Process the upload data (the blob and potential form data): - that._initXHRData(o); - // Add progress listeners for this chunk upload: - that._initProgressListener(o); - jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) || - that._getXHRPromise(false, o.context)) - .done(function (result, textStatus, jqXHR) { - ub = that._getUploadedBytes(jqXHR) || - (ub + o.chunkSize); - // Create a progress event if no final progress event - // with loaded equaling total has been triggered - // for this chunk: - if (currentLoaded + o.chunkSize - o._progress.loaded) { - that._onProgress($.Event('progress', { - lengthComputable: true, - loaded: ub - o.uploadedBytes, - total: ub - o.uploadedBytes - }), o); - } - options.uploadedBytes = o.uploadedBytes = ub; - o.result = result; - o.textStatus = textStatus; - o.jqXHR = jqXHR; - that._trigger('chunkdone', null, o); - that._trigger('chunkalways', null, o); - if (ub < fs) { - // File upload not yet complete, - // continue with the next chunk: - upload(); - } else { - dfd.resolveWith( - o.context, - [result, textStatus, jqXHR] - ); - } - }) - .fail(function (jqXHR, textStatus, errorThrown) { - o.jqXHR = jqXHR; - o.textStatus = textStatus; - o.errorThrown = errorThrown; - that._trigger('chunkfail', null, o); - that._trigger('chunkalways', null, o); - dfd.rejectWith( - o.context, - [jqXHR, textStatus, errorThrown] - ); - }); - }; - this._enhancePromise(promise); - promise.abort = function () { - return jqXHR.abort(); - }; - upload(); - return promise; - }, - - _beforeSend: function (e, data) { - if (this._active === 0) { - // the start callback is triggered when an upload starts - // and no other uploads are currently running, - // equivalent to the global ajaxStart event: - this._trigger('start'); - // Set timer for global bitrate progress calculation: - this._bitrateTimer = new this._BitrateTimer(); - // Reset the global progress values: - this._progress.loaded = this._progress.total = 0; - this._progress.bitrate = 0; - } - // Make sure the container objects for the .response() and - // .progress() methods on the data object are available - // and reset to their initial state: - this._initResponseObject(data); - this._initProgressObject(data); - data._progress.loaded = data.loaded = data.uploadedBytes || 0; - data._progress.total = data.total = this._getTotal(data.files) || 1; - data._progress.bitrate = data.bitrate = 0; - this._active += 1; - // Initialize the global progress values: - this._progress.loaded += data.loaded; - this._progress.total += data.total; - }, - - _onDone: function (result, textStatus, jqXHR, options) { - var total = options._progress.total, - response = options._response; - if (options._progress.loaded < total) { - // Create a progress event if no final progress event - // with loaded equaling total has been triggered: - this._onProgress($.Event('progress', { - lengthComputable: true, - loaded: total, - total: total - }), options); - } - response.result = options.result = result; - response.textStatus = options.textStatus = textStatus; - response.jqXHR = options.jqXHR = jqXHR; - this._trigger('done', null, options); - }, - - _onFail: function (jqXHR, textStatus, errorThrown, options) { - var response = options._response; - if (options.recalculateProgress) { - // Remove the failed (error or abort) file upload from - // the global progress calculation: - this._progress.loaded -= options._progress.loaded; - this._progress.total -= options._progress.total; - } - response.jqXHR = options.jqXHR = jqXHR; - response.textStatus = options.textStatus = textStatus; - response.errorThrown = options.errorThrown = errorThrown; - this._trigger('fail', null, options); - }, - - _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) { - // jqXHRorResult, textStatus and jqXHRorError are added to the - // options object via done and fail callbacks - this._trigger('always', null, options); - }, - - _onSend: function (e, data) { - if (!data.submit) { - this._addConvenienceMethods(e, data); - } - var that = this, - jqXHR, - aborted, - slot, - pipe, - options = that._getAJAXSettings(data), - send = function () { - that._sending += 1; - // Set timer for bitrate progress calculation: - options._bitrateTimer = new that._BitrateTimer(); - jqXHR = jqXHR || ( - ((aborted || that._trigger( - 'send', - $.Event('send', {delegatedEvent: e}), - options - ) === false) && - that._getXHRPromise(false, options.context, aborted)) || - that._chunkedUpload(options) || $.ajax(options) - ).done(function (result, textStatus, jqXHR) { - that._onDone(result, textStatus, jqXHR, options); - }).fail(function (jqXHR, textStatus, errorThrown) { - that._onFail(jqXHR, textStatus, errorThrown, options); - }).always(function (jqXHRorResult, textStatus, jqXHRorError) { - that._onAlways( - jqXHRorResult, - textStatus, - jqXHRorError, - options - ); - that._sending -= 1; - that._active -= 1; - if (options.limitConcurrentUploads && - options.limitConcurrentUploads > that._sending) { - // Start the next queued upload, - // that has not been aborted: - var nextSlot = that._slots.shift(); - while (nextSlot) { - if (that._getDeferredState(nextSlot) === 'pending') { - nextSlot.resolve(); - break; - } - nextSlot = that._slots.shift(); - } - } - if (that._active === 0) { - // The stop callback is triggered when all uploads have - // been completed, equivalent to the global ajaxStop event: - that._trigger('stop'); - } - }); - return jqXHR; - }; - this._beforeSend(e, options); - if (this.options.sequentialUploads || - (this.options.limitConcurrentUploads && - this.options.limitConcurrentUploads <= this._sending)) { - if (this.options.limitConcurrentUploads > 1) { - slot = $.Deferred(); - this._slots.push(slot); - pipe = slot.then(send); - } else { - this._sequence = this._sequence.then(send, send); - pipe = this._sequence; - } - // Return the piped Promise object, enhanced with an abort method, - // which is delegated to the jqXHR object of the current upload, - // and jqXHR callbacks mapped to the equivalent Promise methods: - pipe.abort = function () { - aborted = [undefined, 'abort', 'abort']; - if (!jqXHR) { - if (slot) { - slot.rejectWith(options.context, aborted); - } - return send(); - } - return jqXHR.abort(); - }; - return this._enhancePromise(pipe); - } - return send(); - }, - - _onAdd: function (e, data) { - var that = this, - result = true, - options = $.extend({}, this.options, data), - files = data.files, - filesLength = files.length, - limit = options.limitMultiFileUploads, - limitSize = options.limitMultiFileUploadSize, - overhead = options.limitMultiFileUploadSizeOverhead, - batchSize = 0, - paramName = this._getParamName(options), - paramNameSet, - paramNameSlice, - fileSet, - i, - j = 0; - if (!filesLength) { - return false; - } - if (limitSize && files[0].size === undefined) { - limitSize = undefined; - } - if (!(options.singleFileUploads || limit || limitSize) || - !this._isXHRUpload(options)) { - fileSet = [files]; - paramNameSet = [paramName]; - } else if (!(options.singleFileUploads || limitSize) && limit) { - fileSet = []; - paramNameSet = []; - for (i = 0; i < filesLength; i += limit) { - fileSet.push(files.slice(i, i + limit)); - paramNameSlice = paramName.slice(i, i + limit); - if (!paramNameSlice.length) { - paramNameSlice = paramName; - } - paramNameSet.push(paramNameSlice); - } - } else if (!options.singleFileUploads && limitSize) { - fileSet = []; - paramNameSet = []; - for (i = 0; i < filesLength; i = i + 1) { - batchSize += files[i].size + overhead; - if (i + 1 === filesLength || - ((batchSize + files[i + 1].size + overhead) > limitSize) || - (limit && i + 1 - j >= limit)) { - fileSet.push(files.slice(j, i + 1)); - paramNameSlice = paramName.slice(j, i + 1); - if (!paramNameSlice.length) { - paramNameSlice = paramName; - } - paramNameSet.push(paramNameSlice); - j = i + 1; - batchSize = 0; - } - } - } else { - paramNameSet = paramName; - } - data.originalFiles = files; - $.each(fileSet || files, function (index, element) { - var newData = $.extend({}, data); - newData.files = fileSet ? element : [element]; - newData.paramName = paramNameSet[index]; - that._initResponseObject(newData); - that._initProgressObject(newData); - that._addConvenienceMethods(e, newData); - result = that._trigger( - 'add', - $.Event('add', {delegatedEvent: e}), - newData - ); - return result; - }); - return result; - }, - - _replaceFileInput: function (data) { - var input = data.fileInput, - inputClone = input.clone(true), - restoreFocus = input.is(document.activeElement); - // Add a reference for the new cloned file input to the data argument: - data.fileInputClone = inputClone; - $('').append(inputClone)[0].reset(); - // Detaching allows to insert the fileInput on another form - // without loosing the file input value: - input.after(inputClone).detach(); - // If the fileInput had focus before it was detached, - // restore focus to the inputClone. - if (restoreFocus) { - inputClone.focus(); - } - // Avoid memory leaks with the detached file input: - $.cleanData(input.unbind('remove')); - // Replace the original file input element in the fileInput - // elements set with the clone, which has been copied including - // event handlers: - this.options.fileInput = this.options.fileInput.map(function (i, el) { - if (el === input[0]) { - return inputClone[0]; - } - return el; - }); - // If the widget has been initialized on the file input itself, - // override this.element with the file input clone: - if (input[0] === this.element[0]) { - this.element = inputClone; - } - }, - - _handleFileTreeEntry: function (entry, path) { - var that = this, - dfd = $.Deferred(), - errorHandler = function (e) { - if (e && !e.entry) { - e.entry = entry; - } - // Since $.when returns immediately if one - // Deferred is rejected, we use resolve instead. - // This allows valid files and invalid items - // to be returned together in one set: - dfd.resolve([e]); - }, - successHandler = function (entries) { - that._handleFileTreeEntries( - entries, - path + entry.name + '/' - ).done(function (files) { - dfd.resolve(files); - }).fail(errorHandler); - }, - readEntries = function () { - dirReader.readEntries(function (results) { - if (!results.length) { - successHandler(entries); - } else { - entries = entries.concat(results); - readEntries(); - } - }, errorHandler); - }, - dirReader, entries = []; - path = path || ''; - if (entry.isFile) { - if (entry._file) { - // Workaround for Chrome bug #149735 - entry._file.relativePath = path; - dfd.resolve(entry._file); - } else { - entry.file(function (file) { - file.relativePath = path; - dfd.resolve(file); - }, errorHandler); - } - } else if (entry.isDirectory) { - dirReader = entry.createReader(); - readEntries(); - } else { - // Return an empy list for file system items - // other than files or directories: - dfd.resolve([]); - } - return dfd.promise(); - }, - - _handleFileTreeEntries: function (entries, path) { - var that = this; - return $.when.apply( - $, - $.map(entries, function (entry) { - return that._handleFileTreeEntry(entry, path); - }) - ).then(function () { - return Array.prototype.concat.apply( - [], - arguments - ); - }); - }, - - _getDroppedFiles: function (dataTransfer) { - dataTransfer = dataTransfer || {}; - var items = dataTransfer.items; - if (items && items.length && (items[0].webkitGetAsEntry || - items[0].getAsEntry)) { - return this._handleFileTreeEntries( - $.map(items, function (item) { - var entry; - if (item.webkitGetAsEntry) { - entry = item.webkitGetAsEntry(); - if (entry) { - // Workaround for Chrome bug #149735: - entry._file = item.getAsFile(); - } - return entry; - } - return item.getAsEntry(); - }) - ); - } - return $.Deferred().resolve( - $.makeArray(dataTransfer.files) - ).promise(); - }, - - _getSingleFileInputFiles: function (fileInput) { - fileInput = $(fileInput); - var entries = fileInput.prop('webkitEntries') || - fileInput.prop('entries'), - files, - value; - if (entries && entries.length) { - return this._handleFileTreeEntries(entries); - } - files = $.makeArray(fileInput.prop('files')); - if (!files.length) { - value = fileInput.prop('value'); - if (!value) { - return $.Deferred().resolve([]).promise(); - } - // If the files property is not available, the browser does not - // support the File API and we add a pseudo File object with - // the input value as name with path information removed: - files = [{name: value.replace(/^.*\\/, '')}]; - } else if (files[0].name === undefined && files[0].fileName) { - // File normalization for Safari 4 and Firefox 3: - $.each(files, function (index, file) { - file.name = file.fileName; - file.size = file.fileSize; - }); - } - return $.Deferred().resolve(files).promise(); - }, - - _getFileInputFiles: function (fileInput) { - if (!(fileInput instanceof $) || fileInput.length === 1) { - return this._getSingleFileInputFiles(fileInput); - } - return $.when.apply( - $, - $.map(fileInput, this._getSingleFileInputFiles) - ).then(function () { - return Array.prototype.concat.apply( - [], - arguments - ); - }); - }, - - _onChange: function (e) { - var that = this, - data = { - fileInput: $(e.target), - form: $(e.target.form) - }; - this._getFileInputFiles(data.fileInput).always(function (files) { - data.files = files; - if (that.options.replaceFileInput) { - that._replaceFileInput(data); - } - if (that._trigger( - 'change', - $.Event('change', {delegatedEvent: e}), - data - ) !== false) { - that._onAdd(e, data); - } - }); - }, - - _onPaste: function (e) { - var items = e.originalEvent && e.originalEvent.clipboardData && - e.originalEvent.clipboardData.items, - data = {files: []}; - if (items && items.length) { - $.each(items, function (index, item) { - var file = item.getAsFile && item.getAsFile(); - if (file) { - data.files.push(file); - } - }); - if (this._trigger( - 'paste', - $.Event('paste', {delegatedEvent: e}), - data - ) !== false) { - this._onAdd(e, data); - } - } - }, - - _onDrop: function (e) { - e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; - var that = this, - dataTransfer = e.dataTransfer, - data = {}; - if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { - e.preventDefault(); - this._getDroppedFiles(dataTransfer).always(function (files) { - data.files = files; - if (that._trigger( - 'drop', - $.Event('drop', {delegatedEvent: e}), - data - ) !== false) { - that._onAdd(e, data); - } - }); - } - }, - - _onDragOver: getDragHandler('dragover'), - - _onDragEnter: getDragHandler('dragenter'), - - _onDragLeave: getDragHandler('dragleave'), - - _initEventHandlers: function () { - if (this._isXHRUpload(this.options)) { - this._on(this.options.dropZone, { - dragover: this._onDragOver, - drop: this._onDrop, - // event.preventDefault() on dragenter is required for IE10+: - dragenter: this._onDragEnter, - // dragleave is not required, but added for completeness: - dragleave: this._onDragLeave - }); - this._on(this.options.pasteZone, { - paste: this._onPaste - }); - } - if ($.support.fileInput) { - this._on(this.options.fileInput, { - change: this._onChange - }); - } - }, - - _destroyEventHandlers: function () { - this._off(this.options.dropZone, 'dragenter dragleave dragover drop'); - this._off(this.options.pasteZone, 'paste'); - this._off(this.options.fileInput, 'change'); - }, - - _setOption: function (key, value) { - var reinit = $.inArray(key, this._specialOptions) !== -1; - if (reinit) { - this._destroyEventHandlers(); - } - this._super(key, value); - if (reinit) { - this._initSpecialOptions(); - this._initEventHandlers(); - } - }, - - _initSpecialOptions: function () { - var options = this.options; - if (options.fileInput === undefined) { - options.fileInput = this.element.is('input[type="file"]') ? - this.element : this.element.find('input[type="file"]'); - } else if (!(options.fileInput instanceof $)) { - options.fileInput = $(options.fileInput); - } - if (!(options.dropZone instanceof $)) { - options.dropZone = $(options.dropZone); - } - if (!(options.pasteZone instanceof $)) { - options.pasteZone = $(options.pasteZone); - } - }, - - _getRegExp: function (str) { - var parts = str.split('/'), - modifiers = parts.pop(); - parts.shift(); - return new RegExp(parts.join('/'), modifiers); - }, - - _isRegExpOption: function (key, value) { - return key !== 'url' && $.type(value) === 'string' && - /^\/.*\/[igm]{0,3}$/.test(value); - }, - - _initDataAttributes: function () { - var that = this, - options = this.options, - data = this.element.data(); - // Initialize options set via HTML5 data-attributes: - $.each( - this.element[0].attributes, - function (index, attr) { - var key = attr.name.toLowerCase(), - value; - if (/^data-/.test(key)) { - // Convert hyphen-ated key to camelCase: - key = key.slice(5).replace(/-[a-z]/g, function (str) { - return str.charAt(1).toUpperCase(); - }); - value = data[key]; - if (that._isRegExpOption(key, value)) { - value = that._getRegExp(value); - } - options[key] = value; - } - } - ); - }, - - _create: function () { - this._initDataAttributes(); - this._initSpecialOptions(); - this._slots = []; - this._sequence = this._getXHRPromise(true); - this._sending = this._active = 0; - this._initProgressObject(this); - this._initEventHandlers(); - }, - - // This method is exposed to the widget API and allows to query - // the number of active uploads: - active: function () { - return this._active; - }, - - // This method is exposed to the widget API and allows to query - // the widget upload progress. - // It returns an object with loaded, total and bitrate properties - // for the running uploads: - progress: function () { - return this._progress; - }, - - // This method is exposed to the widget API and allows adding files - // using the fileupload API. The data parameter accepts an object which - // must have a files property and can contain additional options: - // .fileupload('add', {files: filesList}); - add: function (data) { - var that = this; - if (!data || this.options.disabled) { - return; - } - if (data.fileInput && !data.files) { - this._getFileInputFiles(data.fileInput).always(function (files) { - data.files = files; - that._onAdd(null, data); - }); - } else { - data.files = $.makeArray(data.files); - this._onAdd(null, data); - } - }, - - // This method is exposed to the widget API and allows sending files - // using the fileupload API. The data parameter accepts an object which - // must have a files or fileInput property and can contain additional options: - // .fileupload('send', {files: filesList}); - // The method returns a Promise object for the file upload call. - send: function (data) { - if (data && !this.options.disabled) { - if (data.fileInput && !data.files) { - var that = this, - dfd = $.Deferred(), - promise = dfd.promise(), - jqXHR, - aborted; - promise.abort = function () { - aborted = true; - if (jqXHR) { - return jqXHR.abort(); - } - dfd.reject(null, 'abort', 'abort'); - return promise; - }; - this._getFileInputFiles(data.fileInput).always( - function (files) { - if (aborted) { - return; - } - if (!files.length) { - dfd.reject(); - return; - } - data.files = files; - jqXHR = that._onSend(null, data); - jqXHR.then( - function (result, textStatus, jqXHR) { - dfd.resolve(result, textStatus, jqXHR); - }, - function (jqXHR, textStatus, errorThrown) { - dfd.reject(jqXHR, textStatus, errorThrown); - } - ); - } - ); - return this._enhancePromise(promise); - } - data.files = $.makeArray(data.files); - if (data.files.length) { - return this._onSend(null, data); - } - } - return this._getXHRPromise(false, data && data.context); - } - - }); - -})); - -var Collejo = Collejo || { - settings: { - alertInClass: 'bounceInDown', - alertOutClass: 'fadeOutUp' - }, - lang: {}, - templates: {}, - form: {}, - link: {}, - modal: {}, - dynamics: {}, - browser: {}, - components: {}, - image: {}, - ready: { - push: function(callback, recall) { - C.f.push({ - callback: callback, - recall: recall === true ? true : false - }) - }, - call: function(ns) { - $.each(C.f, function(i, func) { - func.callback(ns); - }) - }, - recall: function(ns) { - $.each(C.f, function(i, func) { - if (func.recall) { - func.callback(ns); - } - }) - } - } -}; - -jQuery.events = function(expr) { - var rez = [], - evo; - jQuery(expr).each( - function() { - if (evo = jQuery._data(this, "events")) - rez.push({ - element: this, - events: evo - }); - }); - return rez.length > 0 ? rez : null; -} - -$(function() { - Collejo.ready.call($(document)); -}); -// Opera 8.0+ -Collejo.browser.isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0; -// Firefox 1.0+ -Collejo.browser.isFirefox = typeof InstallTrigger !== 'undefined'; -// At least Safari 3+: "[object HTMLElementConstructor]" -Collejo.browser.isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0; -// Internet Explorer 6-11 -Collejo.browser.isIE = /*@cc_on!@*/ false || !!document.documentMode; -// Edge 20+ -Collejo.browser.isEdge = !Collejo.browser.isIE && !!window.StyleMedia; -// Chrome 1+ -Collejo.browser.isChrome = !!window.chrome && !!window.chrome.webstore; -// Blink engine detection -Collejo.browser.isBlink = (Collejo.browser.isChrome || Collejo.browser.isOpera) && !!window.CSS; -Collejo.templates.spinnerTemplate = function() { - return $(''); -} - -Collejo.templates.alertTemplate = function(type, message, duration) { - return $(''); -} - -Collejo.templates.alertWrap = function() { - return $('
    '); -} - -Collejo.templates.alertContainer = function() { - return $('
    '); -} - -Collejo.templates.ajaxLoader = function() { - return $('
    '); -} - -Collejo.templates.dateTimePickerIcons = function() { - return { - time: 'fa fa-clock-o', - date: 'fa fa-calendar', - up: 'fa fa-chevron-up', - down: 'fa fa-chevron-down', - previous: 'fa fa-chevron-left', - next: 'fa fa-chevron-right', - today: 'fa fa-calendar-check-o', - clear: 'fa fa-trash-o', - close: 'fa fa-close' - } -} -$.ajaxSetup({ - headers: { - 'X-CSRF-Token': $('meta[name="token"]').attr('content'), - 'X-User-Time': new Date() - } -}); - -Collejo.ajaxComplete = function(event, xhr, settings) { - - var code, status, timeout, response = 0; - - try { - response = $.parseJSON(xhr.responseText); - } catch (e) { - console.log(e) - } - - status = (response == 0) ? xhr.status : response; - - if (status == 403 || status == 401) { - Collejo.alert('danger', Collejo.lang.ajax_unauthorize, 3000); - $('.modal,.modal-backdrop').remove(); - - window.location = settings.url; - } - - if (status == 400) { - Collejo.alert('warning', response.message, false); - $('.modal,.modal-backdrop').remove(); - } - - if (status != 0 && status != null) { - var code = status.code != undefined ? status.code : 0; - if (code == 0) { - if (response.data != undefined && response.data.partial != undefined) { - var target = response.data.target ? response.data.target : 'ajax-target'; - - var target = $('#' + target); - var partial = $(response.data.partial); - - Collejo.dynamics.prependRow(partial, target); - - Collejo.ready.recall(partial); - } - - if (response.data != undefined && response.data.redir != undefined) { - if (response.message != null) { - Collejo.alert(response.success ? 'success' : 'warning', response.message + '. redirecting…', 1000); - timeout = 0; - } - setTimeout(function() { - window.location = response.data.redir; - }, timeout); - } - - if (response.message != undefined && response.message != null && response.message.length > 0 && response.data.redir == undefined) { - Collejo.alert(response.success ? 'success' : 'warning', response.message, 3000); - } - - if (response.data != undefined && response.data.errors != undefined) { - var msg = '' + Collejo.lang.validation_failed + ' ' + Collejo.lang.validation_correct + '
    '; - $.each(response.data.errors, function(field, err) { - $.each(err, function(i, e) { - msg = msg + e + '
    '; - }); - }); - - Collejo.alert('warning', msg, 5000); - } - } - } - - $(window).resize(); -} - -$(document).ajaxComplete(Collejo.ajaxComplete); -Collejo.image.lazyLoad = function(img) { - img.hide(); - img.each(function(i) { - if (this.complete) { - $(this).fadeIn(); - } else { - $(this).load(function() { - $(this).fadeIn(500); - }); - } - }); -} - -Collejo.ready.push(function(scope) { - Collejo.image.lazyLoad($(scope).find('img.img-lazy')); -}); -$.fn.datetimepicker.defaults.icons = Collejo.templates.dateTimePickerIcons(); - -Collejo.ready.push(function(scope) { - $(scope).find('[data-toggle="date-input"]').datetimepicker({ - format: 'YYYY-MM-DD' - }); -}, true); - -Collejo.ready.push(function(scope) { - $(scope).find('[data-toggle="time-input"]').datetimepicker({ - format: 'HH:i:s' - }); -}, true); - -Collejo.ready.push(function(scope) { - $(scope).find('[data-toggle="date-time-input"]').datetimepicker({ - format: 'YYYY-MM-DD HH:i:s' - }); -}, true); -Selectize.define('allow-clear', function(options) { - var that = this; - var html = $(''); - - this.setup = (function() { - var original = that.setup; - - return function() { - - original.apply(this, arguments); - if (this.getValue() == '') { - html.addClass('disabled'); - } - this.$wrapper.append(html); - - this.$wrapper.on('click', '.clear-selection', function(e) { - e.preventDefault(); - if (that.isLocked) return; - that.clear(); - that.$control_input.focus(); - }); - - this.on('change', function(value) { - if (value == '') { - this.$wrapper.find('.clear-selection').addClass('disabled'); - } else { - this.$wrapper.find('.clear-selection').removeClass('disabled'); - } - }); - }; - })(); -}); - -Collejo.ready.push(function(scope) { - - Collejo.components.dropDown($(scope).find('[data-toggle="select-dropdown"]')); - - Collejo.components.searchDropDown($(scope).find('[data-toggle="search-dropdown"]')); - -}, true); - -Collejo.components.dropDown = function(el) { - el.each(function() { - var element = $(this); - - if (element.data('toggle') == null) { - element.data('toggle', 'select-dropdown'); - } - - var plugins = []; - - if (element.data('allow-clear') == true) { - plugins.push('allow-clear'); - } - - element.selectize({ - placeholder: Collejo.lang.select, - plugins: plugins - }); - - var selectize = element[0].selectize; - - selectize.on('change', function() { - element.valid(); - }); - }); - - if (el.length == 1) { - var selectize = el[0].selectize; - return selectize; - } -} - -Collejo.components.searchDropDown = function(el) { - el.each(function() { - var element = $(this); - - if (element.data('toggle') == null) { - element.data('toggle', 'search-dropdown'); - } - - var plugins = []; - - if (element.data('allow-clear') == true) { - plugins.push('allow-clear'); - } - - element.selectize({ - placeholder: Collejo.lang.search, - valueField: 'id', - labelField: 'name', - searchField: 'name', - options: [], - create: false, - plugins: plugins, - render: { - option: function(item, escape) { - return '
    ' + item.name + '
    '; - }, - item: function(item, escape) { - return '
    ' + item.name + '
    '; - } - }, - load: function(query, callback) { - if (!query.length) return callback(); - Collejo.templates.spinnerTemplate().addClass('inline').insertAfter(element); - $.ajax({ - url: element.data('url'), - type: 'GET', - dataType: 'json', - data: { - q: query - }, - error: function() { - callback(); - element.siblings('.spinner-wrap').remove(); - }, - success: function(res) { - callback(res.data); - element.siblings('.spinner-wrap').remove(); - } - }); - } - }); - - var selectize = element[0].selectize; - - selectize.on('change', function() { - element.valid(); - }); - }); - - if (el.length == 1) { - var selectize = el[0].selectize; - return selectize; - } -} -Collejo.ready.push(function(scope) { - $(scope).on('click', '[data-toggle="ajax-link"]', function(e) { - e.preventDefault(); - Collejo.link.ajax($(this)); - }); -}); - -Collejo.link.ajax = function(link, callback) { - - if (link.data('confirm') == null) { - - callAjax(link); - - } else { - - bootbox.confirm({ - message: link.data('confirm'), - buttons: { - cancel: { - label: Collejo.lang.no, - className: 'btn-default' - }, - confirm: { - label: Collejo.lang.yes, - className: 'btn-danger' - } - }, - callback: function(result) { - if (result) { - callAjax(link); - } - } - }); - } - - function callAjax(link) { - $.getJSON(link.attr('href'), function(response) { - - if (link.data('success-callback') == null) { - - if (typeof callback == 'function') { - callback(link, response); - } - - } else { - - var func = window[link.data('success-callback')]; - - if (typeof func == 'function') { - func(link, response); - } - } - - }); - } - -} -Collejo.alert = function(type, msg, duration) { - var alertWrap = Collejo.templates.alertWrap(); - var alertContainer = Collejo.templates.alertContainer(); - - alertWrap.css({ - position: 'fixed', - top: '60px', - width: '100%', - height: 0, - 'z-index': 99999 - }); - - alertContainer.css({ - width: '400px', - margin: '0 auto' - }); - - alertWrap.append(alertContainer); - var alert = Collejo.templates.alertTemplate(type, msg, duration); - - if ($('#alert-wrap').length == 0) { - $('body').append(alertWrap); - } - - var alertContainer = $('#alert-wrap').find('.alert-container'); - - if (duration === false) { - alertContainer.empty(); - } - - alert.appendTo(alertContainer).addClass('animated ' + Collejo.settings.alertInClass); - - if (duration !== false) { - window.setTimeout(function() { - if (Collejo.browser.isFirefox || Collejo.browser.isChrome) { - alert.removeClass(Collejo.settings.alertInClass) - .addClass(Collejo.settings.alertOutClass) - .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() { - alert.remove(); - }); - } else { - alert.remove(); - } - }, duration); - } - -} -Collejo.form.lock = function(form) { - $(form).find('input').attr('readonly', true); - $(form).find('.selectized').each(function() { - $(this)[0].selectize.lock(); - }); - $(form).find('.fileinput-button').each(function() { - $(this).addClass('disabled').find('input').attr('disabled', true); - }); - $(form).find('button[type="submit"]') - .attr('disabled', true) - .append(Collejo.templates.spinnerTemplate()); - $(form).find('input[type="checkbox"]') - .attr('readonly', true) - .parent('.checkbox-row').addClass('disabled'); -} - -Collejo.form.unlock = function(form) { - $(form).find('input').attr('readonly', false); - $(form).find('.selectized').each(function() { - $(this)[0].selectize.unlock(); - }); - $(form).find('.fileinput-button').each(function() { - $(this).removeClass('disabled').find('input').attr('disabled', false); - }); - $(form).find('button[type="submit"]') - .attr('disabled', false) - .find('.spinner-wrap') - .remove(); - $(form).find('input[type="checkbox"]') - .attr('readonly', false) - .parent('.checkbox-row').removeClass('disabled'); -} - -Collejo.ready.push(function(scope) { - $.validator.setDefaults({ - ignore: $('.selectize'), - errorPlacement: function(error, element) { - if ($(element).parents('.input-group').length) { - error.insertAfter($(element).parents('.input-group')); - } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') { - error.insertAfter($(element).siblings('.selectize-control')); - } else { - error.insertAfter(element); - } - }, - highlight: function(element, errorClass, validClass) { - if (element.type === "radio") { - this.findByName(element.name).addClass(errorClass).removeClass(validClass); - } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') { - $(element).siblings('.selectize-control').addClass(errorClass).removeClass(validClass) - } else { - $(element).addClass(errorClass).removeClass(validClass); - } - }, - unhighlight: function(element, errorClass, validClass) { - if (element.type === "radio") { - this.findByName(element.name).removeClass(errorClass).addClass(validClass); - } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') { - $(element).siblings('.selectize-control').removeClass(errorClass).addClass(validClass); - } else { - $(element).removeClass(errorClass).addClass(validClass); - } - } - }); -}); -Collejo.ready.push(function(scope) { - $(scope).on('click', '[data-toggle="dynamic-delete"]', function(e) { - e.preventDefault(); - - Collejo.dynamics.delete($(this)); - }); - - Collejo.dynamics.checkRowCount($(scope).find('.table-list')); - Collejo.dynamics.checkRowCount($(scope).find('.column-list')); -}); - -Collejo.dynamics.delete = function(element) { - - Collejo.link.ajax(element, function(link, response) { - - var list = link.parents('.table-list'); - - link.closest('.' + link.data('delete-block')).fadeOut().remove(); - - Collejo.dynamics.checkRowCount(link.parents('.table-list')); - }); -} - -Collejo.dynamics.prependRow = function(partial, list) { - - var type = Collejo.dynamics.getListType(list); - - var id = partial.prop('id'); - var replacing = list.find('#' + id); - - if (replacing.length) { - replacing.replaceWith(partial); - } else { - if (type == 'table') { - partial.hide().insertAfter(list.find('th').parent()).fadeIn(); - } else if (type == 'columns') { - partial.hide().prependTo(list.find('.columns')).fadeIn(); - } else { - partial.hide().prependTo(list).fadeIn(); - } - } - - Collejo.dynamics.checkRowCount(list); -} - -Collejo.dynamics.getListType = function(list) { - var type; - - if (list.find('table').length || list.prop('tagName') == 'TABLE') { - type = 'table'; - } else if (list.find('columns').length) { - type = 'columns'; - } - - return type; -} - -Collejo.dynamics.checkRowCount = function(list) { - - var type = Collejo.dynamics.getListType(list); - - if (type = 'table') { - var table = list.find('table'); - - if (table.find('tr').length == 1) { - list.find('.placeholder').show(); - table.hide(); - } else { - list.find('.placeholder').hide(); - table.show(); - } - } - - if (type = 'columns') { - var columns = list.find('columns'); - - if (columns.find('.col-md-6').children().length == 0) { - columns.siblings('.col-md-6').show(); - columns.hide(); - } else { - list.siblings('.col-md-6').hide(); - columns.show(); - } - } -} -Collejo.modal.open = function(link) { - var id = link.data('modal-id') != null ? link.data('modal-id') : 'ajax-modal-' + moment(); - var size = link.data('modal-size') != null ? ' modal-' + link.data('modal-size') + ' ' : ''; - - var backdrop = link.data('modal-backdrop') != null ? link.data('modal-backdrop') : true; - var keyboard = link.data('modal-keyboard') != null ? link.data('modal-keyboard') : true; - - var modal = $(''); - - var loader = Collejo.templates.ajaxLoader(); - - if (loader != null) { - loader.appendTo(modal); - } - - $('body').append(modal); - - modal.on('show.bs.modal', function() { - - $.ajax({ - url: link.attr('href'), - type: 'GET', - success: function(response) { - if (response.success == true && response.data && response.data.content) { - modal.find('.modal-dialog').html(response.data.content); - modal.removeClass('loading'); - - if (loader != null) { - loader.remove(); - } - - Collejo.ready.recall(modal); - } - } - }); - }).on('hidden.bs.modal', function() { - modal.remove(); - }).modal({ - backdrop: backdrop, - keyboard: keyboard - }); -} - -Collejo.modal.close = function(form) { - $(document).find('#' + $(form).prop('id')).closest('.modal').modal('hide'); -} - -Collejo.ready.push(function(scope) { - $(scope).on('click', '[data-toggle="ajax-modal"]', function(e) { - e.preventDefault(); - Collejo.modal.open($(this)); - }); - - $(scope).on('DOMNodeInserted', '.modal-backdrop', function(e) { - if ($('.modal-backdrop').length > 1) { - - $('.modal-backdrop').last().css({ - 'z-index': parseInt($('.modal').last().prev().css('z-index')) + 10 - }) - } - }); - - $(scope).on('DOMNodeInserted', '.modal', function(e) { - if ($('.modal').length > 1) { - $('.modal').last().css({ - 'z-index': parseInt($('.modal-backdrop').last().prev().css('z-index')) + 10 - }) - } - }); -}); -$(function() { - $(window).resize(); - - $('.dash-content a').click(function(e) { - var url = $(this).prop('href'); - if (url.substr(url.length - 1) == '#') { - e.preventDefault(); - } - }); -}); - -$(window).on('resize', function() { - - var tab = $('.dash-content .tab-content'); - if (tab && tab.offset()) { - tab.css({ - 'min-height': ($(document).height() - tab.offset().top - 35) + 'px' - }); - } - - var tabnav = $('.tabs-left'); - if (tabnav && tab) { - tabnav.css({ - 'height': tab.height() + 'px' - }); - } - - var section = $('.section-content,.landing-screen'); - if (section && section.offset()) { - section.css({ - 'min-height': ($(document).height() - section.offset().top - 35) + 'px' - }); - } -}); -//# sourceMappingURL=collejo.js.map diff --git a/src/resources/assets/js/collejo.js.map b/src/resources/assets/js/collejo.js.map deleted file mode 100644 index 499f8a0..0000000 --- a/src/resources/assets/js/collejo.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["jquery.js","moment.js","bootstrap.js","jquery.form.js","jquery.validate.js","bootstrap-datetimepicker.js","bootbox.js","d3.js","c3.js","selectize.js","jquery.ui.widget.js","jquery.iframe-transport.js","jquery.fileupload.js","collejo.js","browser.js","templates.js","ajax_setup.js","image.js","datetimepicker.js","select.js","ajax_link.js","alert.js","form.js","dynamics.js","modal.js","dashboard.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC53SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACv8HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3zEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9vCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACr7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACz9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACj1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1gQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACllHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5jBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACr8CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"collejo.js","sourcesContent":["/*!\n * jQuery JavaScript Library v1.9.1\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-2-4\n */\n(function( window, undefined ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\"use strict\";\nvar\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// Support: IE<9\n\t// For `typeof node.method` instead of `node.method !== undefined`\n\tcore_strundefined = typeof undefined,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\tlocation = window.location,\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {},\n\n\t// List of deleted data cache ids, so we can reuse them\n\tcore_deletedIds = [],\n\n\tcore_version = \"1.9.1\",\n\n\t// Save a reference to some core methods\n\tcore_concat = core_deletedIds.concat,\n\tcore_push = core_deletedIds.push,\n\tcore_slice = core_deletedIds.slice,\n\tcore_indexOf = core_deletedIds.indexOf,\n\tcore_toString = class2type.toString,\n\tcore_hasOwn = class2type.hasOwnProperty,\n\tcore_trim = core_version.trim,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n\n\t// Used for splitting on whitespace\n\tcore_rnotwhite = /\\S+/g,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t},\n\n\t// The ready event handler\n\tcompleted = function( event ) {\n\n\t\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\n\t\t\tdetach();\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\t// Clean-up method for dom ready events\n\tdetach = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\t\t\twindow.removeEventListener( \"load\", completed, false );\n\n\t\t} else {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\t\twindow.detachEvent( \"onload\", completed );\n\t\t}\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: core_version,\n\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\t// The number of elements contained in the matched element set\n\tsize: function() {\n\t\treturn this.length;\n\t},\n\n\ttoArray: function() {\n\t\treturn core_slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn String( obj );\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\n\t\tvar key;\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, keepScripts ) {\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\t\tcontext = context || document;\n\n\t\tvar parsed = rsingleTag.exec( data ),\n\t\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif ( parsed ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\t\tif ( scripts ) {\n\t\t\tjQuery( scripts ).remove();\n\t\t}\n\t\treturn jQuery.merge( [], parsed.childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\tif ( data === null ) {\n\t\t\treturn data;\n\t\t}\n\n\t\tif ( typeof data === \"string\" ) {\n\n\t\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\t\tdata = jQuery.trim( data );\n\n\t\t\tif ( data ) {\n\t\t\t\t// Make sure the incoming data is actual JSON\n\t\t\t\t// Logic borrowed from http://json.org/json2.js\n\t\t\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\t\t\treturn ( new Function( \"return \" + data ) )();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcore_push.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn core_concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\t\tvar i = 0,\n\t\t\tlength = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif ( jQuery.type( key ) === \"object\" ) {\n\t\t\tchainable = true;\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t\t}\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\tchainable = true;\n\n\t\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif ( raw ) {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\n\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t}\n});\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || type !== \"function\" &&\n\t\t( length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj );\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\targs = args || [];\n\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = core_slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n\t\t\t\t\tif( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\njQuery.support = (function() {\n\n\tvar support, all, a,\n\t\tinput, select, fragment,\n\t\topt, eventName, isSupported, i,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Setup\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"
    a\";\n\n\t// Support tests won't run in some limited or non-browser environments\n\tall = div.getElementsByTagName(\"*\");\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\tif ( !all || !a || !all.length ) {\n\t\treturn {};\n\t}\n\n\t// First batch of tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\tsupport = {\n\t\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\t\tgetSetAttribute: div.className !== \"t\",\n\n\t\t// IE strips leading whitespace when .innerHTML is used\n\t\tleadingWhitespace: div.firstChild.nodeType === 3,\n\n\t\t// Make sure that tbody elements aren't automatically inserted\n\t\t// IE will insert them into empty tables\n\t\ttbody: !div.getElementsByTagName(\"tbody\").length,\n\n\t\t// Make sure that link elements get serialized correctly by innerHTML\n\t\t// This requires a wrapper element in IE\n\t\thtmlSerialize: !!div.getElementsByTagName(\"link\").length,\n\n\t\t// Get the style information from getAttribute\n\t\t// (IE uses .cssText instead)\n\t\tstyle: /top/.test( a.getAttribute(\"style\") ),\n\n\t\t// Make sure that URLs aren't manipulated\n\t\t// (IE normalizes it by default)\n\t\threfNormalized: a.getAttribute(\"href\") === \"/a\",\n\n\t\t// Make sure that element opacity exists\n\t\t// (IE uses filter instead)\n\t\t// Use a regex to work around a WebKit issue. See #5145\n\t\topacity: /^0.5/.test( a.style.opacity ),\n\n\t\t// Verify style float existence\n\t\t// (IE uses styleFloat instead of cssFloat)\n\t\tcssFloat: !!a.style.cssFloat,\n\n\t\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\t\tcheckOn: !!input.value,\n\n\t\t// Make sure that a selected-by-default option has a working selected property.\n\t\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\t\toptSelected: opt.selected,\n\n\t\t// Tests for enctype support on a form (#6743)\n\t\tenctype: !!document.createElement(\"form\").enctype,\n\n\t\t// Makes sure cloning an html5 element does not cause problems\n\t\t// Where outerHTML is undefined, this still works\n\t\thtml5Clone: document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav>\",\n\n\t\t// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode\n\t\tboxModel: document.compatMode === \"CSS1Compat\",\n\n\t\t// Will be defined later\n\t\tdeleteExpando: true,\n\t\tnoCloneEvent: true,\n\t\tinlineBlockNeedsLayout: false,\n\t\tshrinkWrapBlocks: false,\n\t\treliableMarginRight: true,\n\t\tboxSizingReliable: true,\n\t\tpixelPosition: false\n\t};\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<9\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement(\"input\");\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"checked\", \"t\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( input );\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\n\tif ( div.attachEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\n\t\tdiv.cloneNode( true ).click();\n\t}\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)\n\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php\n\tfor ( i in { submit: true, change: true, focusin: true }) {\n\t\tdiv.setAttribute( eventName = \"on\" + i, \"t\" );\n\n\t\tsupport[ i + \"Bubbles\" ] = eventName in window || div.attributes[ eventName ].expando === false;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, marginDiv, tds,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\";\n\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE8\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.innerHTML = \"
    t
    \";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Support: IE8\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\t\tsupport.boxSizing = ( div.offsetWidth === 4 );\n\t\tsupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );\n\n\t\t// Use window.getComputedStyle because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = div.appendChild( document.createElement(\"div\") );\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== core_strundefined ) {\n\t\t\t// Support: IE<8\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Support: IE6\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.innerHTML = \"
    \";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tif ( support.inlineBlockNeedsLayout ) {\n\t\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t\t// Support: IE<8\n\t\t\t\tbody.style.zoom = 1;\n\t\t\t}\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\t// Null elements to avoid leaks in IE\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tall = select = fragment = opt = a = input = null;\n\n\treturn support;\n})();\n\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ){\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, ret,\n\t\tinternalKey = jQuery.expando,\n\t\tgetByName = typeof name === \"string\",\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\telem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\t\tcache[ id ] = {};\n\n\t\t// Avoids exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tif ( !isNode ) {\n\t\t\tcache[ id ].toJSON = jQuery.noop;\n\t\t}\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( getByName ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar i, l, thisCache,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\tfor ( i = 0, l = name.length; i < l; i++ ) {\n\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\tdelete cache[ id ];\n\n\t// When all else fails, null\n\t} else {\n\t\tcache[ id ] = null;\n\t}\n}\n\njQuery.extend({\n\tcache: {},\n\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( core_version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",\n\t\t\"applet\": true\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\t// Do not set data on non-element because it will not be cleared (#8335).\n\t\tif ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar attrs, name,\n\t\t\telem = this[0],\n\t\t\ti = 0,\n\t\t\tdata = null;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattrs = elem.attributes;\n\t\t\t\t\tfor ( ; i < attrs.length; i++ ) {\n\t\t\t\t\t\tname = attrs[i].name;\n\n\t\t\t\t\t\tif ( !name.indexOf( \"data-\" ) ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn jQuery.access( this, function( value ) {\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\t// Try to fetch any internally stored data first\n\t\t\t\treturn elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;\n\t\t\t}\n\n\t\t\tthis.each(function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\thooks.cur = fn;\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar nodeHook, boolHook,\n\trclass = /[\\t\\r\\n]/g,\n\trreturn = /\\r/g,\n\trfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i,\n\trboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tgetSetInput = jQuery.support.input;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = jQuery.trim( cur );\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisBool = typeof stateVal === \"boolean\";\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tstate = stateVal,\n\t\t\t\t\tclassNames = value.match( core_rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tstate = isBool ? state : !self.hasClass( className );\n\t\t\t\t\tself[ state ? \"addClass\" : \"removeClass\" ]( className );\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === core_strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar ret, hooks, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val,\n\t\t\t\tself = jQuery(this);\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, self.val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// attributes.value is undefined in Blackberry 4.7 but\n\t\t\t\t// uses .value. See #6932\n\t\t\t\tvar val = elem.attributes.value;\n\t\t\t\treturn !val || val.specified ? elem.value : elem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar values = jQuery.makeArray( value );\n\n\t\t\t\tjQuery(elem).find(\"option\").each(function() {\n\t\t\t\t\tthis.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;\n\t\t\t\t});\n\n\t\t\t\tif ( !values.length ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, notxml, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === core_strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( notxml ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && notxml && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && notxml && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\n\t\t\t// In IE9+, Flash objects don't have .getAttribute (#12945)\n\t\t\t// Support: IE9+\n\t\t\tif ( typeof elem.getAttribute !== core_strundefined ) {\n\t\t\t\tret = elem.getAttribute( name );\n\t\t\t}\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( core_rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( rboolean.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false for boolean attributes\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8\n\t\t\t\t\tif ( !getSetAttribute && ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\ttabindex: \"tabIndex\",\n\t\treadonly: \"readOnly\",\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\",\n\t\tmaxlength: \"maxLength\",\n\t\tcellspacing: \"cellSpacing\",\n\t\tcellpadding: \"cellPadding\",\n\t\trowspan: \"rowSpan\",\n\t\tcolspan: \"colSpan\",\n\t\tusemap: \"useMap\",\n\t\tframeborder: \"frameBorder\",\n\t\tcontenteditable: \"contentEditable\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn ( elem[ name ] = value );\n\t\t\t}\n\n\t\t} else {\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn elem[ name ];\n\t\t\t}\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\tvar attributeNode = elem.getAttributeNode(\"tabindex\");\n\n\t\t\t\treturn attributeNode && attributeNode.specified ?\n\t\t\t\t\tparseInt( attributeNode.value, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tundefined;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hook for boolean attributes\nboolHook = {\n\tget: function( elem, name ) {\n\t\tvar\n\t\t\t// Use .prop to determine if this attribute is understood as boolean\n\t\t\tprop = jQuery.prop( elem, name ),\n\n\t\t\t// Fetch it accordingly\n\t\t\tattr = typeof prop === \"boolean\" && elem.getAttribute( name ),\n\t\t\tdetail = typeof prop === \"boolean\" ?\n\n\t\t\t\tgetSetInput && getSetAttribute ?\n\t\t\t\t\tattr != null :\n\t\t\t\t\t// oldIE fabricates an empty string for missing boolean attributes\n\t\t\t\t\t// and conflates checked/selected into attroperties\n\t\t\t\t\truseDefault.test( name ) ?\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] :\n\t\t\t\t\t\t!!attr :\n\n\t\t\t\t// fetch an attribute node for properties not recognized as boolean\n\t\t\t\telem.getAttributeNode( name );\n\n\t\treturn detail && detail.value !== false ?\n\t\t\tname.toLowerCase() :\n\t\t\tundefined;\n\t},\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t} else {\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\n\t\treturn name;\n\t}\n};\n\n// fix oldIE value attroperty\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn jQuery.nodeName( elem, \"input\" ) ?\n\n\t\t\t\t// Ignore the value *property* by using defaultValue\n\t\t\t\telem.defaultValue :\n\n\t\t\t\tret && ret.specified ? ret.value : undefined;\n\t\t},\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = jQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn ret && ( name === \"id\" || name === \"name\" || name === \"coords\" ? ret.value !== \"\" : ret.specified ) ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\treturn name === \"value\" || value === elem.getAttribute( name ) ?\n\t\t\t\tvalue :\n\t\t\t\tundefined;\n\t\t}\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tget: nodeHook.get,\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !jQuery.support.hrefNormalized ) {\n\tjQuery.each([ \"href\", \"src\", \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar ret = elem.getAttribute( name, 2 );\n\t\t\t\treturn ret == null ? undefined : ret;\n\t\t\t}\n\t\t});\n\t});\n\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t});\n}\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\nif ( !jQuery.support.checkOn ) {\n\tjQuery.each([ \"radio\", \"checkbox\" ], function() {\n\t\tjQuery.valHooks[ this ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Handle the case where in Webkit \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t}\n\t\t};\n\t});\n}\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t});\n});\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\t// jQuery(...).bind(\"mouseover mouseout\", fn);\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = core_hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = core_hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\tevent.isTrigger = true;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&\n\t\t\t\t!(type === \"click\" && jQuery.nodeName( elem, \"a\" )) && jQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, ret, handleObj, matched, j,\n\t\t\thandlerQueue = [],\n\t\t\targs = core_slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar sel, handleObj, matches, i,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Chrome 23+, Safari?\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== document.activeElement && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === document.activeElement && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Even when returnValue equals to undefined Firefox will still show alert\n\t\t\t\tif ( event.result !== undefined ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{ type: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === core_strundefined ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar type, origFn;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\n/*!\n * Sizzle CSS Selector Engine\n * Copyright 2012 jQuery Foundation and other contributors\n * Released under the MIT license\n * http://sizzlejs.com/\n */\n(function( window, undefined ) {\n\nvar i,\n\tcachedruns,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcompile,\n\thasDuplicate,\n\toutermostContext,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsXML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\tsortOrder,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tsupport = {},\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Array methods\n\tarr = [],\n\tpop = arr.pop,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\toperators = \"([*^$|!~]?=)\",\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:\" + operators + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments quoted,\n\t// then not containing pseudos/brackets,\n\t// then attribute selectors/non-parenthetical expressions,\n\t// then anything else\n\t// These preferences are here to reduce the number of selectors\n\t// needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes.replace( 3, 8 ) + \")*)|.*)\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([\\\\x20\\\\t\\\\r\\\\n\\\\f>+~])\" + whitespace + \"*\" ),\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"NAME\": new RegExp( \"^\\\\[name=['\\\"]?(\" + characterEncoding + \")['\\\"]?\\\\]\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trsibling = /[\\x20\\t\\r\\n\\f]*[+~]/,\n\n\trnative = /^[^{]+\\{\\s*\\[native code/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trescape = /'|\\\\/g,\n\trattributeQuotes = /\\=[\\x20\\t\\r\\n\\f]*([^'\"\\]]*)[\\x20\\t\\r\\n\\f]*\\]/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = /\\\\([\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|.)/g,\n\tfunescape = function( _, escaped ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\treturn high !== high ?\n\t\t\tescaped :\n\t\t\t// BMP codepoint\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Use a stripped-down slice if we can't use a native one\ntry {\n\tslice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;\n} catch ( e ) {\n\tslice = function( i ) {\n\t\tvar elem,\n\t\t\tresults = [];\n\t\twhile ( (elem = this[i++]) ) {\n\t\t\tresults.push( elem );\n\t\t}\n\t\treturn results;\n\t};\n}\n\n/**\n * For feature detection\n * @param {Function} fn The function to test for native support\n */\nfunction isNative( fn ) {\n\treturn rnative.test( fn + \"\" );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar cache,\n\t\tkeys = [];\n\n\treturn (cache = function( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key += \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key ] = value);\n\t});\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( !documentIsXML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, slice.call(context.getElementsByClassName( m ), 0) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && !rbuggyQSA.test(selector) ) {\n\t\t\told = true;\n\t\t\tnid = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && context.parentNode || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results, slice.call( newContext.querySelectorAll(\n\t\t\t\t\t\tnewSelector\n\t\t\t\t\t), 0 ) );\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Detect xml\n * @param {Element|Object} elem An element or a document\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar doc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsXML = isXML( doc );\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.tagNameNoComments = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if attributes should be retrieved by attribute nodes\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.innerHTML = \"\";\n\t\tvar type = typeof div.lastChild.getAttribute(\"multiple\");\n\t\t// IE8 returns a string for some attributes even when not present\n\t\treturn type !== \"boolean\" && type !== \"string\";\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getByClassName = assert(function( div ) {\n\t\t// Opera can't find a second classname (in 9.6)\n\t\tdiv.innerHTML = \"\";\n\t\tif ( !div.getElementsByClassName || !div.getElementsByClassName(\"e\").length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Safari 3.2 caches class attributes and doesn't catch changes\n\t\tdiv.lastChild.className = \"e\";\n\t\treturn div.getElementsByClassName(\"e\").length === 2;\n\t});\n\n\t// Check if getElementById returns elements by name\n\t// Check if getElementsByName privileges form controls or returns elements by ID\n\tsupport.getByName = assert(function( div ) {\n\t\t// Inject content\n\t\tdiv.id = expando + 0;\n\t\tdiv.innerHTML = \"
    \";\n\t\tdocElem.insertBefore( div, docElem.firstChild );\n\n\t\t// Test\n\t\tvar pass = doc.getElementsByName &&\n\t\t\t// buggy browsers will return fewer than the correct 2\n\t\t\tdoc.getElementsByName( expando ).length === 2 +\n\t\t\t// buggy browsers will return more than the correct 0\n\t\t\tdoc.getElementsByName( expando + 0 ).length;\n\t\tsupport.getIdNotName = !doc.getElementById( expando );\n\n\t\t// Cleanup\n\t\tdocElem.removeChild( div );\n\n\t\treturn pass;\n\t});\n\n\t// IE6/7 return modified attributes\n\tExpr.attrHandle = assert(function( div ) {\n\t\tdiv.innerHTML = \"\";\n\t\treturn div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&\n\t\t\tdiv.firstChild.getAttribute(\"href\") === \"#\";\n\t}) ?\n\t\t{} :\n\t\t{\n\t\t\t\"href\": function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"href\", 2 );\n\t\t\t},\n\t\t\t\"type\": function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"type\");\n\t\t\t}\n\t\t};\n\n\t// ID find and filter\n\tif ( support.getIdNotName ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && !documentIsXML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && !documentIsXML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\n\t\t\t\treturn m ?\n\t\t\t\t\tm.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode(\"id\").value === id ?\n\t\t\t\t\t\t[m] :\n\t\t\t\t\t\tundefined :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.tagNameNoComments ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Name\n\tExpr.find[\"NAME\"] = support.getByName && function( tag, context ) {\n\t\tif ( typeof context.getElementsByName !== strundefined ) {\n\t\t\treturn context.getElementsByName( name );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21),\n\t// no need to also add to buggyMatches since matches checks buggyQSA\n\t// A support test would require too much code (would include document ready)\n\trbuggyQSA = [ \":focus\" ];\n\n\tif ( (support.qsa = isNative(doc.querySelectorAll)) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explictly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"\";\n\n\t\t\t// IE8 - Some boolean attributes are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:checked|disabled|ismap|multiple|readonly|selected|value)\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Opera 10-12/IE8 - ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tif ( div.querySelectorAll(\"[i^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:\\\"\\\"|'')\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = new RegExp( rbuggyMatches.join(\"|\") );\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = isNative(docElem.contains) || docElem.compareDocumentPosition ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t// Document order sorting\n\tsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\t\tvar compare;\n\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tif ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {\n\t\t\tif ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {\n\t\t\t\tif ( a === doc || contains( preferredDoc, a ) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === doc || contains( preferredDoc, b ) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t}\n\n\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\t} else if ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\t// Always assume the presence of duplicates if sort doesn't\n\t// pass them to our comparison function (as in Google Chrome).\n\thasDuplicate = false;\n\t[0, 0].sort( sortOrder );\n\tsupport.detectDuplicates = hasDuplicate;\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\t// rbuggyQSA always contains :focus, so no need for an existence check\n\tif ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [elem] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\tvar val;\n\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( !documentIsXML ) {\n\t\tname = name.toLowerCase();\n\t}\n\tif ( (val = Expr.attrHandle[ name ]) ) {\n\t\treturn val( elem );\n\t}\n\tif ( documentIsXML || support.attributes ) {\n\t\treturn elem.getAttribute( name );\n\t}\n\treturn ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?\n\t\tname :\n\t\tval && val.specified ? val.value : null;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n// Document sorting and removing duplicates\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\ti = 1,\n\t\tj = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\tfor ( ; (elem = results[i]); i++ ) {\n\t\t\tif ( elem === results[ i - 1 ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n// Returns a function to use in pseudos for input types\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n// Returns a function to use in pseudos for buttons\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n// Returns a function to use in pseudos for positionals\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( ; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (see #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[5] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[4] ) {\n\t\t\t\tmatch[2] = match[4];\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeName ) {\n\t\t\tif ( nodeName === \"*\" ) {\n\t\t\t\treturn function() { return true; };\n\t\t\t}\n\n\t\t\tnodeName = nodeName.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\")) || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifider\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsXML ?\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\") :\n\t\t\t\t\t\telem.lang) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t// not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t// Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || elem.nodeType === 3 || elem.nodeType === 4 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === elem.type );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( tokens = [] );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar data, cache, outerCache,\n\t\t\t\tdirkey = dirruns + \" \" + doneName;\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {\n\t\t\t\t\t\t\tif ( (data = cache[1]) === true || data === cachedruns ) {\n\t\t\t\t\t\t\t\treturn data === true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcache = outerCache[ dir ] = [ dirkey ];\n\t\t\t\t\t\t\tcache[1] = matcher( elem, context, xml ) || cachedruns;\n\t\t\t\t\t\t\tif ( cache[1] === true ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\t// A counter to specify which element is currently being matched\n\tvar matcherCachedRuns = 0,\n\t\tbySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = matcherCachedRuns;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\tcachedruns = ++matcherCachedRuns;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\t}\n\treturn cached;\n};\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector );\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && !documentIsXML &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = Expr.find[\"ID\"]( token.matches[0].replace( runescape, funescape ), context )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\n\t\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, slice.call( seed, 0 ) );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\tdocumentIsXML,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\n// Deprecated\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nExpr.filters = setFilters.prototype = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\n// Initialize with the default document\nsetDocument();\n\n// Override sizzle attribute retrieval\nSizzle.attr = jQuery.attr;\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\nvar runtil = /Until$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\tisSimple = /^.[^:#\\[\\.,]*$/,\n\trneedsContext = jQuery.expr.match.needsContext,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i, ret, self,\n\t\t\tlen = this.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\tself = this;\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tret = [];\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, this[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = ( this.selector ? this.selector + \" \" : \"\" ) + selector;\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, false) );\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, true) );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!selector && (\n\t\t\ttypeof selector === \"string\" ?\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\trneedsContext.test( selector ) ?\n\t\t\t\t\tjQuery( selector, this.context ).index( this[0] ) >= 0 :\n\t\t\t\t\tjQuery.filter( selector, this ).length > 0 :\n\t\t\t\tthis.filter( selector ).length > 0 );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tret = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tcur = this[i];\n\n\t\t\twhile ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {\n\t\t\t\tif ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {\n\t\t\t\t\tret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( jQuery.unique(all) );\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( !runtil.test( name ) ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;\n\n\t\tif ( this.length > 1 && rparentsprev.test( name ) ) {\n\t\t\tret = ret.reverse();\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 ?\n\t\t\tjQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :\n\t\t\tjQuery.find.matches(expr, elems);\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, keep ) {\n\n\t// Can't pass null or undefined to indexOf in Firefox 4\n\t// Set to 0 to skip string check\n\tqualifier = qualifier || 0;\n\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\tvar retVal = !!qualifier.call( elem, i, elem );\n\t\t\treturn retVal === keep;\n\t\t});\n\n\t} else if ( qualifier.nodeType ) {\n\t\treturn jQuery.grep(elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) === keep;\n\t\t});\n\n\t} else if ( typeof qualifier === \"string\" ) {\n\t\tvar filtered = jQuery.grep(elements, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t});\n\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter(qualifier, filtered, !keep);\n\t\t} else {\n\t\t\tqualifier = jQuery.filter( qualifier, filtered );\n\t\t}\n\t}\n\n\treturn jQuery.grep(elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /
    \", \"
    \" ],\n\t\ttr: [ 2, \"\", \"
    \" ],\n\t\tcol: [ 2, \"\", \"
    \" ],\n\t\ttd: [ 3, \"\", \"
    \" ],\n\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\n\t\t_default: jQuery.support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X
    \", \"
    \" ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tthis.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tthis.insertBefore( elem, this.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, false, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, false, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {\n\t\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t\t}\n\n\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function( value ) {\n\t\tvar isFunc = jQuery.isFunction( value );\n\n\t\t// Make sure that the elements are removed from the DOM before they are inserted\n\t\t// this can help fix replacing a parent with child elements\n\t\tif ( !isFunc && typeof value !== \"string\" ) {\n\t\t\tvalue = jQuery( value ).not( this ).detach();\n\t\t}\n\n\t\treturn this.domManip( [ value ], true, function( elem ) {\n\t\t\tvar next = this.nextSibling,\n\t\t\t\tparent = this.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tjQuery( this ).remove();\n\t\t\t\tparent.insertBefore( elem, next );\n\t\t\t}\n\t\t});\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, table, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = core_concat.apply( [], args );\n\n\t\tvar first, node, hasScripts,\n\t\t\tscripts, doc, fragment,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction || !( l <= 1 || typeof value !== \"string\" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[0] = value.call( this, index, table ? self.html() : undefined );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, table, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\ttable = table && jQuery.nodeName( first, \"tr\" );\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(\n\t\t\t\t\t\ttable && jQuery.nodeName( this[i], \"table\" ) ?\n\t\t\t\t\t\t\tfindOrAppend( this[i], \"tbody\" ) :\n\t\t\t\t\t\t\tthis[i],\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\ti\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Hope ajax is available...\n\t\t\t\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\t\t\t\turl: node.src,\n\t\t\t\t\t\t\t\t\ttype: \"GET\",\n\t\t\t\t\t\t\t\t\tdataType: \"script\",\n\t\t\t\t\t\t\t\t\tasync: false,\n\t\t\t\t\t\t\t\t\tglobal: false,\n\t\t\t\t\t\t\t\t\t\"throws\": true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\t\tfragment = first = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\nfunction findOrAppend( elem, tag ) {\n\treturn elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\tvar attr = elem.getAttributeNode(\"type\");\n\telem.type = ( attr && attr.specified ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[1];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && manipulation_rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone(true);\n\t\t\tjQuery( insert[i] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tcore_push.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n// Used in buildFragment, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( manipulation_rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar j, elem, contains,\n\t\t\ttmp, tag, tbody, wrap,\n\t\t\tl = elems.length,\n\n\t\t\t// Ensure a safe fragment\n\t\t\tsafe = createSafeFragment( context ),\n\n\t\t\tnodes = [],\n\t\t\ti = 0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1>\" ) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a , *may* have spurious \n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t\t// String was a bare or \n\t\t\t\t\t\t\twrap[1] === \"
    \" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t\t0;\n\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\t\ttmp = safe.lastChild;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from fragment\n\t\tif ( tmp ) {\n\t\t\tsafe.removeChild( tmp );\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t\t}\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttmp = null;\n\n\t\treturn safe;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== core_strundefined ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcore_deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\nvar iframe, getStyles, curCSS,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = { BODY: \"block\" },\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction isHidden( elem, el ) {\n\t// isHidden might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\n\t\t\tif ( !values[ index ] ) {\n\t\t\t\thidden = isHidden( elem );\n\n\t\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\tvar len, styles,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tvar bool = typeof state === \"boolean\";\n\n\t\treturn this.each(function() {\n\t\t\tif ( bool ? state : isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Exclude the following css properties to add px\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !jQuery.support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations\n\tswap: function( elem, options, callback, args ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.apply( elem, args || [] );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\n// NOTE: we've included the \"window\" in window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar width, minWidth, maxWidth,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\n\t\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar left, rs, rsLeft,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\t\t\tret = computed ? computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe ||\n\t\t\t\tjQuery(\"'\n ).bind('load', function () {\n var fileInputClones,\n paramNames = $.isArray(options.paramName) ?\n options.paramName : [options.paramName];\n iframe\n .unbind('load')\n .bind('load', function () {\n var response;\n // Wrap in a try/catch block to catch exceptions thrown\n // when trying to access cross-domain iframe contents:\n try {\n response = iframe.contents();\n // Google Chrome and Firefox do not throw an\n // exception when calling iframe.contents() on\n // cross-domain requests, so we unify the response:\n if (!response.length || !response[0].firstChild) {\n throw new Error();\n }\n } catch (e) {\n response = undefined;\n }\n // The complete callback returns the\n // iframe content document as response object:\n completeCallback(\n 200,\n 'success',\n {'iframe': response}\n );\n // Fix for IE endless progress bar activity bug\n // (happens on form submits to iframe targets):\n $('')\n .appendTo(form);\n window.setTimeout(function () {\n // Removing the form in a setTimeout call\n // allows Chrome's developer tools to display\n // the response result\n form.remove();\n }, 0);\n });\n form\n .prop('target', iframe.prop('name'))\n .prop('action', options.url)\n .prop('method', options.type);\n if (options.formData) {\n $.each(options.formData, function (index, field) {\n $('')\n .prop('name', field.name)\n .val(field.value)\n .appendTo(form);\n });\n }\n if (options.fileInput && options.fileInput.length &&\n options.type === 'POST') {\n fileInputClones = options.fileInput.clone();\n // Insert a clone for each file input field:\n options.fileInput.after(function (index) {\n return fileInputClones[index];\n });\n if (options.paramName) {\n options.fileInput.each(function (index) {\n $(this).prop(\n 'name',\n paramNames[index] || options.paramName\n );\n });\n }\n // Appending the file input fields to the hidden form\n // removes them from their original location:\n form\n .append(options.fileInput)\n .prop('enctype', 'multipart/form-data')\n // enctype must be set as encoding for IE:\n .prop('encoding', 'multipart/form-data');\n // Remove the HTML5 form attribute from the input(s):\n options.fileInput.removeAttr('form');\n }\n form.submit();\n // Insert the file input fields at their original location\n // by replacing the clones with the originals:\n if (fileInputClones && fileInputClones.length) {\n options.fileInput.each(function (index, input) {\n var clone = $(fileInputClones[index]);\n // Restore the original name and form properties:\n $(input)\n .prop('name', clone.prop('name'))\n .attr('form', clone.attr('form'));\n clone.replaceWith(input);\n });\n }\n });\n form.append(iframe).appendTo(document.body);\n },\n abort: function () {\n if (iframe) {\n // javascript:false as iframe src aborts the request\n // and prevents warning popups on HTTPS in IE6.\n // concat is used to avoid the \"Script URL\" JSLint error:\n iframe\n .unbind('load')\n .prop('src', initialIframeSrc);\n }\n if (form) {\n form.remove();\n }\n }\n };\n }\n });\n\n // The iframe transport returns the iframe content document as response.\n // The following adds converters from iframe to text, json, html, xml\n // and script.\n // Please note that the Content-Type for JSON responses has to be text/plain\n // or text/html, if the browser doesn't include application/json in the\n // Accept header, else IE will show a download dialog.\n // The Content-Type for XML responses on the other hand has to be always\n // application/xml or text/xml, so IE properly parses the XML response.\n // See also\n // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation\n $.ajaxSetup({\n converters: {\n 'iframe text': function (iframe) {\n return iframe && $(iframe[0].body).text();\n },\n 'iframe json': function (iframe) {\n return iframe && $.parseJSON($(iframe[0].body).text());\n },\n 'iframe html': function (iframe) {\n return iframe && $(iframe[0].body).html();\n },\n 'iframe xml': function (iframe) {\n var xmlDoc = iframe && iframe[0];\n return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc :\n $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||\n $(xmlDoc.body).html());\n },\n 'iframe script': function (iframe) {\n return iframe && $.globalEval($(iframe[0].body).text());\n }\n }\n });\n\n}));\n","/*\n * jQuery File Upload Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n/* global define, require, window, document, location, Blob, FormData */\n\n;(function (factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n // Register as an anonymous AMD module:\n define([\n 'jquery',\n 'jquery.ui.widget'\n ], factory);\n } else if (typeof exports === 'object') {\n // Node/CommonJS:\n factory(\n require('jquery'),\n require('./vendor/jquery.ui.widget')\n );\n } else {\n // Browser globals:\n factory(window.jQuery);\n }\n}(function ($) {\n 'use strict';\n\n // Detect file input support, based on\n // http://viljamis.com/blog/2012/file-upload-support-on-mobile/\n $.support.fileInput = !(new RegExp(\n // Handle devices which give false positives for the feature detection:\n '(Android (1\\\\.[0156]|2\\\\.[01]))' +\n '|(Windows Phone (OS 7|8\\\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' +\n '|(w(eb)?OSBrowser)|(webOS)' +\n '|(Kindle/(1\\\\.0|2\\\\.[05]|3\\\\.0))'\n ).test(window.navigator.userAgent) ||\n // Feature detection for all other devices:\n $('').prop('disabled'));\n\n // The FileReader API is not actually used, but works as feature detection,\n // as some Safari versions (5?) support XHR file uploads via the FormData API,\n // but not non-multipart XHR file uploads.\n // window.XMLHttpRequestUpload is not available on IE10, so we check for\n // window.ProgressEvent instead to detect XHR2 file upload capability:\n $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader);\n $.support.xhrFormDataFileUpload = !!window.FormData;\n\n // Detect support for Blob slicing (required for chunked uploads):\n $.support.blobSlice = window.Blob && (Blob.prototype.slice ||\n Blob.prototype.webkitSlice || Blob.prototype.mozSlice);\n\n // Helper function to create drag handlers for dragover/dragenter/dragleave:\n function getDragHandler(type) {\n var isDragOver = type === 'dragover';\n return function (e) {\n e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\n var dataTransfer = e.dataTransfer;\n if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 &&\n this._trigger(\n type,\n $.Event(type, {delegatedEvent: e})\n ) !== false) {\n e.preventDefault();\n if (isDragOver) {\n dataTransfer.dropEffect = 'copy';\n }\n }\n };\n }\n\n // The fileupload widget listens for change events on file input fields defined\n // via fileInput setting and paste or drop events of the given dropZone.\n // In addition to the default jQuery Widget methods, the fileupload widget\n // exposes the \"add\" and \"send\" methods, to add or directly send files using\n // the fileupload API.\n // By default, files added via file input selection, paste, drag & drop or\n // \"add\" method are uploaded immediately, but it is possible to override\n // the \"add\" callback option to queue file uploads.\n $.widget('blueimp.fileupload', {\n\n options: {\n // The drop target element(s), by the default the complete document.\n // Set to null to disable drag & drop support:\n dropZone: $(document),\n // The paste target element(s), by the default undefined.\n // Set to a DOM node or jQuery object to enable file pasting:\n pasteZone: undefined,\n // The file input field(s), that are listened to for change events.\n // If undefined, it is set to the file input fields inside\n // of the widget element on plugin initialization.\n // Set to null to disable the change listener.\n fileInput: undefined,\n // By default, the file input field is replaced with a clone after\n // each input field change event. This is required for iframe transport\n // queues and allows change events to be fired for the same file\n // selection, but can be disabled by setting the following option to false:\n replaceFileInput: true,\n // The parameter name for the file form data (the request argument name).\n // If undefined or empty, the name property of the file input field is\n // used, or \"files[]\" if the file input name property is also empty,\n // can be a string or an array of strings:\n paramName: undefined,\n // By default, each file of a selection is uploaded using an individual\n // request for XHR type uploads. Set to false to upload file\n // selections in one request each:\n singleFileUploads: true,\n // To limit the number of files uploaded with one XHR request,\n // set the following option to an integer greater than 0:\n limitMultiFileUploads: undefined,\n // The following option limits the number of files uploaded with one\n // XHR request to keep the request size under or equal to the defined\n // limit in bytes:\n limitMultiFileUploadSize: undefined,\n // Multipart file uploads add a number of bytes to each uploaded file,\n // therefore the following option adds an overhead for each file used\n // in the limitMultiFileUploadSize configuration:\n limitMultiFileUploadSizeOverhead: 512,\n // Set the following option to true to issue all file upload requests\n // in a sequential order:\n sequentialUploads: false,\n // To limit the number of concurrent uploads,\n // set the following option to an integer greater than 0:\n limitConcurrentUploads: undefined,\n // Set the following option to true to force iframe transport uploads:\n forceIframeTransport: false,\n // Set the following option to the location of a redirect url on the\n // origin server, for cross-domain iframe transport uploads:\n redirect: undefined,\n // The parameter name for the redirect url, sent as part of the form\n // data and set to 'redirect' if this option is empty:\n redirectParamName: undefined,\n // Set the following option to the location of a postMessage window,\n // to enable postMessage transport uploads:\n postMessage: undefined,\n // By default, XHR file uploads are sent as multipart/form-data.\n // The iframe transport is always using multipart/form-data.\n // Set to false to enable non-multipart XHR uploads:\n multipart: true,\n // To upload large files in smaller chunks, set the following option\n // to a preferred maximum chunk size. If set to 0, null or undefined,\n // or the browser does not support the required Blob API, files will\n // be uploaded as a whole.\n maxChunkSize: undefined,\n // When a non-multipart upload or a chunked multipart upload has been\n // aborted, this option can be used to resume the upload by setting\n // it to the size of the already uploaded bytes. This option is most\n // useful when modifying the options object inside of the \"add\" or\n // \"send\" callbacks, as the options are cloned for each file upload.\n uploadedBytes: undefined,\n // By default, failed (abort or error) file uploads are removed from the\n // global progress calculation. Set the following option to false to\n // prevent recalculating the global progress data:\n recalculateProgress: true,\n // Interval in milliseconds to calculate and trigger progress events:\n progressInterval: 100,\n // Interval in milliseconds to calculate progress bitrate:\n bitrateInterval: 500,\n // By default, uploads are started automatically when adding files:\n autoUpload: true,\n\n // Error and info messages:\n messages: {\n uploadedBytes: 'Uploaded bytes exceed file size'\n },\n\n // Translation function, gets the message key to be translated\n // and an object with context specific data as arguments:\n i18n: function (message, context) {\n message = this.messages[message] || message.toString();\n if (context) {\n $.each(context, function (key, value) {\n message = message.replace('{' + key + '}', value);\n });\n }\n return message;\n },\n\n // Additional form data to be sent along with the file uploads can be set\n // using this option, which accepts an array of objects with name and\n // value properties, a function returning such an array, a FormData\n // object (for XHR file uploads), or a simple object.\n // The form of the first fileInput is given as parameter to the function:\n formData: function (form) {\n return form.serializeArray();\n },\n\n // The add callback is invoked as soon as files are added to the fileupload\n // widget (via file input selection, drag & drop, paste or add API call).\n // If the singleFileUploads option is enabled, this callback will be\n // called once for each file in the selection for XHR file uploads, else\n // once for each file selection.\n //\n // The upload starts when the submit method is invoked on the data parameter.\n // The data object contains a files property holding the added files\n // and allows you to override plugin options as well as define ajax settings.\n //\n // Listeners for this callback can also be bound the following way:\n // .bind('fileuploadadd', func);\n //\n // data.submit() returns a Promise object and allows to attach additional\n // handlers using jQuery's Deferred callbacks:\n // data.submit().done(func).fail(func).always(func);\n add: function (e, data) {\n if (e.isDefaultPrevented()) {\n return false;\n }\n if (data.autoUpload || (data.autoUpload !== false &&\n $(this).fileupload('option', 'autoUpload'))) {\n data.process().done(function () {\n data.submit();\n });\n }\n },\n\n // Other callbacks:\n\n // Callback for the submit event of each file upload:\n // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);\n\n // Callback for the start of each file upload request:\n // send: function (e, data) {}, // .bind('fileuploadsend', func);\n\n // Callback for successful uploads:\n // done: function (e, data) {}, // .bind('fileuploaddone', func);\n\n // Callback for failed (abort or error) uploads:\n // fail: function (e, data) {}, // .bind('fileuploadfail', func);\n\n // Callback for completed (success, abort or error) requests:\n // always: function (e, data) {}, // .bind('fileuploadalways', func);\n\n // Callback for upload progress events:\n // progress: function (e, data) {}, // .bind('fileuploadprogress', func);\n\n // Callback for global upload progress events:\n // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);\n\n // Callback for uploads start, equivalent to the global ajaxStart event:\n // start: function (e) {}, // .bind('fileuploadstart', func);\n\n // Callback for uploads stop, equivalent to the global ajaxStop event:\n // stop: function (e) {}, // .bind('fileuploadstop', func);\n\n // Callback for change events of the fileInput(s):\n // change: function (e, data) {}, // .bind('fileuploadchange', func);\n\n // Callback for paste events to the pasteZone(s):\n // paste: function (e, data) {}, // .bind('fileuploadpaste', func);\n\n // Callback for drop events of the dropZone(s):\n // drop: function (e, data) {}, // .bind('fileuploaddrop', func);\n\n // Callback for dragover events of the dropZone(s):\n // dragover: function (e) {}, // .bind('fileuploaddragover', func);\n\n // Callback for the start of each chunk upload request:\n // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);\n\n // Callback for successful chunk uploads:\n // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);\n\n // Callback for failed (abort or error) chunk uploads:\n // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);\n\n // Callback for completed (success, abort or error) chunk upload requests:\n // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);\n\n // The plugin options are used as settings object for the ajax calls.\n // The following are jQuery ajax settings required for the file uploads:\n processData: false,\n contentType: false,\n cache: false,\n timeout: 0\n },\n\n // A list of options that require reinitializing event listeners and/or\n // special initialization code:\n _specialOptions: [\n 'fileInput',\n 'dropZone',\n 'pasteZone',\n 'multipart',\n 'forceIframeTransport'\n ],\n\n _blobSlice: $.support.blobSlice && function () {\n var slice = this.slice || this.webkitSlice || this.mozSlice;\n return slice.apply(this, arguments);\n },\n\n _BitrateTimer: function () {\n this.timestamp = ((Date.now) ? Date.now() : (new Date()).getTime());\n this.loaded = 0;\n this.bitrate = 0;\n this.getBitrate = function (now, loaded, interval) {\n var timeDiff = now - this.timestamp;\n if (!this.bitrate || !interval || timeDiff > interval) {\n this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;\n this.loaded = loaded;\n this.timestamp = now;\n }\n return this.bitrate;\n };\n },\n\n _isXHRUpload: function (options) {\n return !options.forceIframeTransport &&\n ((!options.multipart && $.support.xhrFileUpload) ||\n $.support.xhrFormDataFileUpload);\n },\n\n _getFormData: function (options) {\n var formData;\n if ($.type(options.formData) === 'function') {\n return options.formData(options.form);\n }\n if ($.isArray(options.formData)) {\n return options.formData;\n }\n if ($.type(options.formData) === 'object') {\n formData = [];\n $.each(options.formData, function (name, value) {\n formData.push({name: name, value: value});\n });\n return formData;\n }\n return [];\n },\n\n _getTotal: function (files) {\n var total = 0;\n $.each(files, function (index, file) {\n total += file.size || 1;\n });\n return total;\n },\n\n _initProgressObject: function (obj) {\n var progress = {\n loaded: 0,\n total: 0,\n bitrate: 0\n };\n if (obj._progress) {\n $.extend(obj._progress, progress);\n } else {\n obj._progress = progress;\n }\n },\n\n _initResponseObject: function (obj) {\n var prop;\n if (obj._response) {\n for (prop in obj._response) {\n if (obj._response.hasOwnProperty(prop)) {\n delete obj._response[prop];\n }\n }\n } else {\n obj._response = {};\n }\n },\n\n _onProgress: function (e, data) {\n if (e.lengthComputable) {\n var now = ((Date.now) ? Date.now() : (new Date()).getTime()),\n loaded;\n if (data._time && data.progressInterval &&\n (now - data._time < data.progressInterval) &&\n e.loaded !== e.total) {\n return;\n }\n data._time = now;\n loaded = Math.floor(\n e.loaded / e.total * (data.chunkSize || data._progress.total)\n ) + (data.uploadedBytes || 0);\n // Add the difference from the previously loaded state\n // to the global loaded counter:\n this._progress.loaded += (loaded - data._progress.loaded);\n this._progress.bitrate = this._bitrateTimer.getBitrate(\n now,\n this._progress.loaded,\n data.bitrateInterval\n );\n data._progress.loaded = data.loaded = loaded;\n data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(\n now,\n loaded,\n data.bitrateInterval\n );\n // Trigger a custom progress event with a total data property set\n // to the file size(s) of the current upload and a loaded data\n // property calculated accordingly:\n this._trigger(\n 'progress',\n $.Event('progress', {delegatedEvent: e}),\n data\n );\n // Trigger a global progress event for all current file uploads,\n // including ajax calls queued for sequential file uploads:\n this._trigger(\n 'progressall',\n $.Event('progressall', {delegatedEvent: e}),\n this._progress\n );\n }\n },\n\n _initProgressListener: function (options) {\n var that = this,\n xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();\n // Accesss to the native XHR object is required to add event listeners\n // for the upload progress event:\n if (xhr.upload) {\n $(xhr.upload).bind('progress', function (e) {\n var oe = e.originalEvent;\n // Make sure the progress event properties get copied over:\n e.lengthComputable = oe.lengthComputable;\n e.loaded = oe.loaded;\n e.total = oe.total;\n that._onProgress(e, options);\n });\n options.xhr = function () {\n return xhr;\n };\n }\n },\n\n _isInstanceOf: function (type, obj) {\n // Cross-frame instanceof check\n return Object.prototype.toString.call(obj) === '[object ' + type + ']';\n },\n\n _initXHRData: function (options) {\n var that = this,\n formData,\n file = options.files[0],\n // Ignore non-multipart setting if not supported:\n multipart = options.multipart || !$.support.xhrFileUpload,\n paramName = $.type(options.paramName) === 'array' ?\n options.paramName[0] : options.paramName;\n options.headers = $.extend({}, options.headers);\n if (options.contentRange) {\n options.headers['Content-Range'] = options.contentRange;\n }\n if (!multipart || options.blob || !this._isInstanceOf('File', file)) {\n options.headers['Content-Disposition'] = 'attachment; filename=\"' +\n encodeURI(file.name) + '\"';\n }\n if (!multipart) {\n options.contentType = file.type || 'application/octet-stream';\n options.data = options.blob || file;\n } else if ($.support.xhrFormDataFileUpload) {\n if (options.postMessage) {\n // window.postMessage does not allow sending FormData\n // objects, so we just add the File/Blob objects to\n // the formData array and let the postMessage window\n // create the FormData object out of this array:\n formData = this._getFormData(options);\n if (options.blob) {\n formData.push({\n name: paramName,\n value: options.blob\n });\n } else {\n $.each(options.files, function (index, file) {\n formData.push({\n name: ($.type(options.paramName) === 'array' &&\n options.paramName[index]) || paramName,\n value: file\n });\n });\n }\n } else {\n if (that._isInstanceOf('FormData', options.formData)) {\n formData = options.formData;\n } else {\n formData = new FormData();\n $.each(this._getFormData(options), function (index, field) {\n formData.append(field.name, field.value);\n });\n }\n if (options.blob) {\n formData.append(paramName, options.blob, file.name);\n } else {\n $.each(options.files, function (index, file) {\n // This check allows the tests to run with\n // dummy objects:\n if (that._isInstanceOf('File', file) ||\n that._isInstanceOf('Blob', file)) {\n formData.append(\n ($.type(options.paramName) === 'array' &&\n options.paramName[index]) || paramName,\n file,\n file.uploadName || file.name\n );\n }\n });\n }\n }\n options.data = formData;\n }\n // Blob reference is not needed anymore, free memory:\n options.blob = null;\n },\n\n _initIframeSettings: function (options) {\n var targetHost = $('').prop('href', options.url).prop('host');\n // Setting the dataType to iframe enables the iframe transport:\n options.dataType = 'iframe ' + (options.dataType || '');\n // The iframe transport accepts a serialized array as form data:\n options.formData = this._getFormData(options);\n // Add redirect url to form data on cross-domain uploads:\n if (options.redirect && targetHost && targetHost !== location.host) {\n options.formData.push({\n name: options.redirectParamName || 'redirect',\n value: options.redirect\n });\n }\n },\n\n _initDataSettings: function (options) {\n if (this._isXHRUpload(options)) {\n if (!this._chunkedUpload(options, true)) {\n if (!options.data) {\n this._initXHRData(options);\n }\n this._initProgressListener(options);\n }\n if (options.postMessage) {\n // Setting the dataType to postmessage enables the\n // postMessage transport:\n options.dataType = 'postmessage ' + (options.dataType || '');\n }\n } else {\n this._initIframeSettings(options);\n }\n },\n\n _getParamName: function (options) {\n var fileInput = $(options.fileInput),\n paramName = options.paramName;\n if (!paramName) {\n paramName = [];\n fileInput.each(function () {\n var input = $(this),\n name = input.prop('name') || 'files[]',\n i = (input.prop('files') || [1]).length;\n while (i) {\n paramName.push(name);\n i -= 1;\n }\n });\n if (!paramName.length) {\n paramName = [fileInput.prop('name') || 'files[]'];\n }\n } else if (!$.isArray(paramName)) {\n paramName = [paramName];\n }\n return paramName;\n },\n\n _initFormSettings: function (options) {\n // Retrieve missing options from the input field and the\n // associated form, if available:\n if (!options.form || !options.form.length) {\n options.form = $(options.fileInput.prop('form'));\n // If the given file input doesn't have an associated form,\n // use the default widget file input's form:\n if (!options.form.length) {\n options.form = $(this.options.fileInput.prop('form'));\n }\n }\n options.paramName = this._getParamName(options);\n if (!options.url) {\n options.url = options.form.prop('action') || location.href;\n }\n // The HTTP request method must be \"POST\" or \"PUT\":\n options.type = (options.type ||\n ($.type(options.form.prop('method')) === 'string' &&\n options.form.prop('method')) || ''\n ).toUpperCase();\n if (options.type !== 'POST' && options.type !== 'PUT' &&\n options.type !== 'PATCH') {\n options.type = 'POST';\n }\n if (!options.formAcceptCharset) {\n options.formAcceptCharset = options.form.attr('accept-charset');\n }\n },\n\n _getAJAXSettings: function (data) {\n var options = $.extend({}, this.options, data);\n this._initFormSettings(options);\n this._initDataSettings(options);\n return options;\n },\n\n // jQuery 1.6 doesn't provide .state(),\n // while jQuery 1.8+ removed .isRejected() and .isResolved():\n _getDeferredState: function (deferred) {\n if (deferred.state) {\n return deferred.state();\n }\n if (deferred.isResolved()) {\n return 'resolved';\n }\n if (deferred.isRejected()) {\n return 'rejected';\n }\n return 'pending';\n },\n\n // Maps jqXHR callbacks to the equivalent\n // methods of the given Promise object:\n _enhancePromise: function (promise) {\n promise.success = promise.done;\n promise.error = promise.fail;\n promise.complete = promise.always;\n return promise;\n },\n\n // Creates and returns a Promise object enhanced with\n // the jqXHR methods abort, success, error and complete:\n _getXHRPromise: function (resolveOrReject, context, args) {\n var dfd = $.Deferred(),\n promise = dfd.promise();\n context = context || this.options.context || promise;\n if (resolveOrReject === true) {\n dfd.resolveWith(context, args);\n } else if (resolveOrReject === false) {\n dfd.rejectWith(context, args);\n }\n promise.abort = dfd.promise;\n return this._enhancePromise(promise);\n },\n\n // Adds convenience methods to the data callback argument:\n _addConvenienceMethods: function (e, data) {\n var that = this,\n getPromise = function (args) {\n return $.Deferred().resolveWith(that, args).promise();\n };\n data.process = function (resolveFunc, rejectFunc) {\n if (resolveFunc || rejectFunc) {\n data._processQueue = this._processQueue =\n (this._processQueue || getPromise([this])).then(\n function () {\n if (data.errorThrown) {\n return $.Deferred()\n .rejectWith(that, [data]).promise();\n }\n return getPromise(arguments);\n }\n ).then(resolveFunc, rejectFunc);\n }\n return this._processQueue || getPromise([this]);\n };\n data.submit = function () {\n if (this.state() !== 'pending') {\n data.jqXHR = this.jqXHR =\n (that._trigger(\n 'submit',\n $.Event('submit', {delegatedEvent: e}),\n this\n ) !== false) && that._onSend(e, this);\n }\n return this.jqXHR || that._getXHRPromise();\n };\n data.abort = function () {\n if (this.jqXHR) {\n return this.jqXHR.abort();\n }\n this.errorThrown = 'abort';\n that._trigger('fail', null, this);\n return that._getXHRPromise(false);\n };\n data.state = function () {\n if (this.jqXHR) {\n return that._getDeferredState(this.jqXHR);\n }\n if (this._processQueue) {\n return that._getDeferredState(this._processQueue);\n }\n };\n data.processing = function () {\n return !this.jqXHR && this._processQueue && that\n ._getDeferredState(this._processQueue) === 'pending';\n };\n data.progress = function () {\n return this._progress;\n };\n data.response = function () {\n return this._response;\n };\n },\n\n // Parses the Range header from the server response\n // and returns the uploaded bytes:\n _getUploadedBytes: function (jqXHR) {\n var range = jqXHR.getResponseHeader('Range'),\n parts = range && range.split('-'),\n upperBytesPos = parts && parts.length > 1 &&\n parseInt(parts[1], 10);\n return upperBytesPos && upperBytesPos + 1;\n },\n\n // Uploads a file in multiple, sequential requests\n // by splitting the file up in multiple blob chunks.\n // If the second parameter is true, only tests if the file\n // should be uploaded in chunks, but does not invoke any\n // upload requests:\n _chunkedUpload: function (options, testOnly) {\n options.uploadedBytes = options.uploadedBytes || 0;\n var that = this,\n file = options.files[0],\n fs = file.size,\n ub = options.uploadedBytes,\n mcs = options.maxChunkSize || fs,\n slice = this._blobSlice,\n dfd = $.Deferred(),\n promise = dfd.promise(),\n jqXHR,\n upload;\n if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||\n options.data) {\n return false;\n }\n if (testOnly) {\n return true;\n }\n if (ub >= fs) {\n file.error = options.i18n('uploadedBytes');\n return this._getXHRPromise(\n false,\n options.context,\n [null, 'error', file.error]\n );\n }\n // The chunk upload method:\n upload = function () {\n // Clone the options object for each chunk upload:\n var o = $.extend({}, options),\n currentLoaded = o._progress.loaded;\n o.blob = slice.call(\n file,\n ub,\n ub + mcs,\n file.type\n );\n // Store the current chunk size, as the blob itself\n // will be dereferenced after data processing:\n o.chunkSize = o.blob.size;\n // Expose the chunk bytes position range:\n o.contentRange = 'bytes ' + ub + '-' +\n (ub + o.chunkSize - 1) + '/' + fs;\n // Process the upload data (the blob and potential form data):\n that._initXHRData(o);\n // Add progress listeners for this chunk upload:\n that._initProgressListener(o);\n jqXHR = ((that._trigger('chunksend', null, o) !== false && $.ajax(o)) ||\n that._getXHRPromise(false, o.context))\n .done(function (result, textStatus, jqXHR) {\n ub = that._getUploadedBytes(jqXHR) ||\n (ub + o.chunkSize);\n // Create a progress event if no final progress event\n // with loaded equaling total has been triggered\n // for this chunk:\n if (currentLoaded + o.chunkSize - o._progress.loaded) {\n that._onProgress($.Event('progress', {\n lengthComputable: true,\n loaded: ub - o.uploadedBytes,\n total: ub - o.uploadedBytes\n }), o);\n }\n options.uploadedBytes = o.uploadedBytes = ub;\n o.result = result;\n o.textStatus = textStatus;\n o.jqXHR = jqXHR;\n that._trigger('chunkdone', null, o);\n that._trigger('chunkalways', null, o);\n if (ub < fs) {\n // File upload not yet complete,\n // continue with the next chunk:\n upload();\n } else {\n dfd.resolveWith(\n o.context,\n [result, textStatus, jqXHR]\n );\n }\n })\n .fail(function (jqXHR, textStatus, errorThrown) {\n o.jqXHR = jqXHR;\n o.textStatus = textStatus;\n o.errorThrown = errorThrown;\n that._trigger('chunkfail', null, o);\n that._trigger('chunkalways', null, o);\n dfd.rejectWith(\n o.context,\n [jqXHR, textStatus, errorThrown]\n );\n });\n };\n this._enhancePromise(promise);\n promise.abort = function () {\n return jqXHR.abort();\n };\n upload();\n return promise;\n },\n\n _beforeSend: function (e, data) {\n if (this._active === 0) {\n // the start callback is triggered when an upload starts\n // and no other uploads are currently running,\n // equivalent to the global ajaxStart event:\n this._trigger('start');\n // Set timer for global bitrate progress calculation:\n this._bitrateTimer = new this._BitrateTimer();\n // Reset the global progress values:\n this._progress.loaded = this._progress.total = 0;\n this._progress.bitrate = 0;\n }\n // Make sure the container objects for the .response() and\n // .progress() methods on the data object are available\n // and reset to their initial state:\n this._initResponseObject(data);\n this._initProgressObject(data);\n data._progress.loaded = data.loaded = data.uploadedBytes || 0;\n data._progress.total = data.total = this._getTotal(data.files) || 1;\n data._progress.bitrate = data.bitrate = 0;\n this._active += 1;\n // Initialize the global progress values:\n this._progress.loaded += data.loaded;\n this._progress.total += data.total;\n },\n\n _onDone: function (result, textStatus, jqXHR, options) {\n var total = options._progress.total,\n response = options._response;\n if (options._progress.loaded < total) {\n // Create a progress event if no final progress event\n // with loaded equaling total has been triggered:\n this._onProgress($.Event('progress', {\n lengthComputable: true,\n loaded: total,\n total: total\n }), options);\n }\n response.result = options.result = result;\n response.textStatus = options.textStatus = textStatus;\n response.jqXHR = options.jqXHR = jqXHR;\n this._trigger('done', null, options);\n },\n\n _onFail: function (jqXHR, textStatus, errorThrown, options) {\n var response = options._response;\n if (options.recalculateProgress) {\n // Remove the failed (error or abort) file upload from\n // the global progress calculation:\n this._progress.loaded -= options._progress.loaded;\n this._progress.total -= options._progress.total;\n }\n response.jqXHR = options.jqXHR = jqXHR;\n response.textStatus = options.textStatus = textStatus;\n response.errorThrown = options.errorThrown = errorThrown;\n this._trigger('fail', null, options);\n },\n\n _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {\n // jqXHRorResult, textStatus and jqXHRorError are added to the\n // options object via done and fail callbacks\n this._trigger('always', null, options);\n },\n\n _onSend: function (e, data) {\n if (!data.submit) {\n this._addConvenienceMethods(e, data);\n }\n var that = this,\n jqXHR,\n aborted,\n slot,\n pipe,\n options = that._getAJAXSettings(data),\n send = function () {\n that._sending += 1;\n // Set timer for bitrate progress calculation:\n options._bitrateTimer = new that._BitrateTimer();\n jqXHR = jqXHR || (\n ((aborted || that._trigger(\n 'send',\n $.Event('send', {delegatedEvent: e}),\n options\n ) === false) &&\n that._getXHRPromise(false, options.context, aborted)) ||\n that._chunkedUpload(options) || $.ajax(options)\n ).done(function (result, textStatus, jqXHR) {\n that._onDone(result, textStatus, jqXHR, options);\n }).fail(function (jqXHR, textStatus, errorThrown) {\n that._onFail(jqXHR, textStatus, errorThrown, options);\n }).always(function (jqXHRorResult, textStatus, jqXHRorError) {\n that._onAlways(\n jqXHRorResult,\n textStatus,\n jqXHRorError,\n options\n );\n that._sending -= 1;\n that._active -= 1;\n if (options.limitConcurrentUploads &&\n options.limitConcurrentUploads > that._sending) {\n // Start the next queued upload,\n // that has not been aborted:\n var nextSlot = that._slots.shift();\n while (nextSlot) {\n if (that._getDeferredState(nextSlot) === 'pending') {\n nextSlot.resolve();\n break;\n }\n nextSlot = that._slots.shift();\n }\n }\n if (that._active === 0) {\n // The stop callback is triggered when all uploads have\n // been completed, equivalent to the global ajaxStop event:\n that._trigger('stop');\n }\n });\n return jqXHR;\n };\n this._beforeSend(e, options);\n if (this.options.sequentialUploads ||\n (this.options.limitConcurrentUploads &&\n this.options.limitConcurrentUploads <= this._sending)) {\n if (this.options.limitConcurrentUploads > 1) {\n slot = $.Deferred();\n this._slots.push(slot);\n pipe = slot.then(send);\n } else {\n this._sequence = this._sequence.then(send, send);\n pipe = this._sequence;\n }\n // Return the piped Promise object, enhanced with an abort method,\n // which is delegated to the jqXHR object of the current upload,\n // and jqXHR callbacks mapped to the equivalent Promise methods:\n pipe.abort = function () {\n aborted = [undefined, 'abort', 'abort'];\n if (!jqXHR) {\n if (slot) {\n slot.rejectWith(options.context, aborted);\n }\n return send();\n }\n return jqXHR.abort();\n };\n return this._enhancePromise(pipe);\n }\n return send();\n },\n\n _onAdd: function (e, data) {\n var that = this,\n result = true,\n options = $.extend({}, this.options, data),\n files = data.files,\n filesLength = files.length,\n limit = options.limitMultiFileUploads,\n limitSize = options.limitMultiFileUploadSize,\n overhead = options.limitMultiFileUploadSizeOverhead,\n batchSize = 0,\n paramName = this._getParamName(options),\n paramNameSet,\n paramNameSlice,\n fileSet,\n i,\n j = 0;\n if (!filesLength) {\n return false;\n }\n if (limitSize && files[0].size === undefined) {\n limitSize = undefined;\n }\n if (!(options.singleFileUploads || limit || limitSize) ||\n !this._isXHRUpload(options)) {\n fileSet = [files];\n paramNameSet = [paramName];\n } else if (!(options.singleFileUploads || limitSize) && limit) {\n fileSet = [];\n paramNameSet = [];\n for (i = 0; i < filesLength; i += limit) {\n fileSet.push(files.slice(i, i + limit));\n paramNameSlice = paramName.slice(i, i + limit);\n if (!paramNameSlice.length) {\n paramNameSlice = paramName;\n }\n paramNameSet.push(paramNameSlice);\n }\n } else if (!options.singleFileUploads && limitSize) {\n fileSet = [];\n paramNameSet = [];\n for (i = 0; i < filesLength; i = i + 1) {\n batchSize += files[i].size + overhead;\n if (i + 1 === filesLength ||\n ((batchSize + files[i + 1].size + overhead) > limitSize) ||\n (limit && i + 1 - j >= limit)) {\n fileSet.push(files.slice(j, i + 1));\n paramNameSlice = paramName.slice(j, i + 1);\n if (!paramNameSlice.length) {\n paramNameSlice = paramName;\n }\n paramNameSet.push(paramNameSlice);\n j = i + 1;\n batchSize = 0;\n }\n }\n } else {\n paramNameSet = paramName;\n }\n data.originalFiles = files;\n $.each(fileSet || files, function (index, element) {\n var newData = $.extend({}, data);\n newData.files = fileSet ? element : [element];\n newData.paramName = paramNameSet[index];\n that._initResponseObject(newData);\n that._initProgressObject(newData);\n that._addConvenienceMethods(e, newData);\n result = that._trigger(\n 'add',\n $.Event('add', {delegatedEvent: e}),\n newData\n );\n return result;\n });\n return result;\n },\n\n _replaceFileInput: function (data) {\n var input = data.fileInput,\n inputClone = input.clone(true),\n restoreFocus = input.is(document.activeElement);\n // Add a reference for the new cloned file input to the data argument:\n data.fileInputClone = inputClone;\n $('').append(inputClone)[0].reset();\n // Detaching allows to insert the fileInput on another form\n // without loosing the file input value:\n input.after(inputClone).detach();\n // If the fileInput had focus before it was detached,\n // restore focus to the inputClone.\n if (restoreFocus) {\n inputClone.focus();\n }\n // Avoid memory leaks with the detached file input:\n $.cleanData(input.unbind('remove'));\n // Replace the original file input element in the fileInput\n // elements set with the clone, which has been copied including\n // event handlers:\n this.options.fileInput = this.options.fileInput.map(function (i, el) {\n if (el === input[0]) {\n return inputClone[0];\n }\n return el;\n });\n // If the widget has been initialized on the file input itself,\n // override this.element with the file input clone:\n if (input[0] === this.element[0]) {\n this.element = inputClone;\n }\n },\n\n _handleFileTreeEntry: function (entry, path) {\n var that = this,\n dfd = $.Deferred(),\n errorHandler = function (e) {\n if (e && !e.entry) {\n e.entry = entry;\n }\n // Since $.when returns immediately if one\n // Deferred is rejected, we use resolve instead.\n // This allows valid files and invalid items\n // to be returned together in one set:\n dfd.resolve([e]);\n },\n successHandler = function (entries) {\n that._handleFileTreeEntries(\n entries,\n path + entry.name + '/'\n ).done(function (files) {\n dfd.resolve(files);\n }).fail(errorHandler);\n },\n readEntries = function () {\n dirReader.readEntries(function (results) {\n if (!results.length) {\n successHandler(entries);\n } else {\n entries = entries.concat(results);\n readEntries();\n }\n }, errorHandler);\n },\n dirReader, entries = [];\n path = path || '';\n if (entry.isFile) {\n if (entry._file) {\n // Workaround for Chrome bug #149735\n entry._file.relativePath = path;\n dfd.resolve(entry._file);\n } else {\n entry.file(function (file) {\n file.relativePath = path;\n dfd.resolve(file);\n }, errorHandler);\n }\n } else if (entry.isDirectory) {\n dirReader = entry.createReader();\n readEntries();\n } else {\n // Return an empy list for file system items\n // other than files or directories:\n dfd.resolve([]);\n }\n return dfd.promise();\n },\n\n _handleFileTreeEntries: function (entries, path) {\n var that = this;\n return $.when.apply(\n $,\n $.map(entries, function (entry) {\n return that._handleFileTreeEntry(entry, path);\n })\n ).then(function () {\n return Array.prototype.concat.apply(\n [],\n arguments\n );\n });\n },\n\n _getDroppedFiles: function (dataTransfer) {\n dataTransfer = dataTransfer || {};\n var items = dataTransfer.items;\n if (items && items.length && (items[0].webkitGetAsEntry ||\n items[0].getAsEntry)) {\n return this._handleFileTreeEntries(\n $.map(items, function (item) {\n var entry;\n if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n if (entry) {\n // Workaround for Chrome bug #149735:\n entry._file = item.getAsFile();\n }\n return entry;\n }\n return item.getAsEntry();\n })\n );\n }\n return $.Deferred().resolve(\n $.makeArray(dataTransfer.files)\n ).promise();\n },\n\n _getSingleFileInputFiles: function (fileInput) {\n fileInput = $(fileInput);\n var entries = fileInput.prop('webkitEntries') ||\n fileInput.prop('entries'),\n files,\n value;\n if (entries && entries.length) {\n return this._handleFileTreeEntries(entries);\n }\n files = $.makeArray(fileInput.prop('files'));\n if (!files.length) {\n value = fileInput.prop('value');\n if (!value) {\n return $.Deferred().resolve([]).promise();\n }\n // If the files property is not available, the browser does not\n // support the File API and we add a pseudo File object with\n // the input value as name with path information removed:\n files = [{name: value.replace(/^.*\\\\/, '')}];\n } else if (files[0].name === undefined && files[0].fileName) {\n // File normalization for Safari 4 and Firefox 3:\n $.each(files, function (index, file) {\n file.name = file.fileName;\n file.size = file.fileSize;\n });\n }\n return $.Deferred().resolve(files).promise();\n },\n\n _getFileInputFiles: function (fileInput) {\n if (!(fileInput instanceof $) || fileInput.length === 1) {\n return this._getSingleFileInputFiles(fileInput);\n }\n return $.when.apply(\n $,\n $.map(fileInput, this._getSingleFileInputFiles)\n ).then(function () {\n return Array.prototype.concat.apply(\n [],\n arguments\n );\n });\n },\n\n _onChange: function (e) {\n var that = this,\n data = {\n fileInput: $(e.target),\n form: $(e.target.form)\n };\n this._getFileInputFiles(data.fileInput).always(function (files) {\n data.files = files;\n if (that.options.replaceFileInput) {\n that._replaceFileInput(data);\n }\n if (that._trigger(\n 'change',\n $.Event('change', {delegatedEvent: e}),\n data\n ) !== false) {\n that._onAdd(e, data);\n }\n });\n },\n\n _onPaste: function (e) {\n var items = e.originalEvent && e.originalEvent.clipboardData &&\n e.originalEvent.clipboardData.items,\n data = {files: []};\n if (items && items.length) {\n $.each(items, function (index, item) {\n var file = item.getAsFile && item.getAsFile();\n if (file) {\n data.files.push(file);\n }\n });\n if (this._trigger(\n 'paste',\n $.Event('paste', {delegatedEvent: e}),\n data\n ) !== false) {\n this._onAdd(e, data);\n }\n }\n },\n\n _onDrop: function (e) {\n e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\n var that = this,\n dataTransfer = e.dataTransfer,\n data = {};\n if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n e.preventDefault();\n this._getDroppedFiles(dataTransfer).always(function (files) {\n data.files = files;\n if (that._trigger(\n 'drop',\n $.Event('drop', {delegatedEvent: e}),\n data\n ) !== false) {\n that._onAdd(e, data);\n }\n });\n }\n },\n\n _onDragOver: getDragHandler('dragover'),\n\n _onDragEnter: getDragHandler('dragenter'),\n\n _onDragLeave: getDragHandler('dragleave'),\n\n _initEventHandlers: function () {\n if (this._isXHRUpload(this.options)) {\n this._on(this.options.dropZone, {\n dragover: this._onDragOver,\n drop: this._onDrop,\n // event.preventDefault() on dragenter is required for IE10+:\n dragenter: this._onDragEnter,\n // dragleave is not required, but added for completeness:\n dragleave: this._onDragLeave\n });\n this._on(this.options.pasteZone, {\n paste: this._onPaste\n });\n }\n if ($.support.fileInput) {\n this._on(this.options.fileInput, {\n change: this._onChange\n });\n }\n },\n\n _destroyEventHandlers: function () {\n this._off(this.options.dropZone, 'dragenter dragleave dragover drop');\n this._off(this.options.pasteZone, 'paste');\n this._off(this.options.fileInput, 'change');\n },\n\n _setOption: function (key, value) {\n var reinit = $.inArray(key, this._specialOptions) !== -1;\n if (reinit) {\n this._destroyEventHandlers();\n }\n this._super(key, value);\n if (reinit) {\n this._initSpecialOptions();\n this._initEventHandlers();\n }\n },\n\n _initSpecialOptions: function () {\n var options = this.options;\n if (options.fileInput === undefined) {\n options.fileInput = this.element.is('input[type=\"file\"]') ?\n this.element : this.element.find('input[type=\"file\"]');\n } else if (!(options.fileInput instanceof $)) {\n options.fileInput = $(options.fileInput);\n }\n if (!(options.dropZone instanceof $)) {\n options.dropZone = $(options.dropZone);\n }\n if (!(options.pasteZone instanceof $)) {\n options.pasteZone = $(options.pasteZone);\n }\n },\n\n _getRegExp: function (str) {\n var parts = str.split('/'),\n modifiers = parts.pop();\n parts.shift();\n return new RegExp(parts.join('/'), modifiers);\n },\n\n _isRegExpOption: function (key, value) {\n return key !== 'url' && $.type(value) === 'string' &&\n /^\\/.*\\/[igm]{0,3}$/.test(value);\n },\n\n _initDataAttributes: function () {\n var that = this,\n options = this.options,\n data = this.element.data();\n // Initialize options set via HTML5 data-attributes:\n $.each(\n this.element[0].attributes,\n function (index, attr) {\n var key = attr.name.toLowerCase(),\n value;\n if (/^data-/.test(key)) {\n // Convert hyphen-ated key to camelCase:\n key = key.slice(5).replace(/-[a-z]/g, function (str) {\n return str.charAt(1).toUpperCase();\n });\n value = data[key];\n if (that._isRegExpOption(key, value)) {\n value = that._getRegExp(value);\n }\n options[key] = value;\n }\n }\n );\n },\n\n _create: function () {\n this._initDataAttributes();\n this._initSpecialOptions();\n this._slots = [];\n this._sequence = this._getXHRPromise(true);\n this._sending = this._active = 0;\n this._initProgressObject(this);\n this._initEventHandlers();\n },\n\n // This method is exposed to the widget API and allows to query\n // the number of active uploads:\n active: function () {\n return this._active;\n },\n\n // This method is exposed to the widget API and allows to query\n // the widget upload progress.\n // It returns an object with loaded, total and bitrate properties\n // for the running uploads:\n progress: function () {\n return this._progress;\n },\n\n // This method is exposed to the widget API and allows adding files\n // using the fileupload API. The data parameter accepts an object which\n // must have a files property and can contain additional options:\n // .fileupload('add', {files: filesList});\n add: function (data) {\n var that = this;\n if (!data || this.options.disabled) {\n return;\n }\n if (data.fileInput && !data.files) {\n this._getFileInputFiles(data.fileInput).always(function (files) {\n data.files = files;\n that._onAdd(null, data);\n });\n } else {\n data.files = $.makeArray(data.files);\n this._onAdd(null, data);\n }\n },\n\n // This method is exposed to the widget API and allows sending files\n // using the fileupload API. The data parameter accepts an object which\n // must have a files or fileInput property and can contain additional options:\n // .fileupload('send', {files: filesList});\n // The method returns a Promise object for the file upload call.\n send: function (data) {\n if (data && !this.options.disabled) {\n if (data.fileInput && !data.files) {\n var that = this,\n dfd = $.Deferred(),\n promise = dfd.promise(),\n jqXHR,\n aborted;\n promise.abort = function () {\n aborted = true;\n if (jqXHR) {\n return jqXHR.abort();\n }\n dfd.reject(null, 'abort', 'abort');\n return promise;\n };\n this._getFileInputFiles(data.fileInput).always(\n function (files) {\n if (aborted) {\n return;\n }\n if (!files.length) {\n dfd.reject();\n return;\n }\n data.files = files;\n jqXHR = that._onSend(null, data);\n jqXHR.then(\n function (result, textStatus, jqXHR) {\n dfd.resolve(result, textStatus, jqXHR);\n },\n function (jqXHR, textStatus, errorThrown) {\n dfd.reject(jqXHR, textStatus, errorThrown);\n }\n );\n }\n );\n return this._enhancePromise(promise);\n }\n data.files = $.makeArray(data.files);\n if (data.files.length) {\n return this._onSend(null, data);\n }\n }\n return this._getXHRPromise(false, data && data.context);\n }\n\n });\n\n}));\n","var Collejo = Collejo || {\n settings: {\n alertInClass: 'bounceInDown',\n alertOutClass: 'fadeOutUp'\n },\n lang: {},\n templates: {},\n form: {},\n link: {},\n modal: {},\n dynamics: {},\n browser: {},\n components: {},\n image: {},\n ready: {\n push: function(callback, recall) {\n C.f.push({\n callback: callback,\n recall: recall === true ? true : false\n })\n },\n call: function(ns) {\n $.each(C.f, function(i, func) {\n func.callback(ns);\n })\n },\n recall: function(ns) {\n $.each(C.f, function(i, func) {\n if (func.recall) {\n func.callback(ns);\n }\n })\n }\n }\n};\n\njQuery.events = function(expr) {\n var rez = [],\n evo;\n jQuery(expr).each(\n function() {\n if (evo = jQuery._data(this, \"events\"))\n rez.push({\n element: this,\n events: evo\n });\n });\n return rez.length > 0 ? rez : null;\n}\n\n$(function() {\n Collejo.ready.call($(document));\n});","// Opera 8.0+\nCollejo.browser.isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;\n// Firefox 1.0+\nCollejo.browser.isFirefox = typeof InstallTrigger !== 'undefined';\n// At least Safari 3+: \"[object HTMLElementConstructor]\"\nCollejo.browser.isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;\n// Internet Explorer 6-11\nCollejo.browser.isIE = /*@cc_on!@*/ false || !!document.documentMode;\n// Edge 20+\nCollejo.browser.isEdge = !Collejo.browser.isIE && !!window.StyleMedia;\n// Chrome 1+\nCollejo.browser.isChrome = !!window.chrome && !!window.chrome.webstore;\n// Blink engine detection\nCollejo.browser.isBlink = (Collejo.browser.isChrome || Collejo.browser.isOpera) && !!window.CSS;","Collejo.templates.spinnerTemplate = function() {\n return $('');\n}\n\nCollejo.templates.alertTemplate = function(type, message, duration) {\n return $('
    ' +\n (duration !== false ? '' : '') + message + '
    ');\n}\n\nCollejo.templates.alertWrap = function() {\n return $('
    ');\n}\n\nCollejo.templates.alertContainer = function() {\n return $('
    ');\n}\n\nCollejo.templates.ajaxLoader = function() {\n return $('
    ');\n}\n\nCollejo.templates.dateTimePickerIcons = function() {\n return {\n time: 'fa fa-clock-o',\n date: 'fa fa-calendar',\n up: 'fa fa-chevron-up',\n down: 'fa fa-chevron-down',\n previous: 'fa fa-chevron-left',\n next: 'fa fa-chevron-right',\n today: 'fa fa-calendar-check-o',\n clear: 'fa fa-trash-o',\n close: 'fa fa-close'\n }\n}","$.ajaxSetup({\n headers: {\n 'X-CSRF-Token': $('meta[name=\"token\"]').attr('content'),\n 'X-User-Time': new Date()\n }\n});\n\nCollejo.ajaxComplete = function(event, xhr, settings) {\n\n var code, status, timeout, response = 0;\n\n try {\n response = $.parseJSON(xhr.responseText);\n } catch (e) {\n console.log(e)\n }\n\n status = (response == 0) ? xhr.status : response;\n\n if (status == 403 || status == 401) {\n Collejo.alert('danger', Collejo.lang.ajax_unauthorize, 3000);\n $('.modal,.modal-backdrop').remove();\n\n window.location = settings.url;\n }\n\n if (status == 400) {\n Collejo.alert('warning', response.message, false);\n $('.modal,.modal-backdrop').remove();\n }\n\n if (status != 0 && status != null) {\n var code = status.code != undefined ? status.code : 0;\n if (code == 0) {\n if (response.data != undefined && response.data.partial != undefined) {\n var target = response.data.target ? response.data.target : 'ajax-target';\n\n var target = $('#' + target);\n var partial = $(response.data.partial);\n\n Collejo.dynamics.prependRow(partial, target);\n\n Collejo.ready.recall(partial);\n }\n\n if (response.data != undefined && response.data.redir != undefined) {\n if (response.message != null) {\n Collejo.alert(response.success ? 'success' : 'warning', response.message + '. redirecting…', 1000);\n timeout = 0;\n }\n setTimeout(function() {\n window.location = response.data.redir;\n }, timeout);\n }\n\n if (response.message != undefined && response.message != null && response.message.length > 0 && response.data.redir == undefined) {\n Collejo.alert(response.success ? 'success' : 'warning', response.message, 3000);\n }\n\n if (response.data != undefined && response.data.errors != undefined) {\n var msg = '' + Collejo.lang.validation_failed + ' ' + Collejo.lang.validation_correct + '
    ';\n $.each(response.data.errors, function(field, err) {\n $.each(err, function(i, e) {\n msg = msg + e + '
    ';\n });\n });\n\n Collejo.alert('warning', msg, 5000);\n }\n }\n }\n\n $(window).resize();\n}\n\n$(document).ajaxComplete(Collejo.ajaxComplete);","Collejo.image.lazyLoad = function(img) {\r\n img.hide();\r\n img.each(function(i) {\r\n if (this.complete) {\r\n $(this).fadeIn();\r\n } else {\r\n $(this).load(function() {\r\n $(this).fadeIn(500);\r\n });\r\n }\r\n });\r\n}\r\n\r\nCollejo.ready.push(function(scope) {\r\n Collejo.image.lazyLoad($(scope).find('img.img-lazy'));\r\n});","$.fn.datetimepicker.defaults.icons = Collejo.templates.dateTimePickerIcons();\n\nCollejo.ready.push(function(scope) {\n $(scope).find('[data-toggle=\"date-input\"]').datetimepicker({\n format: 'YYYY-MM-DD'\n });\n}, true);\n\nCollejo.ready.push(function(scope) {\n $(scope).find('[data-toggle=\"time-input\"]').datetimepicker({\n format: 'HH:i:s'\n });\n}, true);\n\nCollejo.ready.push(function(scope) {\n $(scope).find('[data-toggle=\"date-time-input\"]').datetimepicker({\n format: 'YYYY-MM-DD HH:i:s'\n });\n}, true);","Selectize.define('allow-clear', function(options) {\r\n var that = this;\r\n var html = $('');\r\n\r\n this.setup = (function() {\r\n var original = that.setup;\r\n\r\n return function() {\r\n\r\n original.apply(this, arguments);\r\n if (this.getValue() == '') {\r\n html.addClass('disabled');\r\n }\r\n this.$wrapper.append(html);\r\n\r\n this.$wrapper.on('click', '.clear-selection', function(e) {\r\n e.preventDefault();\r\n if (that.isLocked) return;\r\n that.clear();\r\n that.$control_input.focus();\r\n });\r\n\r\n this.on('change', function(value) {\r\n if (value == '') {\r\n this.$wrapper.find('.clear-selection').addClass('disabled');\r\n } else {\r\n this.$wrapper.find('.clear-selection').removeClass('disabled');\r\n }\r\n });\r\n };\r\n })();\r\n});\r\n\r\nCollejo.ready.push(function(scope) {\r\n\r\n Collejo.components.dropDown($(scope).find('[data-toggle=\"select-dropdown\"]'));\r\n\r\n Collejo.components.searchDropDown($(scope).find('[data-toggle=\"search-dropdown\"]'));\r\n\r\n}, true);\r\n\r\nCollejo.components.dropDown = function(el) {\r\n el.each(function() {\r\n var element = $(this);\r\n\r\n if (element.data('toggle') == null) {\r\n element.data('toggle', 'select-dropdown');\r\n }\r\n\r\n var plugins = [];\r\n\r\n if (element.data('allow-clear') == true) {\r\n plugins.push('allow-clear');\r\n }\r\n\r\n element.selectize({\r\n placeholder: Collejo.lang.select,\r\n plugins: plugins\r\n });\r\n\r\n var selectize = element[0].selectize;\r\n\r\n selectize.on('change', function() {\r\n element.valid();\r\n });\r\n });\r\n\r\n if (el.length == 1) {\r\n var selectize = el[0].selectize;\r\n return selectize;\r\n }\r\n}\r\n\r\nCollejo.components.searchDropDown = function(el) {\r\n el.each(function() {\r\n var element = $(this);\r\n\r\n if (element.data('toggle') == null) {\r\n element.data('toggle', 'search-dropdown');\r\n }\r\n\r\n var plugins = [];\r\n\r\n if (element.data('allow-clear') == true) {\r\n plugins.push('allow-clear');\r\n }\r\n\r\n element.selectize({\r\n placeholder: Collejo.lang.search,\r\n valueField: 'id',\r\n labelField: 'name',\r\n searchField: 'name',\r\n options: [],\r\n create: false,\r\n plugins: plugins,\r\n render: {\r\n option: function(item, escape) {\r\n return '
    ' + item.name + '
    ';\r\n },\r\n item: function(item, escape) {\r\n return '
    ' + item.name + '
    ';\r\n }\r\n },\r\n load: function(query, callback) {\r\n if (!query.length) return callback();\r\n Collejo.templates.spinnerTemplate().addClass('inline').insertAfter(element);\r\n $.ajax({\r\n url: element.data('url'),\r\n type: 'GET',\r\n dataType: 'json',\r\n data: {\r\n q: query\r\n },\r\n error: function() {\r\n callback();\r\n element.siblings('.spinner-wrap').remove();\r\n },\r\n success: function(res) {\r\n callback(res.data);\r\n element.siblings('.spinner-wrap').remove();\r\n }\r\n });\r\n }\r\n });\r\n\r\n var selectize = element[0].selectize;\r\n\r\n selectize.on('change', function() {\r\n element.valid();\r\n });\r\n });\r\n\r\n if (el.length == 1) {\r\n var selectize = el[0].selectize;\r\n return selectize;\r\n }\r\n}","Collejo.ready.push(function(scope) {\n $(scope).on('click', '[data-toggle=\"ajax-link\"]', function(e) {\n e.preventDefault();\n Collejo.link.ajax($(this));\n });\n});\n\nCollejo.link.ajax = function(link, callback) {\n\n if (link.data('confirm') == null) {\n\n callAjax(link);\n\n } else {\n\n bootbox.confirm({\n message: link.data('confirm'),\n buttons: {\n cancel: {\n label: Collejo.lang.no,\n className: 'btn-default'\n },\n confirm: {\n label: Collejo.lang.yes,\n className: 'btn-danger'\n }\n },\n callback: function(result) {\n if (result) {\n callAjax(link);\n }\n }\n });\n }\n\n function callAjax(link) {\n $.getJSON(link.attr('href'), function(response) {\n\n if (link.data('success-callback') == null) {\n\n if (typeof callback == 'function') {\n callback(link, response);\n }\n\n } else {\n\n var func = window[link.data('success-callback')];\n\n if (typeof func == 'function') {\n func(link, response);\n }\n }\n\n });\n }\n\n}","Collejo.alert = function(type, msg, duration) {\n var alertWrap = Collejo.templates.alertWrap();\n var alertContainer = Collejo.templates.alertContainer();\n\n alertWrap.css({\n position: 'fixed',\n top: '60px',\n width: '100%',\n height: 0,\n 'z-index': 99999\n });\n\n alertContainer.css({\n width: '400px',\n margin: '0 auto'\n });\n\n alertWrap.append(alertContainer);\n var alert = Collejo.templates.alertTemplate(type, msg, duration);\n\n if ($('#alert-wrap').length == 0) {\n $('body').append(alertWrap);\n }\n\n var alertContainer = $('#alert-wrap').find('.alert-container');\n\n if (duration === false) {\n alertContainer.empty();\n }\n\n alert.appendTo(alertContainer).addClass('animated ' + Collejo.settings.alertInClass);\n\n if (duration !== false) {\n window.setTimeout(function() {\n if (Collejo.browser.isFirefox || Collejo.browser.isChrome) {\n alert.removeClass(Collejo.settings.alertInClass)\n .addClass(Collejo.settings.alertOutClass)\n .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {\n alert.remove();\n });\n } else {\n alert.remove();\n }\n }, duration);\n }\n\n}","Collejo.form.lock = function(form) {\n $(form).find('input').attr('readonly', true);\n $(form).find('.selectized').each(function() {\n $(this)[0].selectize.lock();\n });\n $(form).find('.fileinput-button').each(function() {\n $(this).addClass('disabled').find('input').attr('disabled', true);\n });\n $(form).find('button[type=\"submit\"]')\n .attr('disabled', true)\n .append(Collejo.templates.spinnerTemplate());\n $(form).find('input[type=\"checkbox\"]')\n .attr('readonly', true)\n .parent('.checkbox-row').addClass('disabled');\n}\n\nCollejo.form.unlock = function(form) {\n $(form).find('input').attr('readonly', false);\n $(form).find('.selectized').each(function() {\n $(this)[0].selectize.unlock();\n });\n $(form).find('.fileinput-button').each(function() {\n $(this).removeClass('disabled').find('input').attr('disabled', false);\n });\n $(form).find('button[type=\"submit\"]')\n .attr('disabled', false)\n .find('.spinner-wrap')\n .remove();\n $(form).find('input[type=\"checkbox\"]')\n .attr('readonly', false)\n .parent('.checkbox-row').removeClass('disabled');\n}\n\nCollejo.ready.push(function(scope) {\n $.validator.setDefaults({\n ignore: $('.selectize'),\n errorPlacement: function(error, element) {\n if ($(element).parents('.input-group').length) {\n error.insertAfter($(element).parents('.input-group'));\n } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') {\n error.insertAfter($(element).siblings('.selectize-control'));\n } else {\n error.insertAfter(element);\n }\n },\n highlight: function(element, errorClass, validClass) {\n if (element.type === \"radio\") {\n this.findByName(element.name).addClass(errorClass).removeClass(validClass);\n } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') {\n $(element).siblings('.selectize-control').addClass(errorClass).removeClass(validClass)\n } else {\n $(element).addClass(errorClass).removeClass(validClass);\n }\n },\n unhighlight: function(element, errorClass, validClass) {\n if (element.type === \"radio\") {\n this.findByName(element.name).removeClass(errorClass).addClass(validClass);\n } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') {\n $(element).siblings('.selectize-control').removeClass(errorClass).addClass(validClass);\n } else {\n $(element).removeClass(errorClass).addClass(validClass);\n }\n }\n });\n});","Collejo.ready.push(function(scope) {\r\n $(scope).on('click', '[data-toggle=\"dynamic-delete\"]', function(e) {\r\n e.preventDefault();\r\n\r\n Collejo.dynamics.delete($(this));\r\n });\r\n\r\n Collejo.dynamics.checkRowCount($(scope).find('.table-list'));\r\n Collejo.dynamics.checkRowCount($(scope).find('.column-list'));\r\n});\r\n\r\nCollejo.dynamics.delete = function(element) {\r\n\r\n Collejo.link.ajax(element, function(link, response) {\r\n\r\n var list = link.parents('.table-list');\r\n\r\n link.closest('.' + link.data('delete-block')).fadeOut().remove();\r\n\r\n Collejo.dynamics.checkRowCount(link.parents('.table-list'));\r\n });\r\n}\r\n\r\nCollejo.dynamics.prependRow = function(partial, list) {\r\n\r\n var type = Collejo.dynamics.getListType(list);\r\n\r\n var id = partial.prop('id');\r\n var replacing = list.find('#' + id);\r\n\r\n if (replacing.length) {\r\n replacing.replaceWith(partial);\r\n } else {\r\n if (type == 'table') {\r\n partial.hide().insertAfter(list.find('th').parent()).fadeIn();\r\n } else if (type == 'columns') {\r\n partial.hide().prependTo(list.find('.columns')).fadeIn();\r\n } else {\r\n partial.hide().prependTo(list).fadeIn();\r\n }\r\n }\r\n\r\n Collejo.dynamics.checkRowCount(list);\r\n}\r\n\r\nCollejo.dynamics.getListType = function(list) {\r\n var type;\r\n\r\n if (list.find('table').length || list.prop('tagName') == 'TABLE') {\r\n type = 'table';\r\n } else if (list.find('columns').length) {\r\n type = 'columns';\r\n }\r\n\r\n return type;\r\n}\r\n\r\nCollejo.dynamics.checkRowCount = function(list) {\r\n\r\n var type = Collejo.dynamics.getListType(list);\r\n\r\n if (type = 'table') {\r\n var table = list.find('table');\r\n\r\n if (table.find('tr').length == 1) {\r\n list.find('.placeholder').show();\r\n table.hide();\r\n } else {\r\n list.find('.placeholder').hide();\r\n table.show();\r\n }\r\n }\r\n\r\n if (type = 'columns') {\r\n var columns = list.find('columns');\r\n\r\n if (columns.find('.col-md-6').children().length == 0) {\r\n columns.siblings('.col-md-6').show();\r\n columns.hide();\r\n } else {\r\n list.siblings('.col-md-6').hide();\r\n columns.show();\r\n }\r\n }\r\n}","Collejo.modal.open = function(link) {\n var id = link.data('modal-id') != null ? link.data('modal-id') : 'ajax-modal-' + moment();\n var size = link.data('modal-size') != null ? ' modal-' + link.data('modal-size') + ' ' : '';\n\n var backdrop = link.data('modal-backdrop') != null ? link.data('modal-backdrop') : true;\n var keyboard = link.data('modal-keyboard') != null ? link.data('modal-keyboard') : true;\n\n var modal = $('
    ');\n\n var loader = Collejo.templates.ajaxLoader();\n\n if (loader != null) {\n loader.appendTo(modal);\n }\n\n $('body').append(modal);\n\n modal.on('show.bs.modal', function() {\n\n $.ajax({\n url: link.attr('href'),\n type: 'GET',\n success: function(response) {\n if (response.success == true && response.data && response.data.content) {\n modal.find('.modal-dialog').html(response.data.content);\n modal.removeClass('loading');\n\n if (loader != null) {\n loader.remove();\n }\n\n Collejo.ready.recall(modal);\n }\n }\n });\n }).on('hidden.bs.modal', function() {\n modal.remove();\n }).modal({\n backdrop: backdrop,\n keyboard: keyboard\n });\n}\n\nCollejo.modal.close = function(form) {\n $(document).find('#' + $(form).prop('id')).closest('.modal').modal('hide');\n}\n\nCollejo.ready.push(function(scope) {\n $(scope).on('click', '[data-toggle=\"ajax-modal\"]', function(e) {\n e.preventDefault();\n Collejo.modal.open($(this));\n });\n\n $(scope).on('DOMNodeInserted', '.modal-backdrop', function(e) {\n if ($('.modal-backdrop').length > 1) {\n\n $('.modal-backdrop').last().css({\n 'z-index': parseInt($('.modal').last().prev().css('z-index')) + 10\n })\n }\n });\n\n $(scope).on('DOMNodeInserted', '.modal', function(e) {\n if ($('.modal').length > 1) {\n $('.modal').last().css({\n 'z-index': parseInt($('.modal-backdrop').last().prev().css('z-index')) + 10\n })\n }\n });\n});","$(function() {\n $(window).resize();\n\n $('.dash-content a').click(function(e) {\n var url = $(this).prop('href');\n if (url.substr(url.length - 1) == '#') {\n e.preventDefault();\n }\n });\n});\n\n$(window).on('resize', function() {\n\n var tab = $('.dash-content .tab-content');\n if (tab && tab.offset()) {\n tab.css({\n 'min-height': ($(document).height() - tab.offset().top - 35) + 'px'\n });\n }\n\n var tabnav = $('.tabs-left');\n if (tabnav && tab) {\n tabnav.css({\n 'height': tab.height() + 'px'\n });\n }\n\n var section = $('.section-content,.landing-screen');\n if (section && section.offset()) {\n section.css({\n 'min-height': ($(document).height() - section.offset().top - 35) + 'px'\n });\n }\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo.js b/src/resources/assets/src/js/collejo.js deleted file mode 100644 index 3f96b47..0000000 --- a/src/resources/assets/src/js/collejo.js +++ /dev/null @@ -1,53 +0,0 @@ -var Collejo = Collejo || { - settings: { - alertInClass: 'bounceInDown', - alertOutClass: 'fadeOutUp' - }, - lang: {}, - templates: {}, - form: {}, - link: {}, - modal: {}, - dynamics: {}, - browser: {}, - components: {}, - image: {}, - ready: { - push: function(callback, recall) { - C.f.push({ - callback: callback, - recall: recall === true ? true : false - }) - }, - call: function(ns) { - $.each(C.f, function(i, func) { - func.callback(ns); - }) - }, - recall: function(ns) { - $.each(C.f, function(i, func) { - if (func.recall) { - func.callback(ns); - } - }) - } - } -}; - -jQuery.events = function(expr) { - var rez = [], - evo; - jQuery(expr).each( - function() { - if (evo = jQuery._data(this, "events")) - rez.push({ - element: this, - events: evo - }); - }); - return rez.length > 0 ? rez : null; -} - -$(function() { - Collejo.ready.call($(document)); -}); \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/ajax_link.js b/src/resources/assets/src/js/collejo/ajax_link.js deleted file mode 100644 index f09d3c7..0000000 --- a/src/resources/assets/src/js/collejo/ajax_link.js +++ /dev/null @@ -1,57 +0,0 @@ -Collejo.ready.push(function(scope) { - $(scope).on('click', '[data-toggle="ajax-link"]', function(e) { - e.preventDefault(); - Collejo.link.ajax($(this)); - }); -}); - -Collejo.link.ajax = function(link, callback) { - - if (link.data('confirm') == null) { - - callAjax(link); - - } else { - - bootbox.confirm({ - message: link.data('confirm'), - buttons: { - cancel: { - label: Collejo.lang.no, - className: 'btn-default' - }, - confirm: { - label: Collejo.lang.yes, - className: 'btn-danger' - } - }, - callback: function(result) { - if (result) { - callAjax(link); - } - } - }); - } - - function callAjax(link) { - $.getJSON(link.attr('href'), function(response) { - - if (link.data('success-callback') == null) { - - if (typeof callback == 'function') { - callback(link, response); - } - - } else { - - var func = window[link.data('success-callback')]; - - if (typeof func == 'function') { - func(link, response); - } - } - - }); - } - -} \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/ajax_setup.js b/src/resources/assets/src/js/collejo/ajax_setup.js deleted file mode 100644 index 6af6e60..0000000 --- a/src/resources/assets/src/js/collejo/ajax_setup.js +++ /dev/null @@ -1,76 +0,0 @@ -$.ajaxSetup({ - headers: { - 'X-CSRF-Token': $('meta[name="token"]').attr('content'), - 'X-User-Time': new Date() - } -}); - -Collejo.ajaxComplete = function(event, xhr, settings) { - - var code, status, timeout, response = 0; - - try { - response = $.parseJSON(xhr.responseText); - } catch (e) { - console.log(e) - } - - status = (response == 0) ? xhr.status : response; - - if (status == 403 || status == 401) { - Collejo.alert('danger', Collejo.lang.ajax_unauthorize, 3000); - $('.modal,.modal-backdrop').remove(); - - window.location = settings.url; - } - - if (status == 400) { - Collejo.alert('warning', response.message, false); - $('.modal,.modal-backdrop').remove(); - } - - if (status != 0 && status != null) { - var code = status.code != undefined ? status.code : 0; - if (code == 0) { - if (response.data != undefined && response.data.partial != undefined) { - var target = response.data.target ? response.data.target : 'ajax-target'; - - var target = $('#' + target); - var partial = $(response.data.partial); - - Collejo.dynamics.prependRow(partial, target); - - Collejo.ready.recall(partial); - } - - if (response.data != undefined && response.data.redir != undefined) { - if (response.message != null) { - Collejo.alert(response.success ? 'success' : 'warning', response.message + '. redirecting…', 1000); - timeout = 0; - } - setTimeout(function() { - window.location = response.data.redir; - }, timeout); - } - - if (response.message != undefined && response.message != null && response.message.length > 0 && response.data.redir == undefined) { - Collejo.alert(response.success ? 'success' : 'warning', response.message, 3000); - } - - if (response.data != undefined && response.data.errors != undefined) { - var msg = '' + Collejo.lang.validation_failed + ' ' + Collejo.lang.validation_correct + '
    '; - $.each(response.data.errors, function(field, err) { - $.each(err, function(i, e) { - msg = msg + e + '
    '; - }); - }); - - Collejo.alert('warning', msg, 5000); - } - } - } - - $(window).resize(); -} - -$(document).ajaxComplete(Collejo.ajaxComplete); \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/alert.js b/src/resources/assets/src/js/collejo/alert.js deleted file mode 100644 index 3f1265f..0000000 --- a/src/resources/assets/src/js/collejo/alert.js +++ /dev/null @@ -1,47 +0,0 @@ -Collejo.alert = function(type, msg, duration) { - var alertWrap = Collejo.templates.alertWrap(); - var alertContainer = Collejo.templates.alertContainer(); - - alertWrap.css({ - position: 'fixed', - top: '60px', - width: '100%', - height: 0, - 'z-index': 99999 - }); - - alertContainer.css({ - width: '400px', - margin: '0 auto' - }); - - alertWrap.append(alertContainer); - var alert = Collejo.templates.alertTemplate(type, msg, duration); - - if ($('#alert-wrap').length == 0) { - $('body').append(alertWrap); - } - - var alertContainer = $('#alert-wrap').find('.alert-container'); - - if (duration === false) { - alertContainer.empty(); - } - - alert.appendTo(alertContainer).addClass('animated ' + Collejo.settings.alertInClass); - - if (duration !== false) { - window.setTimeout(function() { - if (Collejo.browser.isFirefox || Collejo.browser.isChrome) { - alert.removeClass(Collejo.settings.alertInClass) - .addClass(Collejo.settings.alertOutClass) - .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() { - alert.remove(); - }); - } else { - alert.remove(); - } - }, duration); - } - -} \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/browser.js b/src/resources/assets/src/js/collejo/browser.js deleted file mode 100644 index 13395e7..0000000 --- a/src/resources/assets/src/js/collejo/browser.js +++ /dev/null @@ -1,14 +0,0 @@ -// Opera 8.0+ -Collejo.browser.isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0; -// Firefox 1.0+ -Collejo.browser.isFirefox = typeof InstallTrigger !== 'undefined'; -// At least Safari 3+: "[object HTMLElementConstructor]" -Collejo.browser.isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0; -// Internet Explorer 6-11 -Collejo.browser.isIE = /*@cc_on!@*/ false || !!document.documentMode; -// Edge 20+ -Collejo.browser.isEdge = !Collejo.browser.isIE && !!window.StyleMedia; -// Chrome 1+ -Collejo.browser.isChrome = !!window.chrome && !!window.chrome.webstore; -// Blink engine detection -Collejo.browser.isBlink = (Collejo.browser.isChrome || Collejo.browser.isOpera) && !!window.CSS; \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/datetimepicker.js b/src/resources/assets/src/js/collejo/datetimepicker.js deleted file mode 100644 index 4bceb26..0000000 --- a/src/resources/assets/src/js/collejo/datetimepicker.js +++ /dev/null @@ -1,19 +0,0 @@ -$.fn.datetimepicker.defaults.icons = Collejo.templates.dateTimePickerIcons(); - -Collejo.ready.push(function(scope) { - $(scope).find('[data-toggle="date-input"]').datetimepicker({ - format: 'YYYY-MM-DD' - }); -}, true); - -Collejo.ready.push(function(scope) { - $(scope).find('[data-toggle="time-input"]').datetimepicker({ - format: 'HH:i:s' - }); -}, true); - -Collejo.ready.push(function(scope) { - $(scope).find('[data-toggle="date-time-input"]').datetimepicker({ - format: 'YYYY-MM-DD HH:i:s' - }); -}, true); \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/dynamics.js b/src/resources/assets/src/js/collejo/dynamics.js deleted file mode 100644 index 860f41a..0000000 --- a/src/resources/assets/src/js/collejo/dynamics.js +++ /dev/null @@ -1,85 +0,0 @@ -Collejo.ready.push(function(scope) { - $(scope).on('click', '[data-toggle="dynamic-delete"]', function(e) { - e.preventDefault(); - - Collejo.dynamics.delete($(this)); - }); - - Collejo.dynamics.checkRowCount($(scope).find('.table-list')); - Collejo.dynamics.checkRowCount($(scope).find('.column-list')); -}); - -Collejo.dynamics.delete = function(element) { - - Collejo.link.ajax(element, function(link, response) { - - var list = link.parents('.table-list'); - - link.closest('.' + link.data('delete-block')).fadeOut().remove(); - - Collejo.dynamics.checkRowCount(link.parents('.table-list')); - }); -} - -Collejo.dynamics.prependRow = function(partial, list) { - - var type = Collejo.dynamics.getListType(list); - - var id = partial.prop('id'); - var replacing = list.find('#' + id); - - if (replacing.length) { - replacing.replaceWith(partial); - } else { - if (type == 'table') { - partial.hide().insertAfter(list.find('th').parent()).fadeIn(); - } else if (type == 'columns') { - partial.hide().prependTo(list.find('.columns')).fadeIn(); - } else { - partial.hide().prependTo(list).fadeIn(); - } - } - - Collejo.dynamics.checkRowCount(list); -} - -Collejo.dynamics.getListType = function(list) { - var type; - - if (list.find('table').length || list.prop('tagName') == 'TABLE') { - type = 'table'; - } else if (list.find('columns').length) { - type = 'columns'; - } - - return type; -} - -Collejo.dynamics.checkRowCount = function(list) { - - var type = Collejo.dynamics.getListType(list); - - if (type = 'table') { - var table = list.find('table'); - - if (table.find('tr').length == 1) { - list.find('.placeholder').show(); - table.hide(); - } else { - list.find('.placeholder').hide(); - table.show(); - } - } - - if (type = 'columns') { - var columns = list.find('columns'); - - if (columns.find('.col-md-6').children().length == 0) { - columns.siblings('.col-md-6').show(); - columns.hide(); - } else { - list.siblings('.col-md-6').hide(); - columns.show(); - } - } -} \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/form.js b/src/resources/assets/src/js/collejo/form.js deleted file mode 100644 index acaa2a9..0000000 --- a/src/resources/assets/src/js/collejo/form.js +++ /dev/null @@ -1,65 +0,0 @@ -Collejo.form.lock = function(form) { - $(form).find('input').attr('readonly', true); - $(form).find('.selectized').each(function() { - $(this)[0].selectize.lock(); - }); - $(form).find('.fileinput-button').each(function() { - $(this).addClass('disabled').find('input').attr('disabled', true); - }); - $(form).find('button[type="submit"]') - .attr('disabled', true) - .append(Collejo.templates.spinnerTemplate()); - $(form).find('input[type="checkbox"]') - .attr('readonly', true) - .parent('.checkbox-row').addClass('disabled'); -} - -Collejo.form.unlock = function(form) { - $(form).find('input').attr('readonly', false); - $(form).find('.selectized').each(function() { - $(this)[0].selectize.unlock(); - }); - $(form).find('.fileinput-button').each(function() { - $(this).removeClass('disabled').find('input').attr('disabled', false); - }); - $(form).find('button[type="submit"]') - .attr('disabled', false) - .find('.spinner-wrap') - .remove(); - $(form).find('input[type="checkbox"]') - .attr('readonly', false) - .parent('.checkbox-row').removeClass('disabled'); -} - -Collejo.ready.push(function(scope) { - $.validator.setDefaults({ - ignore: $('.selectize'), - errorPlacement: function(error, element) { - if ($(element).parents('.input-group').length) { - error.insertAfter($(element).parents('.input-group')); - } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') { - error.insertAfter($(element).siblings('.selectize-control')); - } else { - error.insertAfter(element); - } - }, - highlight: function(element, errorClass, validClass) { - if (element.type === "radio") { - this.findByName(element.name).addClass(errorClass).removeClass(validClass); - } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') { - $(element).siblings('.selectize-control').addClass(errorClass).removeClass(validClass) - } else { - $(element).addClass(errorClass).removeClass(validClass); - } - }, - unhighlight: function(element, errorClass, validClass) { - if (element.type === "radio") { - this.findByName(element.name).removeClass(errorClass).addClass(validClass); - } else if ($(element).data('toggle') == 'select-dropdown' || $(element).data('toggle') == 'search-dropdown') { - $(element).siblings('.selectize-control').removeClass(errorClass).addClass(validClass); - } else { - $(element).removeClass(errorClass).addClass(validClass); - } - } - }); -}); \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/image.js b/src/resources/assets/src/js/collejo/image.js deleted file mode 100644 index 6cf9d7f..0000000 --- a/src/resources/assets/src/js/collejo/image.js +++ /dev/null @@ -1,16 +0,0 @@ -Collejo.image.lazyLoad = function(img) { - img.hide(); - img.each(function(i) { - if (this.complete) { - $(this).fadeIn(); - } else { - $(this).load(function() { - $(this).fadeIn(500); - }); - } - }); -} - -Collejo.ready.push(function(scope) { - Collejo.image.lazyLoad($(scope).find('img.img-lazy')); -}); \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/modal.js b/src/resources/assets/src/js/collejo/modal.js deleted file mode 100644 index 4ac18a1..0000000 --- a/src/resources/assets/src/js/collejo/modal.js +++ /dev/null @@ -1,70 +0,0 @@ -Collejo.modal.open = function(link) { - var id = link.data('modal-id') != null ? link.data('modal-id') : 'ajax-modal-' + moment(); - var size = link.data('modal-size') != null ? ' modal-' + link.data('modal-size') + ' ' : ''; - - var backdrop = link.data('modal-backdrop') != null ? link.data('modal-backdrop') : true; - var keyboard = link.data('modal-keyboard') != null ? link.data('modal-keyboard') : true; - - var modal = $(''); - - var loader = Collejo.templates.ajaxLoader(); - - if (loader != null) { - loader.appendTo(modal); - } - - $('body').append(modal); - - modal.on('show.bs.modal', function() { - - $.ajax({ - url: link.attr('href'), - type: 'GET', - success: function(response) { - if (response.success == true && response.data && response.data.content) { - modal.find('.modal-dialog').html(response.data.content); - modal.removeClass('loading'); - - if (loader != null) { - loader.remove(); - } - - Collejo.ready.recall(modal); - } - } - }); - }).on('hidden.bs.modal', function() { - modal.remove(); - }).modal({ - backdrop: backdrop, - keyboard: keyboard - }); -} - -Collejo.modal.close = function(form) { - $(document).find('#' + $(form).prop('id')).closest('.modal').modal('hide'); -} - -Collejo.ready.push(function(scope) { - $(scope).on('click', '[data-toggle="ajax-modal"]', function(e) { - e.preventDefault(); - Collejo.modal.open($(this)); - }); - - $(scope).on('DOMNodeInserted', '.modal-backdrop', function(e) { - if ($('.modal-backdrop').length > 1) { - - $('.modal-backdrop').last().css({ - 'z-index': parseInt($('.modal').last().prev().css('z-index')) + 10 - }) - } - }); - - $(scope).on('DOMNodeInserted', '.modal', function(e) { - if ($('.modal').length > 1) { - $('.modal').last().css({ - 'z-index': parseInt($('.modal-backdrop').last().prev().css('z-index')) + 10 - }) - } - }); -}); \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/select.js b/src/resources/assets/src/js/collejo/select.js deleted file mode 100644 index 3382c5a..0000000 --- a/src/resources/assets/src/js/collejo/select.js +++ /dev/null @@ -1,137 +0,0 @@ -Selectize.define('allow-clear', function(options) { - var that = this; - var html = $(''); - - this.setup = (function() { - var original = that.setup; - - return function() { - - original.apply(this, arguments); - if (this.getValue() == '') { - html.addClass('disabled'); - } - this.$wrapper.append(html); - - this.$wrapper.on('click', '.clear-selection', function(e) { - e.preventDefault(); - if (that.isLocked) return; - that.clear(); - that.$control_input.focus(); - }); - - this.on('change', function(value) { - if (value == '') { - this.$wrapper.find('.clear-selection').addClass('disabled'); - } else { - this.$wrapper.find('.clear-selection').removeClass('disabled'); - } - }); - }; - })(); -}); - -Collejo.ready.push(function(scope) { - - Collejo.components.dropDown($(scope).find('[data-toggle="select-dropdown"]')); - - Collejo.components.searchDropDown($(scope).find('[data-toggle="search-dropdown"]')); - -}, true); - -Collejo.components.dropDown = function(el) { - el.each(function() { - var element = $(this); - - if (element.data('toggle') == null) { - element.data('toggle', 'select-dropdown'); - } - - var plugins = []; - - if (element.data('allow-clear') == true) { - plugins.push('allow-clear'); - } - - element.selectize({ - placeholder: Collejo.lang.select, - plugins: plugins - }); - - var selectize = element[0].selectize; - - selectize.on('change', function() { - element.valid(); - }); - }); - - if (el.length == 1) { - var selectize = el[0].selectize; - return selectize; - } -} - -Collejo.components.searchDropDown = function(el) { - el.each(function() { - var element = $(this); - - if (element.data('toggle') == null) { - element.data('toggle', 'search-dropdown'); - } - - var plugins = []; - - if (element.data('allow-clear') == true) { - plugins.push('allow-clear'); - } - - element.selectize({ - placeholder: Collejo.lang.search, - valueField: 'id', - labelField: 'name', - searchField: 'name', - options: [], - create: false, - plugins: plugins, - render: { - option: function(item, escape) { - return '
    ' + item.name + '
    '; - }, - item: function(item, escape) { - return '
    ' + item.name + '
    '; - } - }, - load: function(query, callback) { - if (!query.length) return callback(); - Collejo.templates.spinnerTemplate().addClass('inline').insertAfter(element); - $.ajax({ - url: element.data('url'), - type: 'GET', - dataType: 'json', - data: { - q: query - }, - error: function() { - callback(); - element.siblings('.spinner-wrap').remove(); - }, - success: function(res) { - callback(res.data); - element.siblings('.spinner-wrap').remove(); - } - }); - } - }); - - var selectize = element[0].selectize; - - selectize.on('change', function() { - element.valid(); - }); - }); - - if (el.length == 1) { - var selectize = el[0].selectize; - return selectize; - } -} \ No newline at end of file diff --git a/src/resources/assets/src/js/collejo/templates.js b/src/resources/assets/src/js/collejo/templates.js deleted file mode 100644 index a9bb3f0..0000000 --- a/src/resources/assets/src/js/collejo/templates.js +++ /dev/null @@ -1,35 +0,0 @@ -Collejo.templates.spinnerTemplate = function() { - return $(''); -} - -Collejo.templates.alertTemplate = function(type, message, duration) { - return $(''); -} - -Collejo.templates.alertWrap = function() { - return $('
    '); -} - -Collejo.templates.alertContainer = function() { - return $('
    '); -} - -Collejo.templates.ajaxLoader = function() { - return $('
    '); -} - -Collejo.templates.dateTimePickerIcons = function() { - return { - time: 'fa fa-clock-o', - date: 'fa fa-calendar', - up: 'fa fa-chevron-up', - down: 'fa fa-chevron-down', - previous: 'fa fa-chevron-left', - next: 'fa fa-chevron-right', - today: 'fa fa-calendar-check-o', - clear: 'fa fa-trash-o', - close: 'fa fa-close' - } -} \ No newline at end of file diff --git a/src/resources/assets/src/js/dashboard.js b/src/resources/assets/src/js/dashboard.js deleted file mode 100644 index 026275b..0000000 --- a/src/resources/assets/src/js/dashboard.js +++ /dev/null @@ -1,34 +0,0 @@ -$(function() { - $(window).resize(); - - $('.dash-content a').click(function(e) { - var url = $(this).prop('href'); - if (url.substr(url.length - 1) == '#') { - e.preventDefault(); - } - }); -}); - -$(window).on('resize', function() { - - var tab = $('.dash-content .tab-content'); - if (tab && tab.offset()) { - tab.css({ - 'min-height': ($(document).height() - tab.offset().top - 35) + 'px' - }); - } - - var tabnav = $('.tabs-left'); - if (tabnav && tab) { - tabnav.css({ - 'height': tab.height() + 'px' - }); - } - - var section = $('.section-content,.landing-screen'); - if (section && section.offset()) { - section.css({ - 'min-height': ($(document).height() - section.offset().top - 35) + 'px' - }); - } -}); \ No newline at end of file diff --git a/src/resources/assets/src/sass/_animate.scss b/src/resources/assets/src/sass/_animate.scss deleted file mode 100644 index f8377f5..0000000 --- a/src/resources/assets/src/sass/_animate.scss +++ /dev/null @@ -1,3486 +0,0 @@ -@charset "UTF-8"; - -/*! - * animate.css -http://daneden.me/animate - * Version - 3.5.1 - * Licensed under the MIT license - http://opensource.org/licenses/MIT - * - * Copyright (c) 2016 Daniel Eden - */ - -.animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - &.infinite { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; - } - &.hinge { - -webkit-animation-duration: 2s; - animation-duration: 2s; - } - &.flipOutX, &.flipOutY, &.bounceIn, &.bounceOut { - -webkit-animation-duration: .75s; - animation-duration: .75s; - } -} - -@-webkit-keyframes bounce { - from, 20%, 53%, 80%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 40%, 43% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - -webkit-transform: translate3d(0, -30px, 0); - transform: translate3d(0, -30px, 0); - } - - 70% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - -webkit-transform: translate3d(0, -15px, 0); - transform: translate3d(0, -15px, 0); - } - - 90% { - -webkit-transform: translate3d(0, -4px, 0); - transform: translate3d(0, -4px, 0); - } -} - - -@keyframes bounce { - from, 20%, 53%, 80%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 40%, 43% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - -webkit-transform: translate3d(0, -30px, 0); - transform: translate3d(0, -30px, 0); - } - - 70% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); - -webkit-transform: translate3d(0, -15px, 0); - transform: translate3d(0, -15px, 0); - } - - 90% { - -webkit-transform: translate3d(0, -4px, 0); - transform: translate3d(0, -4px, 0); - } -} - - -.bounce { - -webkit-animation-name: bounce; - animation-name: bounce; - -webkit-transform-origin: center bottom; - transform-origin: center bottom; -} - -@-webkit-keyframes flash { - from, 50%, to { - opacity: 1; - } - - 25%, 75% { - opacity: 0; - } -} - - -@keyframes flash { - from, 50%, to { - opacity: 1; - } - - 25%, 75% { - opacity: 0; - } -} - - -.flash { - -webkit-animation-name: flash; - animation-name: flash; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes pulse { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 50% { - -webkit-transform: scale3d(1.05, 1.05, 1.05); - transform: scale3d(1.05, 1.05, 1.05); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - - -@keyframes pulse { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 50% { - -webkit-transform: scale3d(1.05, 1.05, 1.05); - transform: scale3d(1.05, 1.05, 1.05); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - - -.pulse { - -webkit-animation-name: pulse; - animation-name: pulse; -} - -@-webkit-keyframes rubberBand { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 30% { - -webkit-transform: scale3d(1.25, 0.75, 1); - transform: scale3d(1.25, 0.75, 1); - } - - 40% { - -webkit-transform: scale3d(0.75, 1.25, 1); - transform: scale3d(0.75, 1.25, 1); - } - - 50% { - -webkit-transform: scale3d(1.15, 0.85, 1); - transform: scale3d(1.15, 0.85, 1); - } - - 65% { - -webkit-transform: scale3d(0.95, 1.05, 1); - transform: scale3d(0.95, 1.05, 1); - } - - 75% { - -webkit-transform: scale3d(1.05, 0.95, 1); - transform: scale3d(1.05, 0.95, 1); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - - -@keyframes rubberBand { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 30% { - -webkit-transform: scale3d(1.25, 0.75, 1); - transform: scale3d(1.25, 0.75, 1); - } - - 40% { - -webkit-transform: scale3d(0.75, 1.25, 1); - transform: scale3d(0.75, 1.25, 1); - } - - 50% { - -webkit-transform: scale3d(1.15, 0.85, 1); - transform: scale3d(1.15, 0.85, 1); - } - - 65% { - -webkit-transform: scale3d(0.95, 1.05, 1); - transform: scale3d(0.95, 1.05, 1); - } - - 75% { - -webkit-transform: scale3d(1.05, 0.95, 1); - transform: scale3d(1.05, 0.95, 1); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - - -.rubberBand { - -webkit-animation-name: rubberBand; - animation-name: rubberBand; -} - -@-webkit-keyframes shake { - from, to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 10%, 30%, 50%, 70%, 90% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 20%, 40%, 60%, 80% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } -} - - -@keyframes shake { - from, to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 10%, 30%, 50%, 70%, 90% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 20%, 40%, 60%, 80% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } -} - - -.shake { - -webkit-animation-name: shake; - animation-name: shake; -} - -@-webkit-keyframes headShake { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 6.5% { - -webkit-transform: translateX(-6px) rotateY(-9deg); - transform: translateX(-6px) rotateY(-9deg); - } - - 18.5% { - -webkit-transform: translateX(5px) rotateY(7deg); - transform: translateX(5px) rotateY(7deg); - } - - 31.5% { - -webkit-transform: translateX(-3px) rotateY(-5deg); - transform: translateX(-3px) rotateY(-5deg); - } - - 43.5% { - -webkit-transform: translateX(2px) rotateY(3deg); - transform: translateX(2px) rotateY(3deg); - } - - 50% { - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - - -@keyframes headShake { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 6.5% { - -webkit-transform: translateX(-6px) rotateY(-9deg); - transform: translateX(-6px) rotateY(-9deg); - } - - 18.5% { - -webkit-transform: translateX(5px) rotateY(7deg); - transform: translateX(5px) rotateY(7deg); - } - - 31.5% { - -webkit-transform: translateX(-3px) rotateY(-5deg); - transform: translateX(-3px) rotateY(-5deg); - } - - 43.5% { - -webkit-transform: translateX(2px) rotateY(3deg); - transform: translateX(2px) rotateY(3deg); - } - - 50% { - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - - -.headShake { - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - -webkit-animation-name: headShake; - animation-name: headShake; -} - -@-webkit-keyframes swing { - 20% { - -webkit-transform: rotate3d(0, 0, 1, 15deg); - transform: rotate3d(0, 0, 1, 15deg); - } - - 40% { - -webkit-transform: rotate3d(0, 0, 1, -10deg); - transform: rotate3d(0, 0, 1, -10deg); - } - - 60% { - -webkit-transform: rotate3d(0, 0, 1, 5deg); - transform: rotate3d(0, 0, 1, 5deg); - } - - 80% { - -webkit-transform: rotate3d(0, 0, 1, -5deg); - transform: rotate3d(0, 0, 1, -5deg); - } - - to { - -webkit-transform: rotate3d(0, 0, 1, 0deg); - transform: rotate3d(0, 0, 1, 0deg); - } -} - - -@keyframes swing { - 20% { - -webkit-transform: rotate3d(0, 0, 1, 15deg); - transform: rotate3d(0, 0, 1, 15deg); - } - - 40% { - -webkit-transform: rotate3d(0, 0, 1, -10deg); - transform: rotate3d(0, 0, 1, -10deg); - } - - 60% { - -webkit-transform: rotate3d(0, 0, 1, 5deg); - transform: rotate3d(0, 0, 1, 5deg); - } - - 80% { - -webkit-transform: rotate3d(0, 0, 1, -5deg); - transform: rotate3d(0, 0, 1, -5deg); - } - - to { - -webkit-transform: rotate3d(0, 0, 1, 0deg); - transform: rotate3d(0, 0, 1, 0deg); - } -} - - -.swing { - -webkit-transform-origin: top center; - transform-origin: top center; - -webkit-animation-name: swing; - animation-name: swing; -} - -@-webkit-keyframes tada { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 10%, 20% { - -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); - transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); - } - - 30%, 50%, 70%, 90% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - } - - 40%, 60%, 80% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - - -@keyframes tada { - from { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 10%, 20% { - -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); - transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); - } - - 30%, 50%, 70%, 90% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - } - - 40%, 60%, 80% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - } - - to { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - - -.tada { - -webkit-animation-name: tada; - animation-name: tada; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes wobble { - from { - -webkit-transform: none; - transform: none; - } - - 15% { - -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - } - - 30% { - -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - } - - 45% { - -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - } - - 60% { - -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - } - - 75% { - -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - } - - to { - -webkit-transform: none; - transform: none; - } -} - - -@keyframes wobble { - from { - -webkit-transform: none; - transform: none; - } - - 15% { - -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - } - - 30% { - -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - } - - 45% { - -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - } - - 60% { - -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - } - - 75% { - -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - } - - to { - -webkit-transform: none; - transform: none; - } -} - - -.wobble { - -webkit-animation-name: wobble; - animation-name: wobble; -} - -@-webkit-keyframes jello { - from, 11.1%, to { - -webkit-transform: none; - transform: none; - } - - 22.2% { - -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); - transform: skewX(-12.5deg) skewY(-12.5deg); - } - - 33.3% { - -webkit-transform: skewX(6.25deg) skewY(6.25deg); - transform: skewX(6.25deg) skewY(6.25deg); - } - - 44.4% { - -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); - transform: skewX(-3.125deg) skewY(-3.125deg); - } - - 55.5% { - -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); - transform: skewX(1.5625deg) skewY(1.5625deg); - } - - 66.6% { - -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); - transform: skewX(-0.78125deg) skewY(-0.78125deg); - } - - 77.7% { - -webkit-transform: skewX(0.39063deg) skewY(0.39063deg); - transform: skewX(0.39063deg) skewY(0.39063deg); - } - - 88.8% { - -webkit-transform: skewX(-0.19531deg) skewY(-0.19531deg); - transform: skewX(-0.19531deg) skewY(-0.19531deg); - } -} - - -@keyframes jello { - from, 11.1%, to { - -webkit-transform: none; - transform: none; - } - - 22.2% { - -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); - transform: skewX(-12.5deg) skewY(-12.5deg); - } - - 33.3% { - -webkit-transform: skewX(6.25deg) skewY(6.25deg); - transform: skewX(6.25deg) skewY(6.25deg); - } - - 44.4% { - -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); - transform: skewX(-3.125deg) skewY(-3.125deg); - } - - 55.5% { - -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); - transform: skewX(1.5625deg) skewY(1.5625deg); - } - - 66.6% { - -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); - transform: skewX(-0.78125deg) skewY(-0.78125deg); - } - - 77.7% { - -webkit-transform: skewX(0.39063deg) skewY(0.39063deg); - transform: skewX(0.39063deg) skewY(0.39063deg); - } - - 88.8% { - -webkit-transform: skewX(-0.19531deg) skewY(-0.19531deg); - transform: skewX(-0.19531deg) skewY(-0.19531deg); - } -} - - -.jello { - -webkit-animation-name: jello; - animation-name: jello; - -webkit-transform-origin: center; - transform-origin: center; -} - -@-webkit-keyframes bounceIn { - from, 20%, 40%, 60%, 80%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - 20% { - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - 40% { - -webkit-transform: scale3d(0.9, 0.9, 0.9); - transform: scale3d(0.9, 0.9, 0.9); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03); - } - - 80% { - -webkit-transform: scale3d(0.97, 0.97, 0.97); - transform: scale3d(0.97, 0.97, 0.97); - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - - -@keyframes bounceIn { - from, 20%, 40%, 60%, 80%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - 20% { - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - 40% { - -webkit-transform: scale3d(0.9, 0.9, 0.9); - transform: scale3d(0.9, 0.9, 0.9); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03); - } - - 80% { - -webkit-transform: scale3d(0.97, 0.97, 0.97); - transform: scale3d(0.97, 0.97, 0.97); - } - - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - - -.bounceIn { - -webkit-animation-name: bounceIn; - animation-name: bounceIn; -} - -@-webkit-keyframes bounceInDown { - from, 60%, 75%, 90%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(0, -3000px, 0); - transform: translate3d(0, -3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, 25px, 0); - transform: translate3d(0, 25px, 0); - } - - 75% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, 5px, 0); - transform: translate3d(0, 5px, 0); - } - - to { - -webkit-transform: none; - transform: none; - } -} - - -@keyframes bounceInDown { - from, 60%, 75%, 90%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(0, -3000px, 0); - transform: translate3d(0, -3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, 25px, 0); - transform: translate3d(0, 25px, 0); - } - - 75% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, 5px, 0); - transform: translate3d(0, 5px, 0); - } - - to { - -webkit-transform: none; - transform: none; - } -} - - -.bounceInDown { - -webkit-animation-name: bounceInDown; - animation-name: bounceInDown; -} - -@-webkit-keyframes bounceInLeft { - from, 60%, 75%, 90%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(-3000px, 0, 0); - transform: translate3d(-3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(25px, 0, 0); - transform: translate3d(25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(5px, 0, 0); - transform: translate3d(5px, 0, 0); - } - - to { - -webkit-transform: none; - transform: none; - } -} - - -@keyframes bounceInLeft { - from, 60%, 75%, 90%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(-3000px, 0, 0); - transform: translate3d(-3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(25px, 0, 0); - transform: translate3d(25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(5px, 0, 0); - transform: translate3d(5px, 0, 0); - } - - to { - -webkit-transform: none; - transform: none; - } -} - - -.bounceInLeft { - -webkit-animation-name: bounceInLeft; - animation-name: bounceInLeft; -} - -@-webkit-keyframes bounceInRight { - from, 60%, 75%, 90%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - from { - opacity: 0; - -webkit-transform: translate3d(3000px, 0, 0); - transform: translate3d(3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(-25px, 0, 0); - transform: translate3d(-25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(-5px, 0, 0); - transform: translate3d(-5px, 0, 0); - } - - to { - -webkit-transform: none; - transform: none; - } -} - - -@keyframes bounceInRight { - from, 60%, 75%, 90%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - from { - opacity: 0; - -webkit-transform: translate3d(3000px, 0, 0); - transform: translate3d(3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(-25px, 0, 0); - transform: translate3d(-25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(-5px, 0, 0); - transform: translate3d(-5px, 0, 0); - } - - to { - -webkit-transform: none; - transform: none; - } -} - - -.bounceInRight { - -webkit-animation-name: bounceInRight; - animation-name: bounceInRight; -} - -@-webkit-keyframes bounceInUp { - from, 60%, 75%, 90%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - from { - opacity: 0; - -webkit-transform: translate3d(0, 3000px, 0); - transform: translate3d(0, 3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - 75% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, -5px, 0); - transform: translate3d(0, -5px, 0); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - - -@keyframes bounceInUp { - from, 60%, 75%, 90%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - } - - from { - opacity: 0; - -webkit-transform: translate3d(0, 3000px, 0); - transform: translate3d(0, 3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - 75% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, -5px, 0); - transform: translate3d(0, -5px, 0); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - - -.bounceInUp { - -webkit-animation-name: bounceInUp; - animation-name: bounceInUp; -} - -@-webkit-keyframes bounceOut { - 20% { - -webkit-transform: scale3d(0.9, 0.9, 0.9); - transform: scale3d(0.9, 0.9, 0.9); - } - - 50%, 55% { - opacity: 1; - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } -} - - -@keyframes bounceOut { - 20% { - -webkit-transform: scale3d(0.9, 0.9, 0.9); - transform: scale3d(0.9, 0.9, 0.9); - } - - 50%, 55% { - opacity: 1; - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } -} - - -.bounceOut { - -webkit-animation-name: bounceOut; - animation-name: bounceOut; -} - -@-webkit-keyframes bounceOutDown { - 20% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 40%, 45% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - - -@keyframes bounceOutDown { - 20% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 40%, 45% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - - -.bounceOutDown { - -webkit-animation-name: bounceOutDown; - animation-name: bounceOutDown; -} - -@-webkit-keyframes bounceOutLeft { - 20% { - opacity: 1; - -webkit-transform: translate3d(20px, 0, 0); - transform: translate3d(20px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - - -@keyframes bounceOutLeft { - 20% { - opacity: 1; - -webkit-transform: translate3d(20px, 0, 0); - transform: translate3d(20px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - - -.bounceOutLeft { - -webkit-animation-name: bounceOutLeft; - animation-name: bounceOutLeft; -} - -@-webkit-keyframes bounceOutRight { - 20% { - opacity: 1; - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - - -@keyframes bounceOutRight { - 20% { - opacity: 1; - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - - -.bounceOutRight { - -webkit-animation-name: bounceOutRight; - animation-name: bounceOutRight; -} - -@-webkit-keyframes bounceOutUp { - 20% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 40%, 45% { - opacity: 1; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - - -@keyframes bounceOutUp { - 20% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 40%, 45% { - opacity: 1; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - - -.bounceOutUp { - -webkit-animation-name: bounceOutUp; - animation-name: bounceOutUp; -} - -@-webkit-keyframes fadeIn { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - - -@keyframes fadeIn { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - - -.fadeIn { - -webkit-animation-name: fadeIn; - animation-name: fadeIn; -} - -@-webkit-keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -@keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -.fadeInDown { - -webkit-animation-name: fadeInDown; - animation-name: fadeInDown; -} - -@-webkit-keyframes fadeInDownBig { - from { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -@keyframes fadeInDownBig { - from { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -.fadeInDownBig { - -webkit-animation-name: fadeInDownBig; - animation-name: fadeInDownBig; -} - -@-webkit-keyframes fadeInLeft { - from { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -@keyframes fadeInLeft { - from { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -.fadeInLeft { - -webkit-animation-name: fadeInLeft; - animation-name: fadeInLeft; -} - -@-webkit-keyframes fadeInLeftBig { - from { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -@keyframes fadeInLeftBig { - from { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -.fadeInLeftBig { - -webkit-animation-name: fadeInLeftBig; - animation-name: fadeInLeftBig; -} - -@-webkit-keyframes fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -@keyframes fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -.fadeInRight { - -webkit-animation-name: fadeInRight; - animation-name: fadeInRight; -} - -@-webkit-keyframes fadeInRightBig { - from { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -@keyframes fadeInRightBig { - from { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -.fadeInRightBig { - -webkit-animation-name: fadeInRightBig; - animation-name: fadeInRightBig; -} - -@-webkit-keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -@keyframes fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -.fadeInUp { - -webkit-animation-name: fadeInUp; - animation-name: fadeInUp; -} - -@-webkit-keyframes fadeInUpBig { - from { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -@keyframes fadeInUpBig { - from { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -.fadeInUpBig { - -webkit-animation-name: fadeInUpBig; - animation-name: fadeInUpBig; -} - -@-webkit-keyframes fadeOut { - from { - opacity: 1; - } - - to { - opacity: 0; - } -} - - -@keyframes fadeOut { - from { - opacity: 1; - } - - to { - opacity: 0; - } -} - - -.fadeOut { - -webkit-animation-name: fadeOut; - animation-name: fadeOut; -} - -@-webkit-keyframes fadeOutDown { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - - -@keyframes fadeOutDown { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - - -.fadeOutDown { - -webkit-animation-name: fadeOutDown; - animation-name: fadeOutDown; -} - -@-webkit-keyframes fadeOutDownBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - - -@keyframes fadeOutDownBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - - -.fadeOutDownBig { - -webkit-animation-name: fadeOutDownBig; - animation-name: fadeOutDownBig; -} - -@-webkit-keyframes fadeOutLeft { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - - -@keyframes fadeOutLeft { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - - -.fadeOutLeft { - -webkit-animation-name: fadeOutLeft; - animation-name: fadeOutLeft; -} - -@-webkit-keyframes fadeOutLeftBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - - -@keyframes fadeOutLeftBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - - -.fadeOutLeftBig { - -webkit-animation-name: fadeOutLeftBig; - animation-name: fadeOutLeftBig; -} - -@-webkit-keyframes fadeOutRight { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - - -@keyframes fadeOutRight { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - - -.fadeOutRight { - -webkit-animation-name: fadeOutRight; - animation-name: fadeOutRight; -} - -@-webkit-keyframes fadeOutRightBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - - -@keyframes fadeOutRightBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - - -.fadeOutRightBig { - -webkit-animation-name: fadeOutRightBig; - animation-name: fadeOutRightBig; -} - -@-webkit-keyframes fadeOutUp { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - - -@keyframes fadeOutUp { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - - -.fadeOutUp { - -webkit-animation-name: fadeOutUp; - animation-name: fadeOutUp; -} - -@-webkit-keyframes fadeOutUpBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - - -@keyframes fadeOutUpBig { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - - -.fadeOutUpBig { - -webkit-animation-name: fadeOutUpBig; - animation-name: fadeOutUpBig; -} - -@-webkit-keyframes flip { - from { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); - transform: perspective(400px) rotate3d(0, 1, 0, -360deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 40% { - -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); - transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 50% { - -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); - transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 80% { - -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95); - transform: perspective(400px) scale3d(0.95, 0.95, 0.95); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } -} - - -@keyframes flip { - from { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); - transform: perspective(400px) rotate3d(0, 1, 0, -360deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 40% { - -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); - transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 50% { - -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); - transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 80% { - -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95); - transform: perspective(400px) scale3d(0.95, 0.95, 0.95); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } -} - - -.animated.flip { - -webkit-backface-visibility: visible; - backface-visibility: visible; - -webkit-animation-name: flip; - animation-name: flip; -} - -@-webkit-keyframes flipInX { - from { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - - -@keyframes flipInX { - from { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - - -.flipInX { - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipInX; - animation-name: flipInX; -} - -@-webkit-keyframes flipInY { - from { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - } - - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - - -@keyframes flipInY { - from { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - } - - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - - -.flipInY { - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipInY; - animation-name: flipInY; -} - -@-webkit-keyframes flipOutX { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - - to { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} - - -@keyframes flipOutX { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - - to { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} - - -.flipOutX { - -webkit-animation-name: flipOutX; - animation-name: flipOutX; - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; -} - -@-webkit-keyframes flipOutY { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - opacity: 1; - } - - to { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - opacity: 0; - } -} - - -@keyframes flipOutY { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - opacity: 1; - } - - to { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - opacity: 0; - } -} - - -.flipOutY { - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipOutY; - animation-name: flipOutY; -} - -@-webkit-keyframes lightSpeedIn { - from { - -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); - transform: translate3d(100%, 0, 0) skewX(-30deg); - opacity: 0; - } - - 60% { - -webkit-transform: skewX(20deg); - transform: skewX(20deg); - opacity: 1; - } - - 80% { - -webkit-transform: skewX(-5deg); - transform: skewX(-5deg); - opacity: 1; - } - - to { - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -@keyframes lightSpeedIn { - from { - -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); - transform: translate3d(100%, 0, 0) skewX(-30deg); - opacity: 0; - } - - 60% { - -webkit-transform: skewX(20deg); - transform: skewX(20deg); - opacity: 1; - } - - 80% { - -webkit-transform: skewX(-5deg); - transform: skewX(-5deg); - opacity: 1; - } - - to { - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -.lightSpeedIn { - -webkit-animation-name: lightSpeedIn; - animation-name: lightSpeedIn; - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; -} - -@-webkit-keyframes lightSpeedOut { - from { - opacity: 1; - } - - to { - -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); - transform: translate3d(100%, 0, 0) skewX(30deg); - opacity: 0; - } -} - - -@keyframes lightSpeedOut { - from { - opacity: 1; - } - - to { - -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); - transform: translate3d(100%, 0, 0) skewX(30deg); - opacity: 0; - } -} - - -.lightSpeedOut { - -webkit-animation-name: lightSpeedOut; - animation-name: lightSpeedOut; - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; -} - -@-webkit-keyframes rotateIn { - from { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, -200deg); - transform: rotate3d(0, 0, 1, -200deg); - opacity: 0; - } - - to { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -@keyframes rotateIn { - from { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, -200deg); - transform: rotate3d(0, 0, 1, -200deg); - opacity: 0; - } - - to { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -.rotateIn { - -webkit-animation-name: rotateIn; - animation-name: rotateIn; -} - -@-webkit-keyframes rotateInDownLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -@keyframes rotateInDownLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -.rotateInDownLeft { - -webkit-animation-name: rotateInDownLeft; - animation-name: rotateInDownLeft; -} - -@-webkit-keyframes rotateInDownRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -@keyframes rotateInDownRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -.rotateInDownRight { - -webkit-animation-name: rotateInDownRight; - animation-name: rotateInDownRight; -} - -@-webkit-keyframes rotateInUpLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -@keyframes rotateInUpLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -.rotateInUpLeft { - -webkit-animation-name: rotateInUpLeft; - animation-name: rotateInUpLeft; -} - -@-webkit-keyframes rotateInUpRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -90deg); - transform: rotate3d(0, 0, 1, -90deg); - opacity: 0; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -@keyframes rotateInUpRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -90deg); - transform: rotate3d(0, 0, 1, -90deg); - opacity: 0; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - - -.rotateInUpRight { - -webkit-animation-name: rotateInUpRight; - animation-name: rotateInUpRight; -} - -@-webkit-keyframes rotateOut { - from { - -webkit-transform-origin: center; - transform-origin: center; - opacity: 1; - } - - to { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, 200deg); - transform: rotate3d(0, 0, 1, 200deg); - opacity: 0; - } -} - - -@keyframes rotateOut { - from { - -webkit-transform-origin: center; - transform-origin: center; - opacity: 1; - } - - to { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, 200deg); - transform: rotate3d(0, 0, 1, 200deg); - opacity: 0; - } -} - - -.rotateOut { - -webkit-animation-name: rotateOut; - animation-name: rotateOut; -} - -@-webkit-keyframes rotateOutDownLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } -} - - -@keyframes rotateOutDownLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } -} - - -.rotateOutDownLeft { - -webkit-animation-name: rotateOutDownLeft; - animation-name: rotateOutDownLeft; -} - -@-webkit-keyframes rotateOutDownRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - - -@keyframes rotateOutDownRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - - -.rotateOutDownRight { - -webkit-animation-name: rotateOutDownRight; - animation-name: rotateOutDownRight; -} - -@-webkit-keyframes rotateOutUpLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - - -@keyframes rotateOutUpLeft { - from { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - - -.rotateOutUpLeft { - -webkit-animation-name: rotateOutUpLeft; - animation-name: rotateOutUpLeft; -} - -@-webkit-keyframes rotateOutUpRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 90deg); - transform: rotate3d(0, 0, 1, 90deg); - opacity: 0; - } -} - - -@keyframes rotateOutUpRight { - from { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - to { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 90deg); - transform: rotate3d(0, 0, 1, 90deg); - opacity: 0; - } -} - - -.rotateOutUpRight { - -webkit-animation-name: rotateOutUpRight; - animation-name: rotateOutUpRight; -} - -@-webkit-keyframes hinge { - 0% { - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 20%, 60% { - -webkit-transform: rotate3d(0, 0, 1, 80deg); - transform: rotate3d(0, 0, 1, 80deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 40%, 80% { - -webkit-transform: rotate3d(0, 0, 1, 60deg); - transform: rotate3d(0, 0, 1, 60deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - opacity: 1; - } - - to { - -webkit-transform: translate3d(0, 700px, 0); - transform: translate3d(0, 700px, 0); - opacity: 0; - } -} - - -@keyframes hinge { - 0% { - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 20%, 60% { - -webkit-transform: rotate3d(0, 0, 1, 80deg); - transform: rotate3d(0, 0, 1, 80deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 40%, 80% { - -webkit-transform: rotate3d(0, 0, 1, 60deg); - transform: rotate3d(0, 0, 1, 60deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - opacity: 1; - } - - to { - -webkit-transform: translate3d(0, 700px, 0); - transform: translate3d(0, 700px, 0); - opacity: 0; - } -} - - -.hinge { - -webkit-animation-name: hinge; - animation-name: hinge; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes rollIn { - from { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -@keyframes rollIn { - from { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - - -.rollIn { - -webkit-animation-name: rollIn; - animation-name: rollIn; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes rollOut { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - } -} - - -@keyframes rollOut { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - } -} - - -.rollOut { - -webkit-animation-name: rollOut; - animation-name: rollOut; -} - -@-webkit-keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - 50% { - opacity: 1; - } -} - - -@keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - 50% { - opacity: 1; - } -} - - -.zoomIn { - -webkit-animation-name: zoomIn; - animation-name: zoomIn; -} - -@-webkit-keyframes zoomInDown { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -@keyframes zoomInDown { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -.zoomInDown { - -webkit-animation-name: zoomInDown; - animation-name: zoomInDown; -} - -@-webkit-keyframes zoomInLeft { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -@keyframes zoomInLeft { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -.zoomInLeft { - -webkit-animation-name: zoomInLeft; - animation-name: zoomInLeft; -} - -@-webkit-keyframes zoomInRight { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -@keyframes zoomInRight { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -.zoomInRight { - -webkit-animation-name: zoomInRight; - animation-name: zoomInRight; -} - -@-webkit-keyframes zoomInUp { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -@keyframes zoomInUp { - from { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -.zoomInUp { - -webkit-animation-name: zoomInUp; - animation-name: zoomInUp; -} - -@-webkit-keyframes zoomOut { - from { - opacity: 1; - } - - 50% { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - to { - opacity: 0; - } -} - - -@keyframes zoomOut { - from { - opacity: 1; - } - - 50% { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } - - to { - opacity: 0; - } -} - - -.zoomOut { - -webkit-animation-name: zoomOut; - animation-name: zoomOut; -} - -@-webkit-keyframes zoomOutDown { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -@keyframes zoomOutDown { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -.zoomOutDown { - -webkit-animation-name: zoomOutDown; - animation-name: zoomOutDown; -} - -@-webkit-keyframes zoomOutLeft { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); - transform: scale(0.1) translate3d(-2000px, 0, 0); - -webkit-transform-origin: left center; - transform-origin: left center; - } -} - - -@keyframes zoomOutLeft { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); - transform: scale(0.1) translate3d(-2000px, 0, 0); - -webkit-transform-origin: left center; - transform-origin: left center; - } -} - - -.zoomOutLeft { - -webkit-animation-name: zoomOutLeft; - animation-name: zoomOutLeft; -} - -@-webkit-keyframes zoomOutRight { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); - transform: scale(0.1) translate3d(2000px, 0, 0); - -webkit-transform-origin: right center; - transform-origin: right center; - } -} - - -@keyframes zoomOutRight { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); - } - - to { - opacity: 0; - -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); - transform: scale(0.1) translate3d(2000px, 0, 0); - -webkit-transform-origin: right center; - transform-origin: right center; - } -} - - -.zoomOutRight { - -webkit-animation-name: zoomOutRight; - animation-name: zoomOutRight; -} - -@-webkit-keyframes zoomOutUp { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -@keyframes zoomOutUp { - 40% { - opacity: 1; - -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); - } - - to { - opacity: 0; - -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); - transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); - } -} - - -.zoomOutUp { - -webkit-animation-name: zoomOutUp; - animation-name: zoomOutUp; -} - -@-webkit-keyframes slideInDown { - from { - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - - -@keyframes slideInDown { - from { - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - - -.slideInDown { - -webkit-animation-name: slideInDown; - animation-name: slideInDown; -} - -@-webkit-keyframes slideInLeft { - from { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - - -@keyframes slideInLeft { - from { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - - -.slideInLeft { - -webkit-animation-name: slideInLeft; - animation-name: slideInLeft; -} - -@-webkit-keyframes slideInRight { - from { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - - -@keyframes slideInRight { - from { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - - -.slideInRight { - -webkit-animation-name: slideInRight; - animation-name: slideInRight; -} - -@-webkit-keyframes slideInUp { - from { - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - - -@keyframes slideInUp { - from { - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - visibility: visible; - } - - to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - - -.slideInUp { - -webkit-animation-name: slideInUp; - animation-name: slideInUp; -} - -@-webkit-keyframes slideOutDown { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - - -@keyframes slideOutDown { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - - -.slideOutDown { - -webkit-animation-name: slideOutDown; - animation-name: slideOutDown; -} - -@-webkit-keyframes slideOutLeft { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - - -@keyframes slideOutLeft { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - - -.slideOutLeft { - -webkit-animation-name: slideOutLeft; - animation-name: slideOutLeft; -} - -@-webkit-keyframes slideOutRight { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - - -@keyframes slideOutRight { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - - -.slideOutRight { - -webkit-animation-name: slideOutRight; - animation-name: slideOutRight; -} - -@-webkit-keyframes slideOutUp { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - - -@keyframes slideOutUp { - from { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - visibility: hidden; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - - -.slideOutUp { - -webkit-animation-name: slideOutUp; - animation-name: slideOutUp; -} \ No newline at end of file diff --git a/src/resources/assets/src/sass/_bootstrap.scss b/src/resources/assets/src/sass/_bootstrap.scss deleted file mode 100644 index 4e74b15..0000000 --- a/src/resources/assets/src/sass/_bootstrap.scss +++ /dev/null @@ -1,50 +0,0 @@ -// Core variables and mixins -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/variables"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/mixins"; - -// Reset and dependencies -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/normalize"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/print"; -//@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/glyphicons"; - -// Core CSS -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/scaffolding"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/type"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/code"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/grid"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/tables"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/forms"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/buttons"; - -// Components -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/component-animations"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/dropdowns"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/button-groups"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/input-groups"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/navs"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/navbar"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/breadcrumbs"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/pagination"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/pager"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/labels"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/badges"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/jumbotron"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/thumbnails"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/alerts"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/progress-bars"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/media"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/list-group"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/panels"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/responsive-embed"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/wells"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/close"; - -// Components w/ JavaScript -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/modals"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/tooltip"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/popovers"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/carousel"; - -// Utility classes -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/utilities"; -@import "../../../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap/responsive-utilities"; diff --git a/src/resources/assets/src/sass/_selectize.scss b/src/resources/assets/src/sass/_selectize.scss deleted file mode 100644 index 10ebc98..0000000 --- a/src/resources/assets/src/sass/_selectize.scss +++ /dev/null @@ -1,401 +0,0 @@ -/** - * selectize.bootstrap3.css (v0.12.1) - Bootstrap 3 Theme - * Copyright (c) 2013–2015 Brian Reavis & contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this - * file except in compliance with the License. You may obtain a copy of the License at: - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under - * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF - * ANY KIND, either express or implied. See the License for the specific language - * governing permissions and limitations under the License. - * - * @author Brian Reavis - */ -.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder { - visibility: visible !important; - background: #f2f2f2 !important; - background: rgba(0, 0, 0, 0.06) !important; - border: 0 none !important; - -webkit-box-shadow: inset 0 0 12px 4px #ffffff; - box-shadow: inset 0 0 12px 4px #ffffff; -} -.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after { - content: '!'; - visibility: hidden; -} -.selectize-control.plugin-drag_drop .ui-sortable-helper { - -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); -} -.selectize-dropdown-header { - position: relative; - padding: 3px 12px; - border-bottom: 1px solid #d0d0d0; - background: #f8f8f8; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.selectize-dropdown-header-close { - position: absolute; - right: 12px; - top: 50%; - color: #333333; - opacity: 0.4; - margin-top: -12px; - line-height: 20px; - font-size: 20px !important; -} -.selectize-dropdown-header-close:hover { - color: #000000; -} -.selectize-dropdown.plugin-optgroup_columns .optgroup { - border-right: 1px solid #f2f2f2; - border-top: 0 none; - float: left; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child { - border-right: 0 none; -} -.selectize-dropdown.plugin-optgroup_columns .optgroup:before { - display: none; -} -.selectize-dropdown.plugin-optgroup_columns .optgroup-header { - border-top: 0 none; -} -.selectize-control.plugin-remove_button [data-value] { - position: relative; - padding-right: 24px !important; -} -.selectize-control.plugin-remove_button [data-value] .remove { - z-index: 1; - /* fixes ie bug (see #392) */ - position: absolute; - top: 0; - right: 0; - bottom: 0; - width: 17px; - text-align: center; - font-weight: bold; - font-size: 12px; - color: inherit; - text-decoration: none; - vertical-align: middle; - display: inline-block; - padding: 1px 0 0 0; - border-left: 1px solid rgba(0, 0, 0, 0); - -webkit-border-radius: 0 2px 2px 0; - -moz-border-radius: 0 2px 2px 0; - border-radius: 0 2px 2px 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.selectize-control.plugin-remove_button [data-value] .remove:hover { - background: rgba(0, 0, 0, 0.05); -} -.selectize-control.plugin-remove_button [data-value].active .remove { - border-left-color: rgba(0, 0, 0, 0); -} -.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover { - background: none; -} -.selectize-control.plugin-remove_button .disabled [data-value] .remove { - border-left-color: rgba(77, 77, 77, 0); -} -.selectize-control { - position: relative; -} -.selectize-dropdown, -.selectize-input, -.selectize-input input { - color: #333333; - font-family: inherit; - font-size: inherit; - line-height: 20px; - -webkit-font-smoothing: inherit; -} -.selectize-input, -.selectize-control.single .selectize-input.input-active { - background: #ffffff; - cursor: text; - display: inline-block; -} -.selectize-input { - border: 1px solid #cccccc; - padding: 6px 12px; - display: inline-block; - width: 100%; - overflow: hidden; - position: relative; - z-index: 1; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-box-shadow: none; - box-shadow: none; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.selectize-control.multi .selectize-input.has-items { - padding: 5px 12px 2px; -} -.selectize-input.full { - background-color: #ffffff; -} -.selectize-input.disabled, -.selectize-input.disabled * { - cursor: default !important; -} -.selectize-input.focus { - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); -} -.selectize-input.dropdown-active { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.selectize-input > * { - vertical-align: baseline; - display: -moz-inline-stack; - display: inline-block; - zoom: 1; - *display: inline; -} -.selectize-control.multi .selectize-input > div { - cursor: pointer; - margin: 0 3px 3px 0; - padding: 1px 3px; - background: #efefef; - color: #333333; - border: 0 solid rgba(0, 0, 0, 0); -} -.selectize-control.multi .selectize-input > div.active { - background: #428bca; - color: #ffffff; - border: 0 solid rgba(0, 0, 0, 0); -} -.selectize-control.multi .selectize-input.disabled > div, -.selectize-control.multi .selectize-input.disabled > div.active { - color: #808080; - background: #ffffff; - border: 0 solid rgba(77, 77, 77, 0); -} -.selectize-input > input { - display: inline-block !important; - padding: 0 !important; - min-height: 0 !important; - max-height: none !important; - max-width: 100% !important; - margin: 0 !important; - text-indent: 0 !important; - border: 0 none !important; - background: none !important; - line-height: inherit !important; - -webkit-user-select: auto !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; -} -.selectize-input > input::-ms-clear { - display: none; -} -.selectize-input > input:focus { - outline: none !important; -} -.selectize-input::after { - content: ' '; - display: block; - clear: left; -} -.selectize-input.dropdown-active::before { - content: ' '; - display: block; - position: absolute; - background: #ffffff; - height: 1px; - bottom: 0; - left: 0; - right: 0; -} -.selectize-dropdown { - position: absolute; - z-index: 10; - border: 1px solid #d0d0d0; - background: #ffffff; - margin: -1px 0 0 0; - border-top: 0 none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.selectize-dropdown [data-selectable] { - cursor: pointer; - overflow: hidden; -} -.selectize-dropdown [data-selectable] .highlight { - background: rgba(255, 237, 40, 0.4); - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; -} -.selectize-dropdown [data-selectable], -.selectize-dropdown .optgroup-header { - padding: 3px 12px; -} -.selectize-dropdown .optgroup:first-child .optgroup-header { - border-top: 0 none; -} -.selectize-dropdown .optgroup-header { - color: #777777; - background: #ffffff; - cursor: default; -} -.selectize-dropdown .active { - background-color: #f5f5f5; - color: #262626; -} -.selectize-dropdown .active.create { - color: #262626; -} -.selectize-dropdown .create { - color: rgba(51, 51, 51, 0.5); -} -.selectize-dropdown-content { - overflow-y: auto; - overflow-x: hidden; - max-height: 200px; -} -.selectize-control.single .selectize-input, -.selectize-control.single .selectize-input input { - cursor: pointer; -} -.selectize-control.single .selectize-input.input-active, -.selectize-control.single .selectize-input.input-active input { - cursor: text; -} -.selectize-control.single .selectize-input:after { - content: ' '; - display: block; - position: absolute; - top: 50%; - right: 17px; - margin-top: -3px; - width: 0; - height: 0; - border-style: solid; - border-width: 5px 5px 0 5px; - border-color: #333333 transparent transparent transparent; -} -.selectize-control.single .selectize-input.dropdown-active:after { - margin-top: -4px; - border-width: 0 5px 5px 5px; - border-color: transparent transparent #333333 transparent; -} -.selectize-control.rtl.single .selectize-input:after { - left: 17px; - right: auto; -} -.selectize-control.rtl .selectize-input > input { - margin: 0 4px 0 -2px !important; -} -.selectize-control .selectize-input.disabled { - opacity: 0.5; - background-color: #ffffff; -} -.selectize-dropdown, -.selectize-dropdown.form-control { - height: auto; - padding: 0; - margin: 2px 0 0 0; - z-index: 1000; - background: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); -} -.selectize-dropdown .optgroup-header { - font-size: 12px; - line-height: 1.42857143; -} -.selectize-dropdown .optgroup:first-child:before { - display: none; -} -.selectize-dropdown .optgroup:before { - content: ' '; - display: block; - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; - margin-left: -12px; - margin-right: -12px; -} -.selectize-dropdown-content { - padding: 5px 0; -} -.selectize-dropdown-header { - padding: 6px 12px; -} -.selectize-input { - min-height: 34px; -} -.selectize-input.dropdown-active { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.selectize-input.dropdown-active::before { - display: none; -} -.selectize-input.focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); -} -.has-error .selectize-input { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .selectize-input:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; -} -.selectize-control.multi .selectize-input.has-items { - padding-left: 9px; - padding-right: 9px; -} -.selectize-control.multi .selectize-input > div { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.form-control.selectize-control { - padding: 0; - //height: auto; - border: none; - background: none; - -webkit-box-shadow: none; - box-shadow: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} diff --git a/src/resources/assets/src/sass/_variables.scss b/src/resources/assets/src/sass/_variables.scss deleted file mode 100644 index d7ef260..0000000 --- a/src/resources/assets/src/sass/_variables.scss +++ /dev/null @@ -1,10 +0,0 @@ -$brand-primary: darken(#3498db, 6.5%) !default; // #337ab7 -$brand-success: #27ae60 !default; -$brand-info: #2980b9 !default; -$brand-warning: #e67e22 !default; -$brand-danger: #c0392b !default; - -$font-family-sans-serif: 'Roboto', sans-serif !default; -$font-family-serif: 'Roboto', sans-serif !default; - -$font-family-brand: "Raleway",Helvetica, Arial !default; \ No newline at end of file diff --git a/src/resources/assets/src/sass/collejo.scss b/src/resources/assets/src/sass/collejo.scss deleted file mode 100644 index 66c2099..0000000 --- a/src/resources/assets/src/sass/collejo.scss +++ /dev/null @@ -1,16 +0,0 @@ -@import "variables"; -@import "animate"; -@import "selectize"; -@import "bootstrap"; -@import "../../../../node_modules/font-awesome/scss/font-awesome"; -@import "../../../../node_modules/eonasdan-bootstrap-datetimepicker/src/sass/bootstrap-datetimepicker"; - -@import "collejo/common"; -@import "collejo/uploader"; -@import "collejo/checkbox"; -@import "collejo/tabs"; -@import "collejo/auth"; -@import "collejo/setup"; -@import "collejo/errors"; -@import "collejo/dash"; -@import "collejo/modal"; \ No newline at end of file diff --git a/src/resources/assets/src/sass/collejo/_auth.scss b/src/resources/assets/src/sass/collejo/_auth.scss deleted file mode 100644 index fb7aa03..0000000 --- a/src/resources/assets/src/sass/collejo/_auth.scss +++ /dev/null @@ -1,8 +0,0 @@ -.auth-row{min-height: 100%;height: auto !important; margin-bottom: 50px;} -.form-auth{margin-top: 20%;background: #fff;padding: 30px;} - -@media (max-width: $screen-sm-max) { - .form-auth{margin-top: 30px;} -} - -body.auth-body{background: url("/images/auth-bg.jpg");background-size: cover} \ No newline at end of file diff --git a/src/resources/assets/src/sass/collejo/_checkbox.scss b/src/resources/assets/src/sass/collejo/_checkbox.scss deleted file mode 100644 index 102fdd7..0000000 --- a/src/resources/assets/src/sass/collejo/_checkbox.scss +++ /dev/null @@ -1,72 +0,0 @@ -.checkbox-row { - position: relative; - margin: 15px 0; - - &.disabled{ - label { - background: $input-bg-disabled !important; - cursor: not-allowed; - &:after { - content: none; - } - &:hover::after { - opacity: 0; - } - } - input[type=checkbox]:checked + label:after { - content: '' !important; - opacity: 1 !important; - } - } - - label { - width: 22px; - height: 22px; - cursor: pointer; - position: absolute; - top: 0; - left: 0; - border: 1px solid #ccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - background: #fff; - - &:after { - content: ''; - width: 9px; - height: 5px; - position: absolute; - top: 6px; - left: 6px; - border: 3px solid $gray; - border-top: none; - border-right: none; - background: transparent; - opacity: 0; - transform: rotate(-45deg); - } - - &:hover::after { - opacity: 0.5; - } - } - - span{ - font-weight: normal; - margin-left: 30px; - width: 290px; - position: absolute; - } - - input[type=checkbox] { - visibility: hidden; - - &:checked + label:after { - opacity: 1; - } - } -} \ No newline at end of file diff --git a/src/resources/assets/src/sass/collejo/_common.scss b/src/resources/assets/src/sass/collejo/_common.scss deleted file mode 100644 index 1745773..0000000 --- a/src/resources/assets/src/sass/collejo/_common.scss +++ /dev/null @@ -1,174 +0,0 @@ -body{height: 100%;} - -h2{padding-bottom: 15px;} - -.brand-text{font-family: $font-family-brand;} - -label.error{color: $brand-danger;font-size: 10px;} -.form-control.error{ - border-color: $brand-danger; - &:active,&:focus{ - box-shadow: inset 0 1px 1px rgba($brand-danger, 0.075), 0 0 8px rgba($brand-danger, 0.6); - } -} - -.spinner-wrap{ - display: inline-block; - &.inline{ - position: absolute;right: -10px;top: 10px;z-index: 3; - .spinner{border: .25rem solid $brand-primary;border-top-color: white;} - } -} -.input-group{ - .spinner-wrap.inline{right: -25px;} -} - -.progress{height: 10px;} - -.btn{ - text-transform: uppercase; - .spinner-wrap{margin-left: 10px;} -} - -// spinenr -.spinner { - display: inline-block; - border-radius: 50%; - width: 15px; - height: 15px; - border: .25rem solid rgba(255,255,255, 0.2); - border-top-color: rgb(255,255,255); - animation: spin 1s infinite linear; - -} - -@keyframes spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -// loading overlay -.loading-wrap { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); -} -.loading-wrap .dot { - width: 10px; - height: 10px; - border: 2px solid white; - border-radius: 50%; - float: left; - margin: 0 5px; - transform: scale(0); - animation: dotfx 1000ms ease infinite 0ms; -} -.loading-wrap .dot:nth-child(2) { - animation: dotfx 1000ms ease infinite 300ms; -} -.loading-wrap .dot:nth-child(3) { - animation: dotfx 1000ms ease infinite 600ms; -} -@keyframes dotfx { - 50% { - transform: scale(1); - opacity: 1; - } - 100% { - opacity: 0; - } -} - - -// modal animation -.modal { - /*! adjust transition time */ - -webkit-transition: all ease-out !important; - -moz-transition: all 0.3s ease-out !important; - -o-transition: all 0.3s ease-out !important; - transition: all 0.3s ease-out !important; -} -.modal.in .modal-dialog { - /*! editthis transform to any transform you want */ - -webkit-transform: scale(1, 1) !important; - -ms-transform: scale(1, 1) !important; - transform: scale(1, 1) !important; -} -.modal.fade .modal-dialog { - /*! disable sliding from left/right/top/bottom */ - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); -} - -.label{ - a{color: #fff;text-decoration: none;} -} - -footer{font-size: 12px;padding-bottom: 5px;clear: both;} -.section-content{margin-bottom: 0;} - -// fixing selectize input styles for disabled state -.selectize-input{ - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - &.locked{background: $input-bg-disabled;cursor: not-allowed;opacity:1} -} -.selectize-control.error{ - .selectize-input{ - border-color: $brand-danger; - &.focus{box-shadow: inset 0 1px 1px rgba($brand-danger, 0.075), 0 0 8px rgba($brand-danger, 0.6);} - } -} -// selectize clear buttn -.selectize-control.plugin-allow-clear .clear-selection{ - position: absolute;top: 7px;right: 35px;z-index: 10;color: $gray-light;cursor: pointer; - &.disabled{color: $gray-lighter;} -} -// min width for inline forms -.form-inline .selectize-control{min-width: 225px;} -.selectize-dropdown.form-control{position: absolute;} -// input sm -.selectize-control.input-sm{ - .selectize-input{ - font-size: 12px; padding-top: 4px; padding-bottom: 3px; min-height: 30px; overflow: inherit; border-radius: 3px; - input { font-size: 12px; } - } - .clear-selection{top:5px;right:30px;} -} -.input-group .form-control:not(:first-child):not(:last-child) .selectize-input{ - border-bottom-right-radius: 0;border-top-right-radius:0;border-right:0; -} - -ul.list-indented > li {margin-left: 25px;} - -.label{margin:0 2px;} - -@media (max-width: $screen-xs-max) { - -} - -@media (min-width: $screen-sm-min) { - -} - -@media (max-width: $screen-sm-max) { - -} - -@media (min-width: $screen-md-min) { - -} - -@media (max-width: $screen-md-max) { - -} - -@media (min-width: $screen-lg-min) { - -} \ No newline at end of file diff --git a/src/resources/assets/src/sass/collejo/_dash.scss b/src/resources/assets/src/sass/collejo/_dash.scss deleted file mode 100644 index a904601..0000000 --- a/src/resources/assets/src/sass/collejo/_dash.scss +++ /dev/null @@ -1,84 +0,0 @@ -body{background: $gray-lighter;} - -.navbar-brand{ - img{float: left;margin: -5px;} - span{display: inline-block;float: left;padding-left: 10px;font-size: 20px;} -} - -.landing-screen{ - i.fa{font-size: 100px; color: lighten($gray-light, 50%);margin-top: 50px;margin-bottom: 30px;} -} - -.dashboard-section{ - padding-top: 15px; -} - -.dash-content{ - margin-top:50px;padding-top:15px; - - .section{ - h2{margin: 0;font-family: $font-family-brand;} - .tab-content{background: #fff;} - .tab-pane{ - padding: 15px; - .form-horizontal, .columns{ - padding-top: 15px; - .placeholder{margin-top: -15px;} - } - } - } - - .section-content{ - background: #fff; - &.section-content-transparent{background:transparent;} - } - - .table{ - td.tools-column{ - @extend .text-right;width: 150px;height: 40px; - a{display: none;} - } - tr:hover{ - .tools-column a{display: inline-block;} - } - } - - .criteria-filter{ - label{margin-right: 15px;} - .panel-body{padding: 15px 15px 5px 15px;} - .form-group{margin-right: 25px;margin-bottom: 10px;} - .btn-col{margin-right: 0;} - } -} - -.panel{ - .panel-footer{ - .tools-footer{ - display: none;@extend .pull-right; - a{margin-left: 10px;} - } - .label{ margin-top: 5px;} - } - &:hover{ - .tools-footer{display: block;} - } -} - -.placeholder{ - background: -webkit-repeating-linear-gradient(135deg, #fff, #fff 25%, #F7F7F7 25%, #F7F7F7 50%, #fff 50%) top left fixed; - background: repeating-linear-gradient(-45deg, #fff, #fff 25%, #F7F7F7 25%, #F7F7F7 50%, #fff 50%) top left fixed; - background-size: 30px 30px; - text-align: center;padding:30px 15px; - margin: 0 -15px; - color: $gray-light; -} -.placeholder-row{ - padding: 15px; - .placeholder{margin: 0;} -} - -.breadcrumb{padding: 8px 0 ;background: transparent;} - -.pagination-row{width:100%;text-align: center;} - -footer{margin-top: 10px;} \ No newline at end of file diff --git a/src/resources/assets/src/sass/collejo/_errors.scss b/src/resources/assets/src/sass/collejo/_errors.scss deleted file mode 100644 index a2867cb..0000000 --- a/src/resources/assets/src/sass/collejo/_errors.scss +++ /dev/null @@ -1,37 +0,0 @@ -body.error-layout { - padding-top: 20px; - padding-bottom: 20px; - - .header { - h3 { - margin-top: 0; - margin-bottom: 0; - line-height: 40px; - a{text-decoration: none;color: $gray-light;} - } - } - -.error-page{ - min-height: 350px; - i.fa{font-size: 100px; color: lighten($gray-light, 50%);margin-top: 50px;margin-bottom: 30px;} -} - - @media (min-width: 768px) { - .container { - max-width: 730px; - } - } - .container-narrow > hr { - margin: 30px 0; - } - - @media screen and (min-width: 768px) { - .header, - .marketing, - .footer { - padding-right: 0; - padding-left: 0; - } - } - -} \ No newline at end of file diff --git a/src/resources/assets/src/sass/collejo/_modal.scss b/src/resources/assets/src/sass/collejo/_modal.scss deleted file mode 100644 index c47fa6a..0000000 --- a/src/resources/assets/src/sass/collejo/_modal.scss +++ /dev/null @@ -1,3 +0,0 @@ -.modal-section{ - padding: 15px; -} \ No newline at end of file diff --git a/src/resources/assets/src/sass/collejo/_setup.scss b/src/resources/assets/src/sass/collejo/_setup.scss deleted file mode 100644 index 647a1de..0000000 --- a/src/resources/assets/src/sass/collejo/_setup.scss +++ /dev/null @@ -1,43 +0,0 @@ -body.setup-layout { - padding-top: 20px; - padding-bottom: 20px; - - .header { - h3 { - margin-top: 0; - margin-bottom: 0; - line-height: 40px; - a{text-decoration: none;color: $gray-light;} - } - } - -.setup-incomplete{ - min-height: 350px; - i.fa{font-size: 100px; color: lighten($gray-light, 50%);margin-top: 50px;margin-bottom: 30px;} -} - - @media (min-width: 768px) { - .container { - max-width: 730px; - } - } - .container-narrow > hr { - margin: 30px 0; - } - - @media screen and (min-width: 768px) { - .header, - .marketing, - .footer { - padding-right: 0; - padding-left: 0; - } - .header { - margin-bottom: 30px; - } - .jumbotron { - border-bottom: 0; - } - } - -} \ No newline at end of file diff --git a/src/resources/assets/src/sass/collejo/_tabs.scss b/src/resources/assets/src/sass/collejo/_tabs.scss deleted file mode 100644 index 098aa4c..0000000 --- a/src/resources/assets/src/sass/collejo/_tabs.scss +++ /dev/null @@ -1,56 +0,0 @@ -.tabs-left, .tabs-right { - border-bottom: none; - padding-top: 2px; -} -.tabs-left { - border-right: 1px solid #ddd; -} -.tabs-right { - border-left: 1px solid #ddd; -} -.tabs-left>li, .tabs-right>li { - float: none; - margin-bottom: 2px; -} -.tabs-left>li { - margin-right: -1px; -} -.tabs-right>li { - margin-left: -1px; -} -.tabs-left>li.active>a, -.tabs-left>li.active>a:hover, -.tabs-left>li.active>a:focus { - border-bottom-color: #ddd; - border-right-color: transparent; -} - -.tabs-right>li.active>a, -.tabs-right>li.active>a:hover, -.tabs-right>li.active>a:focus { - border-bottom: 1px solid #ddd; - border-left-color: transparent; -} -.tabs-left>li>a { - border-radius: 4px 0 0 4px; - margin-right: 0; - display:block; -} -.tabs-right>li>a { - border-radius: 0 4px 4px 0; - margin-right: 0; -} - -.tabs-left{ - padding-top: 0;margin-top: 2px; -} - -.tab-content{ - border-top: 1px solid #ddd; - border-right: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin-left: -30px; - margin-top: 2px; -} - -.nav-tabs > li > a:hover{border-color: transparent #ddd transparent transparent;} \ No newline at end of file diff --git a/src/resources/assets/src/sass/collejo/_uploader.scss b/src/resources/assets/src/sass/collejo/_uploader.scss deleted file mode 100644 index cb2fe1d..0000000 --- a/src/resources/assets/src/sass/collejo/_uploader.scss +++ /dev/null @@ -1,69 +0,0 @@ -.file-uploader{ - .upload-block{ - float: left;border:thin solid $gray-lighter;border-radius: 3px; - .fileinput-button{ - padding: 0;text-align: center;opacity: .2;background: $gray-lighter; - i.fa{color: $gray-light;opacity: .3;} - &:hover{opacity:.4} - &.disabled{ - background:$input-bg-disabled; - } - } - .progress{height: 5px;margin-right: 5px;margin-left: 5px;position: absolute;bottom: 5px;margin-bottom: 0;} - } - .delete-img{color: $brand-danger;position: absolute;top: 0;right: -20px;padding: 5px;z-index: 20;display: none;} - &:hover{ - .delete-img{display: inline;} - } - .uploaded-files{ - float: left; - .block{float: left;border:thin solid $gray-lighter;border-radius: 3px;} - } - &.single{ - .upload-block{position: relative;z-index: 10;} - .uploaded-files{position: absolute;z-index: 9;} - } - &.small{ - .block{width: 80px;} - .upload-block,.upload-block .fileinput-button{ - width: 80px;height: 80px;line-height: 80px; - i.fa{font-size:20px;} - .progress{width: 80px-10px} - } - } - &.large{ - .block{width: 160px;} - .upload-block,.upload-block .fileinput-button{ - width: 160px;height: 160px;line-height: 160px; - i.fa{font-size:40px;} - .progress{width: 160px-10px} - } - } -} - - -.fileinput-button { - position: relative; - overflow: hidden; - display: inline-block; -} -.fileinput-button input { - position: absolute; - top: 0; - right: 0; - margin: 0; - opacity: 0; - -ms-filter: 'alpha(opacity=0)'; - font-size: 200px !important; - direction: ltr; - cursor: pointer; -} - -/* Fixes for IE < 8 */ -@media screen\9 { - .fileinput-button input { - filter: alpha(opacity=0); - font-size: 100%; - height: 100%; - } -} diff --git a/src/resources/lang/en/common.php b/src/resources/lang/en/common.php deleted file mode 100644 index e8a31ae..0000000 --- a/src/resources/lang/en/common.php +++ /dev/null @@ -1,46 +0,0 @@ - 'Create New', - 'continue' => 'Continue', - 'ok' => 'Ok', - 'yes' => 'Yes', - 'no' => 'No', - 'save' => 'Save', - 'saving' => 'Saving...', - 'try_again' => 'Try Again', - 'edit' => 'Edit', - 'delete' => 'Delete', - 'remove' => 'Remove', - 'disable' => 'Disable', - 'disabled' => 'Disabled', - 'enable' => 'Enable', - 'active' => 'Active', - 'inactive' => 'Inactive', - 'create' => 'Create New', - 'list' => 'List', - 'search' => 'Search', - 'clear_search' => 'Clear', - - 'dashboard' => 'Dashboard', - 'go_to_dashboard' => 'Go To Dashboard', - - 'delete_confirm' => 'Are you sure you want to delete this item?', - 'action_required' => 'Action Required', - 'copyright_text' => 'Powered by Collejo', - 'copyright_link' => 'https://github.com/codebreez/collejo-app', - - 'authorization_failed' => 'You do not have permission to do this action', - 'ajax_token_mismatch' => 'Could not fulfill your request. Please refresh the page and try again', - 'ajax_unauthorize' => 'You are not authorized to perform this action', - 'validation_failed' => 'Validation Failed', - 'validation_correct' => 'Please correct them and try again', - 'select' => 'Select...' -]; \ No newline at end of file diff --git a/src/resources/lang/en/entities.php b/src/resources/lang/en/entities.php deleted file mode 100644 index 928ab4b..0000000 --- a/src/resources/lang/en/entities.php +++ /dev/null @@ -1,14 +0,0 @@ - [ - 'singular' => 'Grade', //'Course', - 'plural' => 'Grades', //'Courses' - ], - 'term' => [ - 'singular' => 'Term', - 'plural' => 'Terms' - ] -]; \ No newline at end of file diff --git a/src/resources/lang/en/errors.php b/src/resources/lang/en/errors.php deleted file mode 100644 index 9ac7c95..0000000 --- a/src/resources/lang/en/errors.php +++ /dev/null @@ -1,8 +0,0 @@ - 'The requested resource no longer exists.', - '403' => 'You don\'t have permission to view this page.', - '404' => 'The page you requested cannot be found.', - '500' => 'Something went terribly wrong. Could\' complete your request.', -]; \ No newline at end of file diff --git a/src/resources/lang/en/passwords.php b/src/resources/lang/en/passwords.php deleted file mode 100644 index 6a3171f..0000000 --- a/src/resources/lang/en/passwords.php +++ /dev/null @@ -1,17 +0,0 @@ - 'Passwords must be at least six characters and match the confirmation.', - 'reset' => 'Your password has been reset!', - 'sent' => 'We have e-mailed your password reset link!', - 'token' => 'This password reset token is invalid.', - 'user' => "We can't find a user with that e-mail address.", - -]; diff --git a/src/resources/views/dash/menu/menubar.blade.php b/src/resources/views/dash/menu/menubar.blade.php deleted file mode 100644 index 4c720b1..0000000 --- a/src/resources/views/dash/menu/menubar.blade.php +++ /dev/null @@ -1,84 +0,0 @@ - \ No newline at end of file diff --git a/src/resources/views/dash/sections/tab_view.blade.php b/src/resources/views/dash/sections/tab_view.blade.php deleted file mode 100644 index bec8dc8..0000000 --- a/src/resources/views/dash/sections/tab_view.blade.php +++ /dev/null @@ -1,52 +0,0 @@ -@extends('collejo::layouts.dash') - -@section('content') - -
    - - @yield('scripts') - - @hasSection('breadcrumbs') - -

    @yield('title')

    - -
    - @yield('tools') -
    - - @yield('breadcrumbs') - - @else - -
    - @yield('tools') -
    - -

    @yield('title')

    - - @endif - -
    - -
    - - @yield('tabs') - -
    - -
    -
    -
    - - @yield('tab') - -
    -
    -
    -
    - -
    - -
    - -@endsection \ No newline at end of file diff --git a/src/resources/views/dash/sections/table_view.blade.php b/src/resources/views/dash/sections/table_view.blade.php deleted file mode 100644 index 683b3df..0000000 --- a/src/resources/views/dash/sections/table_view.blade.php +++ /dev/null @@ -1,77 +0,0 @@ -@extends('collejo::layouts.dash') - -@section('content') - -
    - - @yield('tools') - -

    @yield('title') - @hasSection('count') - (@yield('count')) - @endif -

    - - @if(isset($criteria)) - -
    -
    - -
    - - @foreach($criteria->formElements() as $element) - - @if($element['type'] == 'text') - -
    - - -
    - - @endif - - @if($element['type'] == 'select') - -
    - - -
    - - @endif - - @endforeach - - - -
    - -
    - - -
    -
    - - @endif - -
    -
    - - @yield('table') - -
    -
    - -
    - -@endsection \ No newline at end of file diff --git a/src/resources/views/home.blade.php b/src/resources/views/home.blade.php deleted file mode 100644 index db21a6e..0000000 --- a/src/resources/views/home.blade.php +++ /dev/null @@ -1 +0,0 @@ -collejo home \ No newline at end of file diff --git a/src/resources/views/layouts/auth.blade.php b/src/resources/views/layouts/auth.blade.php deleted file mode 100644 index 531c6b1..0000000 --- a/src/resources/views/layouts/auth.blade.php +++ /dev/null @@ -1,24 +0,0 @@ - - - - @include('collejo::layouts.partials.head') - - - -
    - -
    - -
    - - @yield('content') - -
    - -
    -
    - - @include('collejo::layouts.partials.footer') - - - diff --git a/src/resources/views/layouts/dash.blade.php b/src/resources/views/layouts/dash.blade.php deleted file mode 100644 index 745ac07..0000000 --- a/src/resources/views/layouts/dash.blade.php +++ /dev/null @@ -1,17 +0,0 @@ - - - - @include('collejo::layouts.partials.head') - - - - @include('collejo::dash.menu.menubar') - -
    - @yield('content') -
    - - @include('collejo::layouts.partials.footer') - - - diff --git a/src/resources/views/layouts/errors.blade.php b/src/resources/views/layouts/errors.blade.php deleted file mode 100644 index dff6c84..0000000 --- a/src/resources/views/layouts/errors.blade.php +++ /dev/null @@ -1,21 +0,0 @@ - - - - @include('collejo::layouts.partials.head') - - - -
    - - - @yield('content') - -
    - - - @include('collejo::layouts.partials.footer') - - - diff --git a/src/resources/views/layouts/partials/footer.blade.php b/src/resources/views/layouts/partials/footer.blade.php deleted file mode 100644 index 1679aa8..0000000 --- a/src/resources/views/layouts/partials/footer.blade.php +++ /dev/null @@ -1,15 +0,0 @@ -
    - {{ date('Y', time()) }} {!! trans('common.copyright_text', ['link' => trans('common.copyright_link')]) !!} - - @if(env('APP_DEBUG') && Auth::user()) - - @endif -
    - -{{ Asset::renderScripts() }} - - \ No newline at end of file diff --git a/src/resources/views/layouts/partials/head.blade.php b/src/resources/views/layouts/partials/head.blade.php deleted file mode 100644 index f8fce53..0000000 --- a/src/resources/views/layouts/partials/head.blade.php +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - @yield('title') - Collejo - - - - - {{ Asset::renderStyles() }} - - - - - - \ No newline at end of file diff --git a/src/resources/views/layouts/setup.blade.php b/src/resources/views/layouts/setup.blade.php deleted file mode 100644 index 683ef1b..0000000 --- a/src/resources/views/layouts/setup.blade.php +++ /dev/null @@ -1,23 +0,0 @@ - - - - @include('collejo::layouts.partials.head') - - - -
    - - - @yield('content') - -
    - - - diff --git a/src/resources/views/setup/incomplete.blade.php b/src/resources/views/setup/incomplete.blade.php deleted file mode 100644 index 073dcd4..0000000 --- a/src/resources/views/setup/incomplete.blade.php +++ /dev/null @@ -1,13 +0,0 @@ -@extends('collejo::layouts.setup') - -@section('title', 'Setup') - -@section('content') - -
    - -

    {{ trans('setup.incomplete') }}

    - {{ trans('setup.guide') }} -
    - -@endsection \ No newline at end of file